From b74a054bd7e7538594824445a0bc666ebb337689 Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Wed, 18 Feb 2015 14:17:18 +0100 Subject: added support for primitive subtree fields in XMLOutput. --- src/plugins/xml/XmlOutput.cpp | 3 +-- test/plugins/xml/XmlOutputTest.cpp | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/plugins/xml/XmlOutput.cpp b/src/plugins/xml/XmlOutput.cpp index 37d95ec..85885bc 100644 --- a/src/plugins/xml/XmlOutput.cpp +++ b/src/plugins/xml/XmlOutput.cpp @@ -137,8 +137,7 @@ void XmlTransformer::transformChildren(DocumentEntity *parentEntity, Rooted fieldDesc = fieldDescs[f]; // if this is not the default field create an intermediate node for it. Rooted par = parent; - if (fieldDesc->getFieldType() != FieldDescriptor::FieldType::TREE && - !fieldDesc->isPrimitive()) { + if (fieldDesc->getFieldType() != FieldDescriptor::FieldType::TREE) { par = Rooted{new Element(mgr, parent, fieldDesc->getName())}; parent->addChild(par); diff --git a/test/plugins/xml/XmlOutputTest.cpp b/test/plugins/xml/XmlOutputTest.cpp index 403078d..fcf72d2 100644 --- a/test/plugins/xml/XmlOutputTest.cpp +++ b/test/plugins/xml/XmlOutputTest.cpp @@ -107,5 +107,45 @@ TEST(DemoHTMLTransformer, AnnotationProcessing) ">blubbla") != std::string::npos); } + +TEST(DemoHTMLTransformer, PrimitiveSubtreeFields) +{ + // Construct Manager + TerminalLogger logger{std::cerr, true}; + Manager mgr{1}; + Rooted sys{new SystemTypesystem(mgr)}; + // Construct a simple domain. + Rooted domain{new Domain(mgr, sys, "myDomain")}; + + Rooted A{new StructuredClass( + mgr, "A", domain, Cardinality::any(), nullptr, false, true)}; + Rooted A_a = + A->createPrimitiveFieldDescriptor(sys->getStringType(), logger, + FieldDescriptor::FieldType::SUBTREE, + "a").first; + Rooted A_b = + A->createPrimitiveFieldDescriptor(sys->getStringType(), logger, + FieldDescriptor::FieldType::SUBTREE, + "b").first; + Rooted A_main = + A->createPrimitiveFieldDescriptor(sys->getStringType(), logger).first; + ASSERT_TRUE(domain->validate(logger)); + // Construct a document for it. + Rooted doc{new Document(mgr, "myDoc")}; + Rooted A_impl = doc->createRootStructuredEntity(A); + A_impl->createChildDocumentPrimitive("test_a", "a"); + A_impl->createChildDocumentPrimitive("test_b", "b"); + A_impl->createChildDocumentPrimitive("test"); + ASSERT_TRUE(doc->validate(logger)); + // now transform this document. + ResourceManager dummy; + XmlTransformer transformer; + std::stringstream out; + transformer.writeXml(doc, out, logger, dummy, false); + const std::string res = out.str(); + ASSERT_TRUE( + res.find("test_atest_btest") != + std::string::npos); +} } } \ No newline at end of file -- cgit v1.2.3