diff options
Diffstat (limited to 'test/core')
| -rw-r--r-- | test/core/model/DocumentTest.cpp | 62 | ||||
| -rw-r--r-- | test/core/model/TestDocument.hpp | 26 | ||||
| -rw-r--r-- | test/core/model/TestDomain.hpp | 15 | 
3 files changed, 91 insertions, 12 deletions
diff --git a/test/core/model/DocumentTest.cpp b/test/core/model/DocumentTest.cpp index 9e3229c..a671d2c 100644 --- a/test/core/model/DocumentTest.cpp +++ b/test/core/model/DocumentTest.cpp @@ -37,8 +37,68 @@ TEST(Document, testDocumentConstruction)  	// Construct the document.  	Rooted<Document> doc = constructBookDocument(mgr, domain); -	// If that works we are happy already. +	// Check the document content.  	ASSERT_FALSE(doc.isNull()); +	// get root node. +	Rooted<StructuredEntity> root = doc->getRoot(); +	ASSERT_FALSE(root.isNull()); +	ASSERT_EQ("book", root->getDescriptor()->getName()); +	ASSERT_TRUE(root->hasField()); +	ASSERT_EQ(2, root->getField().size()); +	// get foreword (paragraph) +	{ +		Rooted<StructuredEntity> foreword = root->getField()[0]; +		ASSERT_FALSE(foreword.isNull()); +		ASSERT_EQ("paragraph", foreword->getDescriptor()->getName()); +		// it should contain one text node +		ASSERT_TRUE(foreword->hasField()); +		ASSERT_EQ(1, foreword->getField().size()); +		// which in turn should have a primitive content field containing the +		// right text. +		{ +			Rooted<StructuredEntity> text = foreword->getField()[0]; +			ASSERT_FALSE(text.isNull()); +			ASSERT_EQ("text", text->getDescriptor()->getName()); +			ASSERT_TRUE(text->hasField()); +			ASSERT_EQ(1, text->getField().size()); +			ASSERT_TRUE(text->getField()[0]->isa(typeOf<DocumentPrimitive>())); +			Variant content = +			    text->getField()[0].cast<DocumentPrimitive>()->getContent(); +			ASSERT_EQ("Some introductory text", content.asString()); +		} +	} +	// get section +	{ +		Rooted<StructuredEntity> section = root->getField()[1]; +		ASSERT_FALSE(section.isNull()); +		ASSERT_EQ("section", section->getDescriptor()->getName()); +		// it should contain one paragraph +		ASSERT_TRUE(section->hasField()); +		ASSERT_EQ(1, section->getField().size()); +		{ +			Rooted<StructuredEntity> par = section->getField()[0]; +			ASSERT_FALSE(par.isNull()); +			ASSERT_EQ("paragraph", par->getDescriptor()->getName()); +			// it should contain one text node +			ASSERT_TRUE(par->hasField()); +			ASSERT_EQ(1, par->getField().size()); +			// which in turn should have a primitive content field containing +			// the +			// right text. +			{ +				Rooted<StructuredEntity> text = par->getField()[0]; +				ASSERT_FALSE(text.isNull()); +				ASSERT_EQ("text", text->getDescriptor()->getName()); +				ASSERT_TRUE(text->hasField()); +				ASSERT_EQ(1, text->getField().size()); +				ASSERT_TRUE( +				    text->getField()[0]->isa(typeOf<DocumentPrimitive>())); +				Variant content = +				    text->getField()[0].cast<DocumentPrimitive>()->getContent(); +				ASSERT_EQ("Some actual text", content.asString()); +			} +		} +	}  }  }  } diff --git a/test/core/model/TestDocument.hpp b/test/core/model/TestDocument.hpp index a1a3434..6b0267a 100644 --- a/test/core/model/TestDocument.hpp +++ b/test/core/model/TestDocument.hpp @@ -50,13 +50,18 @@ static Rooted<Document> constructBookDocument(Manager &mgr,  		return {nullptr};  	}  	// Add its text. -	Variant text{std::map<std::string, Variant>{ -	    {"content", Variant("Some introductory text")}}}; -	Rooted<DocumentPrimitive> foreword_text = -	    DocumentPrimitive::buildEntity(foreword, text, "text"); +	Rooted<StructuredEntity> foreword_text = +	    StructuredEntity::buildEntity(foreword, {bookDomain}, "text");  	if (foreword_text.isNull()) {  		return {nullptr};  	} +	// And its primitive content +	Variant text{"Some introductory text"}; +	Rooted<DocumentPrimitive> foreword_primitive = +	    DocumentPrimitive::buildEntity(foreword_text, text, "content"); +	if (foreword_primitive.isNull()) { +		return {nullptr}; +	}  	// Add a section.  	Rooted<StructuredEntity> section =  	    StructuredEntity::buildEntity(root, {bookDomain}, "section"); @@ -67,13 +72,18 @@ static Rooted<Document> constructBookDocument(Manager &mgr,  		return {nullptr};  	}  	// Add its text. -	text = Variant{std::map<std::string, Variant>{ -	    {"content", Variant("Some introductory text")}}}; -	Rooted<DocumentPrimitive> main_text = -	    DocumentPrimitive::buildEntity(foreword, text, "text"); +	Rooted<StructuredEntity> main_text = +	    StructuredEntity::buildEntity(main, {bookDomain}, "text");  	if (main_text.isNull()) {  		return {nullptr};  	} +	// And its primitive content +	text = Variant{"Some actual text"}; +	Rooted<DocumentPrimitive> main_primitive = +	    DocumentPrimitive::buildEntity(main_text, text, "content"); +	if (main_primitive.isNull()) { +		return {nullptr}; +	}  	return doc;  } diff --git a/test/core/model/TestDomain.hpp b/test/core/model/TestDomain.hpp index d55bff7..f457531 100644 --- a/test/core/model/TestDomain.hpp +++ b/test/core/model/TestDomain.hpp @@ -81,11 +81,20 @@ static Rooted<Domain> constructBookDomain(Manager &mgr, Logger &logger)  	section_field->getChildren().push_back(paragraph);  	book_field->getChildren().push_back(paragraph);  	domain->getStructureClasses().push_back(paragraph); +	// And the field of it. +	Rooted<FieldDescriptor> paragraph_field{new FieldDescriptor(mgr, paragraph)}; +	paragraph->getFieldDescriptors().push_back(paragraph_field); +	 +	// Finally we add the "text" node, which is transparent as well. +	Rooted<StructuredClass> text{new StructuredClass( +	    mgr, "text", domain, any, {nullptr}, {nullptr}, true)}; +	paragraph_field->getChildren().push_back(text); +	domain->getStructureClasses().push_back(text);  	// ... and has a primitive field. -	Rooted<FieldDescriptor> paragraph_field{new FieldDescriptor( -	    mgr, paragraph, domain->getTypesystems()[0]->getTypes()[1], "text", +	Rooted<FieldDescriptor> text_field{new FieldDescriptor( +	    mgr, text, domain->getTypesystems()[0]->getTypes()[0], "content",  	    false)}; -	paragraph->getFieldDescriptors().push_back(paragraph_field); +	text->getFieldDescriptors().push_back(text_field);  	return domain;  }  | 
