From a0719a9a3e1c0970c0207fa4beec150613f1a768 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Wed, 18 Feb 2015 00:07:42 +0100 Subject: Fixed bug #80 and added unit test --- src/core/model/Domain.cpp | 4 ++-- test/formats/osml/OsmlParserTest.cpp | 15 +++++++++++++-- testdata/osmlparser/structure_inheritance.osml | 6 ++++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 testdata/osmlparser/structure_inheritance.osml 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 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("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 = 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 = 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 = 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] + -- cgit v1.2.3