diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/core/variant/ReaderTest.cpp | 135 | 
1 files changed, 135 insertions, 0 deletions
diff --git a/test/core/variant/ReaderTest.cpp b/test/core/variant/ReaderTest.cpp new file mode 100644 index 0000000..760760b --- /dev/null +++ b/test/core/variant/ReaderTest.cpp @@ -0,0 +1,135 @@ +/* +    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 <iostream> +#include <gtest/gtest.h> + +#include <core/variant/Reader.hpp> + +namespace ousia { +namespace variant { + +TEST(Reader, readString) +{ +	TerminalLogger logger(std::cerr, true); + +	// Simple, double quoted string +	{ +		BufferedCharReader reader("\"hello world\""); +		auto res = Reader::parseString(reader, logger); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello world", res.second); +	} + +	// Simple, double quoted string with whitespace +	{ +		BufferedCharReader reader("    \"hello world\"   "); +		auto res = Reader::parseString(reader, logger); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello world", res.second); +	} + +	// Simple, single quoted string +	{ +		BufferedCharReader reader("'hello world'"); +		auto res = Reader::parseString(reader, logger); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello world", res.second); +	} + +	// Escape characters +	{ +		BufferedCharReader reader("'\\'\\\"\\b\\f\\n\\r\\t\\v'"); +		auto res = Reader::parseString(reader, logger); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("'\"\b\f\n\r\t\v", res.second); +	} +} + +TEST(Reader, parseUnescapedString) +{ +	TerminalLogger logger(std::cerr, true); + +	// Simple case +	{ +		BufferedCharReader reader("hello world;"); +		auto res = Reader::parseUnescapedString(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello world", res.second); +	} + +	// Simple case with whitespace +	{ +		BufferedCharReader reader("    hello world   ;    "); +		auto res = Reader::parseUnescapedString(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello world", res.second); +	} + +	// Linebreaks +	{ +		BufferedCharReader reader("    hello\nworld   ;    "); +		auto res = Reader::parseUnescapedString(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello\nworld", res.second); +	} + +	// End of stream +	{ +		BufferedCharReader reader("    hello world "); +		auto res = Reader::parseUnescapedString(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_EQ("hello world", res.second); +	} +} + +TEST(Reader, parseGeneric) +{ +	TerminalLogger logger(std::cerr, true); + +	// Simple case, unescaped string +	{ +		BufferedCharReader reader("hello world"); +		auto res = Reader::parseGeneric(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_TRUE(res.second.isString()); +		ASSERT_EQ("hello world", res.second.asString()); +	} + +	// Simple case, double quoted string +	{ +		BufferedCharReader reader(" \"hello world\"    "); +		auto res = Reader::parseGeneric(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_TRUE(res.second.isString()); +		ASSERT_EQ("hello world", res.second.asString()); +	} + +	// Simple case, single quoted string +	{ +		BufferedCharReader reader(" 'hello world'    "); +		auto res = Reader::parseGeneric(reader, logger, {';'}); +		ASSERT_TRUE(res.first); +		ASSERT_TRUE(res.second.isString()); +		ASSERT_EQ("hello world", res.second.asString()); +	} +} + +} +} +  | 
