diff options
| author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2015-04-09 11:33:34 +0200 | 
|---|---|---|
| committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2016-04-25 22:19:34 +0200 | 
| commit | 3ad6d09b82f9b3c4118b3264b1a013384c81e3c2 (patch) | |
| tree | c46f1c2498cd92b55070be4e2459ca757afba897 | |
| parent | 1a2e47eefee90fea2779ec3551f214c572fcc7f9 (diff) | |
added test for empty explicit fields, which currently fails.
| -rw-r--r-- | src/core/parser/ParserScope.cpp | 4 | ||||
| -rw-r--r-- | src/core/parser/stack/DocumentHandler.cpp | 1 | ||||
| -rw-r--r-- | test/formats/osxml/OsxmlParserTest.cpp | 17 | ||||
| -rw-r--r-- | testdata/osxmlparser/empty_named_field.osxml | 14 | 
4 files changed, 33 insertions, 3 deletions
| diff --git a/src/core/parser/ParserScope.cpp b/src/core/parser/ParserScope.cpp index c46dc51..e5bf6f6 100644 --- a/src/core/parser/ParserScope.cpp +++ b/src/core/parser/ParserScope.cpp @@ -174,12 +174,12 @@ ParserScope::ParserScope() : topLevelDepth(0) {}  bool ParserScope::checkUnwound(Logger &logger) const  { -	if (nodes.size() != topLevelDepth) { +	if (nodes.size() > topLevelDepth) {  		logger.error("Not all open elements have been closed!",  		             SourceLocation{}, MessageMode::NO_CONTEXT);  		logger.note("Still open elements are: ", SourceLocation{},  		            MessageMode::NO_CONTEXT); -		for (size_t i = topLevelDepth + 1; i < nodes.size(); i++) { +		for (size_t i = topLevelDepth; i < nodes.size(); i++) {  			logger.note(std::string("Element of interal type ") +  			                nodes[i]->type()->name +  			                std::string(" defined here:"), diff --git a/src/core/parser/stack/DocumentHandler.cpp b/src/core/parser/stack/DocumentHandler.cpp index 3e85f72..ce6267f 100644 --- a/src/core/parser/stack/DocumentHandler.cpp +++ b/src/core/parser/stack/DocumentHandler.cpp @@ -334,7 +334,6 @@ bool DocumentChildHandler::startCommand(Variant::mapType &args)  			}  			// Otherwise create a new StructuredEntity -			// TODO: Consider Anchors and AnnotationEntities  			Rooted<StructuredClass> strct = scope().resolve<StructuredClass>(  			    Utils::split(name(), ':'), logger());  			if (strct == nullptr) { diff --git a/test/formats/osxml/OsxmlParserTest.cpp b/test/formats/osxml/OsxmlParserTest.cpp index 603d6c1..7c7f2a8 100644 --- a/test/formats/osxml/OsxmlParserTest.cpp +++ b/test/formats/osxml/OsxmlParserTest.cpp @@ -384,5 +384,22 @@ TEST(OsxmlParser, documentParsing)  	}  } +TEST(OsxmlParser, emptyNamedField){ +	logger.reset(); +	XmlStandaloneEnvironment env(logger); +	Rooted<Node> book_document_node = +	    env.parse("empty_named_field.osxml", "", "", RttiSet{&RttiTypes::Document}); +	ASSERT_FALSE(logger.hasError()); +	ASSERT_FALSE(book_document_node == nullptr); +	ASSERT_TRUE(book_document_node->isa(&RttiTypes::Document)); +	// check the document content. +	Rooted<Document> doc = book_document_node.cast<Document>(); +	ASSERT_TRUE(doc->validate(logger)); +	checkStructuredEntity(doc->getRoot(), doc, doc, "a"); +	ASSERT_EQ(2U, doc->getRoot()->getDescriptor()->getFieldDescriptors().size()); +	ASSERT_TRUE(doc->getRoot()->getField(0).empty()); +	ASSERT_TRUE(doc->getRoot()->getField(1).empty()); +} +  } diff --git a/testdata/osxmlparser/empty_named_field.osxml b/testdata/osxmlparser/empty_named_field.osxml new file mode 100644 index 0000000..2f465ba --- /dev/null +++ b/testdata/osxmlparser/empty_named_field.osxml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<document> +	<ontology name="test"> +		<struct name="a" root="true"> +			<field name="afield" subtree="true"> +				<childRef ref="a"/> +			</field> +		</struct> +	</ontology> + +	<a> +		<afield/> +	</a> +</document> | 
