diff options
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/core/utils/CharReader.cpp | 2 | ||||
-rw-r--r-- | src/core/utils/CharReader.hpp | 10 | ||||
-rw-r--r-- | test/core/utils/CharReaderTest.cpp | 98 |
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); +} + +} +} + |