diff options
| author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:57:40 +0100 | 
|---|---|---|
| committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-25 18:57:40 +0100 | 
| commit | 7352e5e6481964817643d02756186dd206c7b848 (patch) | |
| tree | 98eeb7b21fd8e032f64c23d985444a822b9746ca /test/core/common | |
| parent | 67c3618e593f88eb8177404475586735902d693f (diff) | |
| parent | 93a8af2431529d145919c5898971c503d6c73e93 (diff) | |
Merge branch 'master' of somweyr.de:ousia
Diffstat (limited to 'test/core/common')
| -rw-r--r-- | test/core/common/VariantReaderTest.cpp | 152 | 
1 files changed, 150 insertions, 2 deletions
diff --git a/test/core/common/VariantReaderTest.cpp b/test/core/common/VariantReaderTest.cpp index 241aa56..14442e9 100644 --- a/test/core/common/VariantReaderTest.cpp +++ b/test/core/common/VariantReaderTest.cpp @@ -25,7 +25,7 @@  namespace ousia {  static TerminalLogger logger{std::cerr, true}; -//static Logger logger; +// static Logger logger;  TEST(VariantReader, readString)  { @@ -576,6 +576,153 @@ TEST(VariantReader, parseObject)  	}  } +TEST(VariantReader, parseCardinality) +{ +	Logger logger; +	// Primitive cardinality. +	{ +		CharReader reader("  {  5  }   "); +		auto res = VariantReader::parseCardinality(reader, logger); +		ASSERT_TRUE(res.first); + +		Variant::cardinalityType card{}; +		card.merge({5}); +		ASSERT_EQ(card, res.second); +	} +	// Range cardinality +	{ +		CharReader reader("  {  5-10  }   "); +		auto res = VariantReader::parseCardinality(reader, logger); +		ASSERT_TRUE(res.first); + +		Variant::cardinalityType card{}; +		card.merge({5, 10}); +		ASSERT_EQ(card, res.second); +	} +	// Larger than +	{ +		CharReader reader("  {  >9  }   "); +		auto res = VariantReader::parseCardinality(reader, logger); +		ASSERT_TRUE(res.first); + +		Variant::cardinalityType card{}; +		card.merge(Variant::rangeType::typeRangeFrom(10)); +		ASSERT_EQ(card, res.second); +	} +	// Smaller than +	{ +		CharReader reader("  {  <9  }   "); +		auto res = VariantReader::parseCardinality(reader, logger); +		ASSERT_TRUE(res.first); + +		Variant::cardinalityType card{}; +		card.merge(Variant::rangeType::typeRangeUntil(8)); +		ASSERT_EQ(card, res.second); +	} +	// Kleene-Star +	{ +		CharReader reader("  {  *  }   "); +		auto res = VariantReader::parseCardinality(reader, logger); +		ASSERT_TRUE(res.first); + +		Variant::cardinalityType card{}; +		card.merge(Variant::rangeType::typeRange()); +		ASSERT_EQ(card, res.second); +	} +	// More complex parse +	{ +		CharReader reader("  {  1  , 4-  6 ,>8  }  some other text"); +		auto res = VariantReader::parseCardinality(reader, logger); +		ASSERT_TRUE(res.first); + +		Variant::cardinalityType card{}; +		card.merge({1}); +		card.merge({4, 6}); +		card.merge(Variant::rangeType::typeRangeFrom(9)); +		ASSERT_EQ(card, res.second); +	} +	// More complex parses that are equivalent. +	{ +		Variant::cardinalityType card{}; +		card.merge(Variant::rangeType::typeRange()); +		{ +			CharReader reader("  {  * }   "); +			auto res = VariantReader::parseCardinality(reader, logger); +			ASSERT_TRUE(res.first); +			ASSERT_EQ(card, res.second); +		} +		{ +			CharReader reader = CharReader("  {  1-4, 8, 9-12, 10, * }   "); +			auto res = VariantReader::parseCardinality(reader, logger); +			ASSERT_TRUE(res.first); +			ASSERT_EQ(card, res.second); +		} +		{ +			CharReader reader = CharReader("  {  0, >0 }   "); +			auto res = VariantReader::parseCardinality(reader, logger); +			ASSERT_TRUE(res.first); +			ASSERT_EQ(card, res.second); +		} +		{ +			CharReader reader = CharReader("  {  <10, 10, >10 }   "); +			auto res = VariantReader::parseCardinality(reader, logger); +			ASSERT_TRUE(res.first); +			ASSERT_EQ(card, res.second); +		} +		{ +			CharReader reader = CharReader("  {  0,1-2, 3-4,   >4 }   "); +			auto res = VariantReader::parseCardinality(reader, logger); +			ASSERT_TRUE(res.first); +			ASSERT_EQ(card, res.second); +		} +	} +	// Invalid cardinalities. +	{ +		CharReader reader("    5  }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { 5  ,    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { 5-    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { -3    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { 5-3    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { 3-3    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { >    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { <    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { ,    }   "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { 4       "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +	{ +		CharReader reader("   { m  }     "); +		ASSERT_FALSE(VariantReader::parseCardinality(reader, logger).first); +	} +} +  TEST(VariantReader, parseGenericToken)  {  	// Simple case, unescaped string @@ -614,7 +761,8 @@ TEST(VariantReader, parseGenericToken)  	// String with whitespaces at the beginning.  	{  		CharReader reader("   \' test\'"); -		auto res = VariantReader::parseGenericToken(reader, logger, {';'}, true); +		auto res = +		    VariantReader::parseGenericToken(reader, logger, {';'}, true);  		ASSERT_EQ(" test", res.second);  	}  | 
