summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--src/core/utils/CharReader.cpp2
-rw-r--r--src/core/utils/CharReader.hpp10
-rw-r--r--test/core/utils/CharReaderTest.cpp98
4 files changed, 106 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d1ecc18..efcac0b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -114,7 +114,7 @@ ADD_LIBRARY(ousia_core
# src/core/script/Object
# src/core/script/ScriptEngine
# src/core/script/Variant
- src/core/utils/Buffer
+ src/core/utils/CharReader
src/core/variant/Reader
src/core/variant/Variant
)
@@ -167,6 +167,7 @@ IF(TEST)
# test/core/script/FunctionTest
# test/core/script/ObjectTest
# test/core/script/VariantTest
+ test/core/utils/CharReaderTest
test/core/variant/ReaderTest
test/core/variant/VariantTest
)
diff --git a/src/core/utils/CharReader.cpp b/src/core/utils/CharReader.cpp
index 6407907..84f562d 100644
--- a/src/core/utils/CharReader.cpp
+++ b/src/core/utils/CharReader.cpp
@@ -18,7 +18,7 @@
#include <algorithm>
-#include "Buffer.hpp"
+#include "CharReader.hpp"
namespace ousia {
namespace utils {
diff --git a/src/core/utils/CharReader.hpp b/src/core/utils/CharReader.hpp
index 0dd0a25..4986d3e 100644
--- a/src/core/utils/CharReader.hpp
+++ b/src/core/utils/CharReader.hpp
@@ -17,15 +17,15 @@
*/
/**
- * @file Buffer.hpp
+ * @file CharReader.hpp
*
- * Helper class which allows to read from an input source from multiple cursors.
+ * Used within all parsers to read single characters from an underlying stream.
*
* @author Andreas Stöckel (astoecke@techfak.uni-bielefeld.de)
*/
-#ifndef _OUSIA_BUFFER_HPP_
-#define _OUSIA_BUFFER_HPP_
+#ifndef _OUSIA_CHAR_READER_HPP_
+#define _OUSIA_CHAR_READER_HPP_
#include <list>
#include <vector>
@@ -297,5 +297,5 @@ public:
}
}
-#endif /* _OUSIA_BUFFER_HPP_ */
+#endif /* _OUSIA_CHAR_READER_HPP_ */
diff --git a/test/core/utils/CharReaderTest.cpp b/test/core/utils/CharReaderTest.cpp
new file mode 100644
index 0000000..ef022a9
--- /dev/null
+++ b/test/core/utils/CharReaderTest.cpp
@@ -0,0 +1,98 @@
+/*
+ Ousía
+ Copyright (C) 2014, 2015 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 <string>
+#include <iostream>
+
+#include "gtest/gtest.h"
+
+#include <core/utils/CharReader.hpp>
+
+namespace ousia {
+namespace utils {
+
+TEST(Buffer, simpleRead)
+{
+ std::string testStr{"this is a test"};
+
+ // Create buffer with the test string
+ char c;
+ Buffer buf{testStr};
+
+ // Create a read cursor
+ Buffer::CursorId cursor = buf.createCursor();
+
+ // We're not at the end of the stream
+ ASSERT_FALSE(buf.atEnd(cursor));
+
+ // Try to read the test string
+ std::string res;
+ while (buf.read(cursor, c)) {
+ res.append(&c, 1);
+ }
+
+ // The cursor must be at the end
+ ASSERT_TRUE(buf.atEnd(cursor));
+
+ // The two strings must equal
+ ASSERT_STREQ(testStr.c_str(), res.c_str());
+}
+
+TEST(Buffer, twoCursors)
+{
+ std::string testStr{"this is a test"};
+
+ // Create buffer with the test string
+ char c;
+ Buffer buf{testStr};
+
+ // Create two read cursors
+ Buffer::CursorId cur1 = buf.createCursor();
+ Buffer::CursorId cur2 = buf.createCursor();
+
+ ASSERT_FALSE(buf.atEnd(cur1));
+ ASSERT_FALSE(buf.atEnd(cur2));
+
+ // Try to read the test string with the first cursor
+ std::string res1;
+ while (buf.read(cur1, c)) {
+ res1.append(&c, 1);
+ }
+
+ // The first cursor must be at the end
+ ASSERT_TRUE(buf.atEnd(cur1));
+ ASSERT_FALSE(buf.atEnd(cur2));
+
+ // Try to read the test string with the second cursor
+ std::string res2;
+ while (buf.read(cur2, c)) {
+ res2.append(&c, 1);
+ }
+
+ // The first cursor must be at the end
+ ASSERT_TRUE(buf.atEnd(cur1));
+ ASSERT_TRUE(buf.atEnd(cur2));
+
+ // The two strings must equal
+ ASSERT_EQ(testStr, res1);
+ ASSERT_EQ(testStr, res2);
+}
+
+}
+}
+