diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/core/common/CharReaderTest.cpp | 167 | ||||
-rw-r--r-- | test/core/common/LoggerTest.cpp | 44 | ||||
-rw-r--r-- | test/core/common/SourceContextReaderTest.cpp | 334 |
3 files changed, 369 insertions, 176 deletions
diff --git a/test/core/common/CharReaderTest.cpp b/test/core/common/CharReaderTest.cpp index fba60f9..a1ea18f 100644 --- a/test/core/common/CharReaderTest.cpp +++ b/test/core/common/CharReaderTest.cpp @@ -565,172 +565,5 @@ TEST(CharReader, fork) ASSERT_EQ(5, reader.getOffset()); } -/*TEST(CharReader, context) -{ - std::string testStr{"first line\n\n\rsecond line\n\rlast line"}; - // 0123456789 0 123456789012 3456789012 - // 0 1 2 3 - - // Retrieval at beginning of stream - { - CharReader reader{testStr}; - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("first line", ctx.text); - ASSERT_EQ(0, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // Retrieval in middle of line - { - CharReader reader{testStr}; - SourceContext ctx = reader.getContext(80); - - char c; - for (int i = 0; i < 5; i++) - reader.read(c); - - ASSERT_EQ("first line", ctx.text); - ASSERT_EQ(0, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // Retrieval in whitespace sequence - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 11; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("first line", ctx.text); - ASSERT_EQ(10, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // Truncation of text - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 5; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(3); - ASSERT_EQ("t l", ctx.text); - ASSERT_EQ(1, ctx.relPos); - ASSERT_TRUE(ctx.truncatedStart); - ASSERT_TRUE(ctx.truncatedEnd); - } - - // Second line - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 12; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("second line", ctx.text); - ASSERT_EQ(0, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // End of second line - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 23; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("second line", ctx.text); - ASSERT_EQ(11, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // Last line - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 24; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("last line", ctx.text); - ASSERT_EQ(0, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // Middle of last line - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 28; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("last line", ctx.text); - ASSERT_EQ(4, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // Middle of last line truncated - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 28; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(3); - ASSERT_EQ("t l", ctx.text); - ASSERT_EQ(1, ctx.relPos); - ASSERT_TRUE(ctx.truncatedStart); - ASSERT_TRUE(ctx.truncatedEnd); - } - - // End of stream - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 100; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(80); - ASSERT_EQ("last line", ctx.text); - ASSERT_EQ(9, ctx.relPos); - ASSERT_FALSE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } - - // End of stream truncated - { - CharReader reader{testStr}; - - char c; - for (int i = 0; i < 100; i++) - reader.read(c); - - SourceContext ctx = reader.getContext(4); - ASSERT_EQ("line", ctx.text); - ASSERT_EQ(4, ctx.relPos); - ASSERT_TRUE(ctx.truncatedStart); - ASSERT_FALSE(ctx.truncatedEnd); - } -}*/ - } diff --git a/test/core/common/LoggerTest.cpp b/test/core/common/LoggerTest.cpp index 9b20cc6..7b0e6d0 100644 --- a/test/core/common/LoggerTest.cpp +++ b/test/core/common/LoggerTest.cpp @@ -20,28 +20,51 @@ #include <gtest/gtest.h> +#include <core/common/CharReader.hpp> #include <core/common/Logger.hpp> +#include <core/common/SourceContextReader.hpp> namespace ousia { struct Pos { SourceLocation pos; - Pos(SourceLocation pos = SourceLocation{}) - : pos(pos) {}; + Pos(SourceLocation pos = SourceLocation{}) : pos(pos){}; SourceLocation getLocation() { return pos; } }; +static const std::string testStr = + "\\link[domain]{book}\n" // 1 + "\\link[domain]{meta}\n" // 2 + "\n" // 3 + "\\meta{\n" // 4 + "\t\\title{The Adventures Of Tom Sawyer}\n" // 5 + "\t\\author{Mark Twain}\n" // 6 + "}\n" // 7 + "\n" // 8 + "\\book{\n" // 9 + "\n" // 10 + "\n" // 11 + "\\chapter\n" // 12 + "<<TOM!>>\n" // 13 + "\n" // 14 + "No answer.\n" // 15 + "\n" // 16 + "<<TOM!>>\n" // 17 + "\n" // 18 + "No answer.\n" // 19 + "\n" // 20 + "<<What's gone with that boy, I wonder? You TOM!>>\n" // 21 + "}\n"; // 22 + +static SourceContextReader contextReader{}; + static SourceContext contextCallback(const SourceLocation &location) { - SourceContext ctx; - ctx.filename = "testfile.test"; - ctx.startLine = 10; - ctx.endLine = 10; - ctx.startColumn = 20; - ctx.endColumn = 20; - return ctx; + CharReader reader{testStr, 0}; + return contextReader.readContext(reader, location, 60, + "the_adventures_of_tom_sawyer.opd"); } TEST(TerminalLogger, log) @@ -52,6 +75,9 @@ TEST(TerminalLogger, log) logger.debug("This is a test debug message"); logger.note("This is a test note"); + logger.note("This is a test note with point context", SourceLocation{0, 49}); + logger.note("This is a test note with range context", SourceLocation{0, 49, 55}); + logger.note("This is a test note with multiline context", SourceLocation{0, 49, 150}); logger.warning("This is a test warning"); logger.error("This is a test error"); logger.fatalError("This is a test fatal error!"); diff --git a/test/core/common/SourceContextReaderTest.cpp b/test/core/common/SourceContextReaderTest.cpp new file mode 100644 index 0000000..4d74e67 --- /dev/null +++ b/test/core/common/SourceContextReaderTest.cpp @@ -0,0 +1,334 @@ +/* + Ousía + Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <gtest/gtest.h> + +#include <core/common/CharReader.hpp> +#include <core/common/SourceContextReader.hpp> + +namespace ousia { + +static const std::string testStr{"first line\n\nthird line\nlast line"}; +// 0123456789 0 12345678901 23456789012 +// 0 1 2 3 + +static SourceContext readContext( + SourceContextReader &sr, size_t pos, + size_t width = SourceContextReader::MAX_MAX_CONTEXT_LENGTH) +{ + CharReader reader{testStr}; + return sr.readContext(reader, SourceRange{pos}, width); +} + +TEST(SourceContextReader, firstLine) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 0); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("first line", ctx.text); + EXPECT_EQ(0U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(1U, ctx.startLine); + EXPECT_EQ(1U, ctx.startColumn); + EXPECT_EQ(1U, ctx.endLine); + EXPECT_EQ(1U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, firstLineCenter) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 5); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("first line", ctx.text); + EXPECT_EQ(5U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(1U, ctx.startLine); + EXPECT_EQ(6U, ctx.startColumn); + EXPECT_EQ(1U, ctx.endLine); + EXPECT_EQ(6U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, firstLineBeginTruncated) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 0, 3); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("fir", ctx.text); + EXPECT_EQ(0U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(1U, ctx.startLine); + EXPECT_EQ(1U, ctx.startColumn); + EXPECT_EQ(1U, ctx.endLine); + EXPECT_EQ(1U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_TRUE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, inWhitespaceSequence) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 10); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("first line", ctx.text); + EXPECT_EQ(10U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(1U, ctx.startLine); + EXPECT_EQ(11U, ctx.startColumn); + EXPECT_EQ(1U, ctx.endLine); + EXPECT_EQ(11U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, truncation) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 5, 3); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("t l", ctx.text); + EXPECT_EQ(1U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(1U, ctx.startLine); + EXPECT_EQ(6U, ctx.startColumn); + EXPECT_EQ(1U, ctx.endLine); + EXPECT_EQ(6U, ctx.endColumn); + EXPECT_TRUE(ctx.truncatedStart); + EXPECT_TRUE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, emptyLine) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 11); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("", ctx.text); + EXPECT_EQ(0U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(2U, ctx.startLine); + EXPECT_EQ(1U, ctx.startColumn); + EXPECT_EQ(2U, ctx.endLine); + EXPECT_EQ(1U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, thirdLine) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 12); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("third line", ctx.text); + EXPECT_EQ(0U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(3U, ctx.startLine); + EXPECT_EQ(1U, ctx.startColumn); + EXPECT_EQ(3U, ctx.endLine); + EXPECT_EQ(1U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, thirdLineBeginTruncated) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 12, 3); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("thi", ctx.text); + EXPECT_EQ(0U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(3U, ctx.startLine); + EXPECT_EQ(1U, ctx.startColumn); + EXPECT_EQ(3U, ctx.endLine); + EXPECT_EQ(1U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_TRUE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, thirdLineEnd) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 22); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("third line", ctx.text); + EXPECT_EQ(10U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(3U, ctx.startLine); + EXPECT_EQ(11U, ctx.startColumn); + EXPECT_EQ(3U, ctx.endLine); + EXPECT_EQ(11U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, lastLine) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 23); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("last line", ctx.text); + EXPECT_EQ(0U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(4U, ctx.startLine); + EXPECT_EQ(1U, ctx.startColumn); + EXPECT_EQ(4U, ctx.endLine); + EXPECT_EQ(1U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, lastLineMiddle) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 27); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("last line", ctx.text); + EXPECT_EQ(4U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(4U, ctx.startLine); + EXPECT_EQ(5U, ctx.startColumn); + EXPECT_EQ(4U, ctx.endLine); + EXPECT_EQ(5U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, lastLineMiddleTruncated) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 27, 3); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("t l", ctx.text); + EXPECT_EQ(1U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(4U, ctx.startLine); + EXPECT_EQ(5U, ctx.startColumn); + EXPECT_EQ(4U, ctx.endLine); + EXPECT_EQ(5U, ctx.endColumn); + EXPECT_TRUE(ctx.truncatedStart); + EXPECT_TRUE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, lastLineEnd) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 32); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("last line", ctx.text); + EXPECT_EQ(9U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(4U, ctx.startLine); + EXPECT_EQ(10U, ctx.startColumn); + EXPECT_EQ(4U, ctx.endLine); + EXPECT_EQ(10U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, lastLineEndTruncated) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 32, 3); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("ine", ctx.text); + EXPECT_EQ(3U, ctx.relPos); + EXPECT_EQ(0U, ctx.relLen); + EXPECT_EQ(4U, ctx.startLine); + EXPECT_EQ(10U, ctx.startColumn); + EXPECT_EQ(4U, ctx.endLine); + EXPECT_EQ(10U, ctx.endColumn); + EXPECT_TRUE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +TEST(SourceContextReader, lastLineBeyondEnd) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + SourceContext ctx = readContext(sr, 33); + EXPECT_FALSE(ctx.isValid()); + } +} + +TEST(SourceContextReader, multiline) +{ + SourceContextReader sr; + for (int i = 0; i < 2; i++) { + CharReader reader{testStr}; + SourceContext ctx = sr.readContext(reader, SourceRange{5, 17}); + + EXPECT_TRUE(ctx.isValid()); + EXPECT_EQ("first line\n\nthird line", ctx.text); + EXPECT_EQ(5U, ctx.relPos); + EXPECT_EQ(12U, ctx.relLen); + EXPECT_EQ(1U, ctx.startLine); + EXPECT_EQ(6U, ctx.startColumn); + EXPECT_EQ(3U, ctx.endLine); + EXPECT_EQ(6U, ctx.endColumn); + EXPECT_FALSE(ctx.truncatedStart); + EXPECT_FALSE(ctx.truncatedEnd); + } +} + +} + |