diff options
author | Geir Storli <geirst@oath.com> | 2017-10-18 14:15:43 +0000 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2017-10-18 14:15:43 +0000 |
commit | ab393107b2ec5ddbbbba1a92616bfb375dd9d2c4 (patch) | |
tree | f98de118049737d82ad73a3bb6e499476c93c128 /document/src/tests/documenttypetestcase.cpp | |
parent | 391c2957ce6f450cfdd5684018dde4e222d6b848 (diff) |
Do not require that fields in a field set must be part of the document type.
Imported fields (from parent/referenced document types) are not part of the document type,
but can be part of field sets for search purposes.
Diffstat (limited to 'document/src/tests/documenttypetestcase.cpp')
-rw-r--r-- | document/src/tests/documenttypetestcase.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/document/src/tests/documenttypetestcase.cpp b/document/src/tests/documenttypetestcase.cpp index dfca4a67e31..311a841e75e 100644 --- a/document/src/tests/documenttypetestcase.cpp +++ b/document/src/tests/documenttypetestcase.cpp @@ -21,7 +21,7 @@ struct DocumentTypeTest : public CppUnit::TestFixture { void testSetGet(); void testHeaderContent(); - void testFieldSet(); + void testFieldSetCanContainFieldsNotInDocType(); void testInheritance(); void testInheritanceConfig(); void testMultipleInheritance(); @@ -29,7 +29,7 @@ struct DocumentTypeTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( DocumentTypeTest); CPPUNIT_TEST(testSetGet); - CPPUNIT_TEST(testFieldSet); + CPPUNIT_TEST(testFieldSetCanContainFieldsNotInDocType); CPPUNIT_TEST(testInheritance); CPPUNIT_TEST(testInheritanceConfig); CPPUNIT_TEST(testMultipleInheritance); @@ -162,20 +162,28 @@ void DocumentTypeTest::testMultipleInheritance() doc.getValue(doc.getField("tmp"))->getAsString()); } -void DocumentTypeTest::testFieldSet() -{ +namespace { + +bool containsField(const DocumentType::FieldSet &fieldSet, const vespalib::string &field) { + return fieldSet.getFields().find(field) != fieldSet.getFields().end(); +} + +} + +void DocumentTypeTest::testFieldSetCanContainFieldsNotInDocType() { DocumentType docType("test1"); docType.addField(Field("stringattr", 3, *DataType::STRING, false)); docType.addField(Field("nalle", 0, *DataType::INT, false)); - DocumentType::FieldSet::Fields tmp; - tmp.insert("nalle"); - tmp.insert("nulle"); - try { + { + DocumentType::FieldSet::Fields tmp; + tmp.insert("nalle"); + tmp.insert("nulle"); docType.addFieldSet("a", tmp); - CPPUNIT_ASSERT(false); - } catch (const vespalib::IllegalArgumentException & e) { - CPPUNIT_ASSERT_EQUAL(vespalib::string("Fieldset 'a': No field with name 'nulle' in document type 'test1'."), e.getMessage()); } + auto fieldSet = docType.getFieldSet("a"); + CPPUNIT_ASSERT_EQUAL((size_t)2, fieldSet->getFields().size()); + CPPUNIT_ASSERT(containsField(*fieldSet, "nalle")); + CPPUNIT_ASSERT(containsField(*fieldSet, "nulle")); } void DocumentTypeTest::testInheritance() |