summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/model/Domain.cpp4
-rw-r--r--test/formats/osml/OsmlParserTest.cpp15
-rw-r--r--testdata/osmlparser/structure_inheritance.osml6
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]
+