diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2014-12-11 15:26:50 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2014-12-11 15:26:50 +0100 |
commit | 3f62168ed0b088eec3cb2903f03966f7d501f564 (patch) | |
tree | 781f5bd9b304d9eb931827a26f463575d772983d /test/core/variant/ReaderTest.cpp | |
parent | b74936760e28a92cadfaec47928ea478fe2d72ee (diff) |
moved to CharReader everywhere
Diffstat (limited to 'test/core/variant/ReaderTest.cpp')
-rw-r--r-- | test/core/variant/ReaderTest.cpp | 345 |
1 files changed, 0 insertions, 345 deletions
diff --git a/test/core/variant/ReaderTest.cpp b/test/core/variant/ReaderTest.cpp deleted file mode 100644 index 43e85a5..0000000 --- a/test/core/variant/ReaderTest.cpp +++ /dev/null @@ -1,345 +0,0 @@ -/* - 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 { - -//static TerminalLogger logger{std::cerr, true}; -static Logger logger; - -TEST(Reader, readString) -{ - // Simple, double quoted string - { - CharReader 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 - { - CharReader reader(" \"hello world\" "); - auto res = Reader::parseString(reader, logger); - ASSERT_TRUE(res.first); - ASSERT_EQ("hello world", res.second); - } - - // Simple, single quoted string - { - CharReader reader("'hello world'"); - auto res = Reader::parseString(reader, logger); - ASSERT_TRUE(res.first); - ASSERT_EQ("hello world", res.second); - } - - // Escape characters - { - CharReader 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) -{ - // Simple case - { - CharReader reader("hello world;"); - auto res = Reader::parseUnescapedString(reader, logger, {';'}); - ASSERT_TRUE(res.first); - ASSERT_EQ("hello world", res.second); - } - - // Simple case with whitespace - { - CharReader reader(" hello world ; "); - auto res = Reader::parseUnescapedString(reader, logger, {';'}); - ASSERT_TRUE(res.first); - ASSERT_EQ("hello world", res.second); - } - - // Linebreaks - { - CharReader reader(" hello\nworld ; "); - auto res = Reader::parseUnescapedString(reader, logger, {';'}); - ASSERT_TRUE(res.first); - ASSERT_EQ("hello\nworld", res.second); - } - - // End of stream - { - CharReader reader(" hello world "); - auto res = Reader::parseUnescapedString(reader, logger, {';'}); - ASSERT_TRUE(res.first); - ASSERT_EQ("hello world", res.second); - } -} - -static const std::unordered_set<char> noDelim; - -TEST(Reader, parseInteger) -{ - // Valid integers - { - CharReader reader("0 "); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(0, res.second); - } - - { - CharReader reader("42 "); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(42, res.second); - } - - { - CharReader reader("-42"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(-42, res.second); - } - - { - CharReader reader(" -0x4A2 "); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(-0x4A2, res.second); - } - - { - CharReader reader(" 0Xaffe"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(0xAFFE, res.second); - } - - { - CharReader reader("0x7FFFFFFFFFFFFFFF"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(0x7FFFFFFFFFFFFFFFL, res.second); - } - - { - CharReader reader("-0x7FFFFFFFFFFFFFFF"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(-0x7FFFFFFFFFFFFFFFL, res.second); - } - - // Invalid integers - { - CharReader reader("-"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_FALSE(res.first); - } - - { - CharReader reader("0a"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_FALSE(res.first); - } - - { - CharReader reader("-0xag"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_FALSE(res.first); - } - - { - CharReader reader("0x8000000000000000"); - auto res = Reader::parseInteger(reader, logger, noDelim); - ASSERT_FALSE(res.first); - } -} - -TEST(Reader, parseDouble) -{ - // Valid doubles - { - CharReader reader("1.25"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(1.25, res.second); - } - - { - CharReader reader(".25"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(.25, res.second); - } - - { - CharReader reader(".25e1"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(2.5, res.second); - } - - { - CharReader reader("-2.5e-1"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(-0.25, res.second); - } - - { - CharReader reader("-50e-2"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(-0.5, res.second); - } - - { - CharReader reader("-1."); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_TRUE(res.first); - ASSERT_EQ(-1., res.second); - } - - { - CharReader reader("-50.e-2"); - auto res = Reader::parseDouble(reader, logger, {'.'}); - ASSERT_TRUE(res.first); - ASSERT_EQ(-50, res.second); - } - - // Invalid doubles - { - CharReader reader(".e1"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_FALSE(res.first); - } - - { - CharReader reader("0e100000"); - auto res = Reader::parseDouble(reader, logger, noDelim); - ASSERT_FALSE(res.first); - } -} - -TEST(Reader, parseArray) -{ - // Simple case (only primitive data types) - { - CharReader reader("[\"Hello, World\", unescaped\n string ,\n" - "1234, 0.56, true, false, null]"); - auto res = Reader::parseArray(reader, logger); - ASSERT_TRUE(res.first); - - // Make sure array has the correct size - ASSERT_EQ(7U, res.second.size()); - - // Check the types - ASSERT_TRUE(res.second[0].isString()); - ASSERT_TRUE(res.second[1].isString()); - ASSERT_TRUE(res.second[2].isInt()); - ASSERT_TRUE(res.second[3].isDouble()); - ASSERT_TRUE(res.second[4].isBool()); - ASSERT_TRUE(res.second[5].isBool()); - ASSERT_TRUE(res.second[6].isNull()); - - // Check the values - ASSERT_EQ("Hello, World", res.second[0].asString()); - ASSERT_EQ("unescaped\n string", res.second[1].asString()); - ASSERT_EQ(1234, res.second[2].asInt()); - ASSERT_EQ(0.56, res.second[3].asDouble()); - ASSERT_TRUE(res.second[4].asBool()); - ASSERT_FALSE(res.second[5].asBool()); - } - - // Ending with comma - { - CharReader reader("[ 'test' ,]"); - auto res = Reader::parseArray(reader, logger); - ASSERT_TRUE(res.first); - - // Make sure the array has the correct size - ASSERT_EQ(1U, res.second.size()); - - // Check the types - ASSERT_TRUE(res.second[0].isString()); - - // Check the values - ASSERT_EQ("test", res.second[0].asString()); - } - - // Recovery from invalid values - { - CharReader reader("[ 0invalidNumber, str, 1invalid]"); - auto res = Reader::parseArray(reader, logger); - ASSERT_TRUE(res.first); - - // Make sure the array has the correct size - ASSERT_EQ(3U, res.second.size()); - - // Check the types (all must be strings since the numbers are invalid) - ASSERT_TRUE(res.second[0].isString()); - ASSERT_TRUE(res.second[1].isString()); - ASSERT_TRUE(res.second[2].isString()); - - // Check the values - ASSERT_EQ("0invalidNumber", res.second[0].asString()); - ASSERT_EQ("str", res.second[1].asString()); - ASSERT_EQ("1invalid", res.second[2].asString()); - } -} - -TEST(Reader, parseGeneric) -{ - // Simple case, unescaped string - { - CharReader 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 - { - CharReader 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 - { - CharReader 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()); - } -} - -} -} - |