diff options
-rw-r--r-- | test/formats/osml/OsmlParserTest.cpp | 55 | ||||
-rw-r--r-- | testdata/osmlparser/syntax_description.osml | 23 |
2 files changed, 72 insertions, 6 deletions
diff --git a/test/formats/osml/OsmlParserTest.cpp b/test/formats/osml/OsmlParserTest.cpp index cc711b4..78ddf17 100644 --- a/test/formats/osml/OsmlParserTest.cpp +++ b/test/formats/osml/OsmlParserTest.cpp @@ -98,8 +98,8 @@ TEST(OsmlParser, rollbackOnInvalidElement) logger.reset(); ASSERT_FALSE(logger.hasError()); - Rooted<Node> node = - env.parse("rollback_on_invalid_element.osml", "", "", RttiSet{&RttiTypes::Node}); + Rooted<Node> node = env.parse("rollback_on_invalid_element.osml", "", "", + RttiSet{&RttiTypes::Node}); ASSERT_TRUE(logger.hasError()); ASSERT_TRUE(node != nullptr); @@ -191,8 +191,8 @@ TEST(OsmlParser, explicitFields) OsmlStandaloneEnvironment env(logger); logger.reset(); - Rooted<Node> node = env.parse("explicit_fields.osml", "", "", - RttiSet{&RttiTypes::Node}); + Rooted<Node> node = + env.parse("explicit_fields.osml", "", "", RttiSet{&RttiTypes::Node}); ASSERT_FALSE(logger.hasError()); ASSERT_TRUE(node != nullptr); @@ -204,8 +204,8 @@ TEST(OsmlParser, simpleAnnotation) OsmlStandaloneEnvironment env(logger); logger.reset(); - Rooted<Node> node = env.parse("simple_annotation.osml", "", "", - RttiSet{&RttiTypes::Node}); + Rooted<Node> node = + env.parse("simple_annotation.osml", "", "", RttiSet{&RttiTypes::Node}); ASSERT_FALSE(logger.hasError()); ASSERT_TRUE(node != nullptr); @@ -238,5 +238,48 @@ TEST(OsmlParser, errorAnnotationBoundaries) ASSERT_TRUE(node->isa(&RttiTypes::Document)); } +TEST(OsmlParser, syntaxDescription) +{ + OsmlStandaloneEnvironment env(logger); + logger.reset(); + + Rooted<Node> node = + env.parse("syntax_description.osml", "", "", RttiSet{&RttiTypes::Node}); + ASSERT_FALSE(logger.hasError()); + + ASSERT_TRUE(node != nullptr); + ASSERT_TRUE(node->isa(&RttiTypes::Ontology)); + + Rooted<Ontology> ontology = node.cast<Ontology>(); + auto nodes = ontology->resolve(&RttiTypes::StructuredClass, "b"); + ASSERT_EQ(1U, nodes.size()); + + Rooted<StructuredClass> structure = nodes[0].node.cast<StructuredClass>(); + auto descrs = structure->getFieldDescriptors(); + ASSERT_EQ(2U, descrs.size()); + + ASSERT_EQ("f1", descrs[0]->getName()); + ASSERT_EQ("f2", descrs[1]->getName()); + + ASSERT_FALSE(descrs[0]->getOpenToken().special); + ASSERT_EQ("=", descrs[0]->getOpenToken().token); + + ASSERT_EQ(Tokens::Newline, descrs[0]->getCloseToken().id); + ASSERT_TRUE(descrs[0]->getCloseToken().special); + ASSERT_EQ("", descrs[0]->getCloseToken().token); + + ASSERT_EQ(WhitespaceMode::PRESERVE, descrs[0]->getWhitespaceMode()); + + ASSERT_FALSE(descrs[1]->getOpenToken().special); + ASSERT_EQ("++", descrs[1]->getOpenToken().token); + + ASSERT_FALSE(descrs[1]->getCloseToken().special); + ASSERT_EQ("--", descrs[1]->getCloseToken().token); + + ASSERT_EQ(WhitespaceMode::COLLAPSE, descrs[1]->getWhitespaceMode()); + + ASSERT_FALSE(structure->getShortToken().special); + ASSERT_EQ("~", structure->getShortToken().token); +} } diff --git a/testdata/osmlparser/syntax_description.osml b/testdata/osmlparser/syntax_description.osml new file mode 100644 index 0000000..f374f73 --- /dev/null +++ b/testdata/osmlparser/syntax_description.osml @@ -0,0 +1,23 @@ +\ontology#a{ + \struct#b{ + \primitive#f1[subtree=true,type=string]{ + \syntax{ + \open{=} + \close{\newline} + \whitespace{preserve} + } + } + \field#f2{ + \syntax{ + \open{++} + \close{--} + \whitespace{collapse} + } + \childRef[ref=b] + } + \syntax{ + \short{~} + } + } +} + |