summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/formats/osml/OsmlParserTest.cpp55
-rw-r--r--testdata/osmlparser/syntax_description.osml23
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{~}
+ }
+ }
+}
+