From c0103d1ca8fa787c213adfcc10e001028583d20a Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Wed, 4 Mar 2015 16:01:36 +0100 Subject: Added test for parsing syntax descriptions --- test/formats/osml/OsmlParserTest.cpp | 55 ++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 6 deletions(-) (limited to 'test') 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 = - env.parse("rollback_on_invalid_element.osml", "", "", RttiSet{&RttiTypes::Node}); + Rooted 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 = env.parse("explicit_fields.osml", "", "", - RttiSet{&RttiTypes::Node}); + Rooted 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 = env.parse("simple_annotation.osml", "", "", - RttiSet{&RttiTypes::Node}); + Rooted 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 = + env.parse("syntax_description.osml", "", "", RttiSet{&RttiTypes::Node}); + ASSERT_FALSE(logger.hasError()); + + ASSERT_TRUE(node != nullptr); + ASSERT_TRUE(node->isa(&RttiTypes::Ontology)); + + Rooted ontology = node.cast(); + auto nodes = ontology->resolve(&RttiTypes::StructuredClass, "b"); + ASSERT_EQ(1U, nodes.size()); + + Rooted structure = nodes[0].node.cast(); + 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); +} } -- cgit v1.2.3