diff options
-rw-r--r-- | src/core/model/Domain.cpp | 4 | ||||
-rw-r--r-- | test/formats/osml/OsmlParserTest.cpp | 15 | ||||
-rw-r--r-- | testdata/osmlparser/structure_inheritance.osml | 6 |
3 files changed, 21 insertions, 4 deletions
diff --git a/src/core/model/Domain.cpp b/src/core/model/Domain.cpp index f6c3956..ca8f889 100644 --- a/src/core/model/Domain.cpp +++ b/src/core/model/Domain.cpp @@ -566,7 +566,7 @@ bool Descriptor::addAndSortFieldDescriptor(Handle<FieldDescriptor> fd, if (fds.find(fd) == fds.end()) { invalidate(); // check if the previous field is a tree field already. - if (!fds.empty() && + if (!fds.empty() && !fieldDescriptors.empty() && fds.back()->getFieldType() == FieldDescriptor::FieldType::TREE && fd->getFieldType() != FieldDescriptor::FieldType::TREE) { // if so we add the new field before the TREE field. @@ -961,4 +961,4 @@ const Rtti Domain = RttiBuilder<ousia::Domain>("Domain") .parent(&RootNode) .composedOf({&StructuredClass, &AnnotationClass}); } -}
\ No newline at end of file +} diff --git a/test/formats/osml/OsmlParserTest.cpp b/test/formats/osml/OsmlParserTest.cpp index 50e0dcb..3472e5f 100644 --- a/test/formats/osml/OsmlParserTest.cpp +++ b/test/formats/osml/OsmlParserTest.cpp @@ -111,7 +111,6 @@ TEST(OsmlParser, inlineDomain) OsmlStandaloneEnvironment env(logger); logger.reset(); - ASSERT_FALSE(logger.hasError()); Rooted<Node> node = env.parse("inline_domain.osml", "", "", RttiSet{&RttiTypes::Node}); ASSERT_FALSE(logger.hasError()); @@ -125,7 +124,6 @@ TEST(OsmlParser, include) OsmlStandaloneEnvironment env(logger); logger.reset(); - ASSERT_FALSE(logger.hasError()); Rooted<Node> node = env.parse("include_root.osml", "", "", RttiSet{&RttiTypes::Node}); ASSERT_FALSE(logger.hasError()); @@ -147,5 +145,18 @@ TEST(OsmlParser, includeRecursive) ASSERT_TRUE(node != nullptr); ASSERT_TRUE(node->isa(&RttiTypes::Document)); } + +TEST(OsmlParser, structureInheritance) +{ + OsmlStandaloneEnvironment env(logger); + logger.reset(); + + Rooted<Node> node = env.parse("structure_inheritance.osml", "", "", + RttiSet{&RttiTypes::Node}); + ASSERT_FALSE(logger.hasError()); + + ASSERT_TRUE(node != nullptr); + ASSERT_TRUE(node->isa(&RttiTypes::Domain)); +} } diff --git a/testdata/osmlparser/structure_inheritance.osml b/testdata/osmlparser/structure_inheritance.osml new file mode 100644 index 0000000..6b88f2f --- /dev/null +++ b/testdata/osmlparser/structure_inheritance.osml @@ -0,0 +1,6 @@ +\domain#test + \struct#a + \primitive[type=string] + \struct#b[isa=a] + \primitive#color[type=string,isSubtree=true] + |