summaryrefslogtreecommitdiff
path: root/test/core
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-24 03:08:16 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-24 03:08:16 +0100
commit67d36e699a2852ce471c4d1b8dab5992d6c01a98 (patch)
tree0ef23befe3fa5af9c5d83b3b8934e444366a8575 /test/core
parentf819b42057b2baea205569dd808c4fcf2bc4d630 (diff)
Implemented SourceContextReader, added unit tests, implemented SourceContextReader interface in ResourceManager, added LoggerTest
Diffstat (limited to 'test/core')
-rw-r--r--test/core/common/CharReaderTest.cpp167
-rw-r--r--test/core/common/LoggerTest.cpp44
-rw-r--r--test/core/common/SourceContextReaderTest.cpp334
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);
+ }
+}
+
+}
+