summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-25 18:57:40 +0100
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-25 18:57:40 +0100
commit7352e5e6481964817643d02756186dd206c7b848 (patch)
tree98eeb7b21fd8e032f64c23d985444a822b9746ca /test
parent67c3618e593f88eb8177404475586735902d693f (diff)
parent93a8af2431529d145919c5898971c503d6c73e93 (diff)
Merge branch 'master' of somweyr.de:ousia
Diffstat (limited to 'test')
-rw-r--r--test/core/common/VariantReaderTest.cpp152
-rw-r--r--test/core/model/DocumentTest.cpp2
-rw-r--r--test/core/model/DomainTest.cpp8
-rw-r--r--test/core/model/TestAdvanced.hpp6
-rw-r--r--test/core/model/TestDomain.hpp6
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(