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 | |
parent | 67c3618e593f88eb8177404475586735902d693f (diff) | |
parent | 93a8af2431529d145919c5898971c503d6c73e93 (diff) |
Merge branch 'master' of somweyr.de:ousia
Diffstat (limited to 'test')
-rw-r--r-- | test/core/common/VariantReaderTest.cpp | 152 | ||||
-rw-r--r-- | test/core/model/DocumentTest.cpp | 2 | ||||
-rw-r--r-- | test/core/model/DomainTest.cpp | 8 | ||||
-rw-r--r-- | test/core/model/TestAdvanced.hpp | 6 | ||||
-rw-r--r-- | test/core/model/TestDomain.hpp | 6 |
5 files changed, 161 insertions, 13 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); } diff --git a/test/core/model/DocumentTest.cpp b/test/core/model/DocumentTest.cpp index a09068d..563f1b4 100644 --- a/test/core/model/DocumentTest.cpp +++ b/test/core/model/DocumentTest.cpp @@ -116,7 +116,7 @@ TEST(Document, validate) Manager mgr{1}; Rooted<SystemTypesystem> sys{new SystemTypesystem(mgr)}; Rooted<Domain> domain{new Domain(mgr, sys, "trivial")}; - Cardinality single; + Variant::cardinalityType single; single.merge({1}); // Set up the "root" StructuredClass. Rooted<StructuredClass> rootClass{new StructuredClass( diff --git a/test/core/model/DomainTest.cpp b/test/core/model/DomainTest.cpp index fc71f91..8bf1a47 100644 --- a/test/core/model/DomainTest.cpp +++ b/test/core/model/DomainTest.cpp @@ -151,8 +151,8 @@ TEST(Descriptor, pathToAdvanced) Rooted<SystemTypesystem> sys{new SystemTypesystem(mgr)}; // Construct the domain Rooted<Domain> domain{new Domain(mgr, sys, "nasty")}; - Cardinality any; - any.merge(Range<size_t>::typeRangeFrom(0)); + Variant::cardinalityType any; + any.merge(Range<size_t>::typeRange()); // Let's create the classes that we need first Rooted<StructuredClass> A{new StructuredClass( @@ -224,8 +224,8 @@ TEST(StructuredClass, isSubclassOf) Manager mgr{1}; Rooted<SystemTypesystem> sys{new SystemTypesystem(mgr)}; Rooted<Domain> domain{new Domain(mgr, sys, "inheritance")}; - Cardinality any; - any.merge(Range<size_t>::typeRangeFrom(0)); + Variant::cardinalityType any; + any.merge(Range<size_t>::typeRange()); Rooted<StructuredClass> A{new StructuredClass( mgr, "A", domain, any, {nullptr}, {nullptr}, false, true)}; // first branch diff --git a/test/core/model/TestAdvanced.hpp b/test/core/model/TestAdvanced.hpp index 6111170..035ee8e 100644 --- a/test/core/model/TestAdvanced.hpp +++ b/test/core/model/TestAdvanced.hpp @@ -52,7 +52,7 @@ static Rooted<Domain> constructHeadingDomain(Manager &mgr, // set up domain node. Rooted<Domain> domain{new Domain(mgr, sys, "headings")}; // set up cardinality (every section may have at most one heading). - Cardinality card; + Variant::cardinalityType card; card.merge({0, 1}); // set up heading StructuredClass. Rooted<StructuredClass> heading{new StructuredClass( @@ -83,8 +83,8 @@ static Rooted<Domain> constructListDomain(Manager &mgr, // set up domain node. Rooted<Domain> domain{new Domain(mgr, sys, "list")}; // set up cardinality - Cardinality any; - any.merge(Range<size_t>::typeRangeFrom(0)); + Variant::cardinalityType any; + any.merge(Range<size_t>::typeRange()); // get book.paragraph Rooted<StructuredClass> p = resolveDescriptor(bookDomain, "paragraph"); // set up item StructuredClass; diff --git a/test/core/model/TestDomain.hpp b/test/core/model/TestDomain.hpp index 35f1ce1..a36f593 100644 --- a/test/core/model/TestDomain.hpp +++ b/test/core/model/TestDomain.hpp @@ -34,10 +34,10 @@ static Rooted<Domain> constructBookDomain(Manager &mgr, // Start with the Domain itself. Rooted<Domain> domain{new Domain(mgr, sys, "book")}; // Set up the cardinalities we'll need. - Cardinality single; + Variant::cardinalityType single; single.merge({1}); - Cardinality any; - any.merge(Range<size_t>::typeRangeFrom(0)); + Variant::cardinalityType any; + any.merge(Range<size_t>::typeRange()); // Set up the "book" node. Rooted<StructuredClass> book{new StructuredClass( |