From c2fb0693208c2e980fdb161e63ef82096c49d59a Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Wed, 21 Jan 2015 22:21:24 +0100 Subject: added variant content validation for Documents. --- test/core/model/DocumentTest.cpp | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/core/model/DocumentTest.cpp b/test/core/model/DocumentTest.cpp index 874fba7..a9c0dcc 100644 --- a/test/core/model/DocumentTest.cpp +++ b/test/core/model/DocumentTest.cpp @@ -128,10 +128,12 @@ TEST(Document, validate) // first an invalid one, which is empty. Rooted doc{new Document(mgr, "myDoc.oxd")}; doc->addDomain(domain); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); // then add a root, which should make it valid. Rooted root = buildRootStructuredEntity(doc, logger, {"root"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); } { @@ -140,6 +142,7 @@ TEST(Document, validate) doc->addDomain(domain); Rooted root = buildRootStructuredEntity( doc, logger, {"root"}, {}, "my invalid root"); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); } @@ -158,12 +161,15 @@ TEST(Document, validate) doc->addDomain(domain); Rooted root = buildRootStructuredEntity(doc, logger, {"root"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); // but it should get valid if we add a proper child. buildStructuredEntity(doc, logger, root, {"child"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); // and it should get invalid again if we add one more child. buildStructuredEntity(doc, logger, root, {"child"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); } /* @@ -180,6 +186,7 @@ TEST(Document, validate) Rooted root = buildRootStructuredEntity(doc, logger, {"root"}); buildStructuredEntity(doc, logger, root, {"childSub"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); } /* @@ -198,6 +205,7 @@ TEST(Document, validate) Rooted root = buildRootStructuredEntity(doc, logger, {"root"}); buildStructuredEntity(doc, logger, root, {"childSub"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); } /* @@ -215,6 +223,7 @@ TEST(Document, validate) Rooted root = buildRootStructuredEntity(doc, logger, {"root"}); buildStructuredEntity(doc, logger, root, {"childSub"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); } // add a primitive field to the subclass with integer content. @@ -231,14 +240,16 @@ TEST(Document, validate) buildRootStructuredEntity(doc, logger, {"root"}); Rooted child = buildStructuredEntity(doc, logger, root, {"childSub"}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); // if we add a DocumentPrimitive with the wrong content it should not // work either. Rooted primitive{ new DocumentPrimitive(mgr, child, {"ololol"}, "int")}; - //TODO: ASSERT_FALSE(doc->validate(logger)); + ASSERT_FALSE(doc->validate(logger)); // but if we set the content right, it should work. primitive->setContent({2}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); } @@ -258,14 +269,41 @@ TEST(Document, validate) Rooted primitive{ new DocumentPrimitive(mgr, child, {2}, "int")}; Rooted end{new Anchor(mgr, "end", root)}; + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); // then add an AnnotationEntity without Anchors. Rooted anno = buildAnnotationEntity(doc, logger, {"anno"}, nullptr, nullptr); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_FALSE(doc->validate(logger)); // but it should be valid again if we set the start end and Anchor. anno->setStart(start); anno->setEnd(end); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); + ASSERT_TRUE(doc->validate(logger)); + // add an attribute to the root, which should make it invalid. + root->setAttributes({2}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); + ASSERT_FALSE(doc->validate(logger)); + // if we reset it to null it should be valid again + root->setAttributes({}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); + ASSERT_TRUE(doc->validate(logger)); + // let's set an attribute descriptor. + Rooted structType{StructType::createValidated( + mgr, "attributes", nullptr, nullptr, + NodeVector{ + new Attribute{mgr, "myAttr", sys->getStringType(), "default"}}, + logger)}; + childSubClass->setAttributesDescriptor(structType); + // the right map content should be valid now. + child->setAttributes( + std::map{{"myAttr", "content"}}); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); + ASSERT_TRUE(doc->validate(logger)); + // but an empty map as well + child->setAttributes(std::map()); + ASSERT_EQ(ValidationState::UNKNOWN, doc->getValidationState()); ASSERT_TRUE(doc->validate(logger)); } } -- cgit v1.2.3