diff options
Diffstat (limited to 'document/src/tests/struct_anno')
-rw-r--r-- | document/src/tests/struct_anno/.gitignore | 2 | ||||
-rw-r--r-- | document/src/tests/struct_anno/CMakeLists.txt | 10 | ||||
-rw-r--r-- | document/src/tests/struct_anno/document.dat | bin | 0 -> 223 bytes | |||
-rw-r--r-- | document/src/tests/struct_anno/documentmanager.cfg | 160 | ||||
-rw-r--r-- | document/src/tests/struct_anno/documenttypes.cfg | 98 | ||||
-rw-r--r-- | document/src/tests/struct_anno/struct_anno_test.cpp | 87 |
6 files changed, 357 insertions, 0 deletions
diff --git a/document/src/tests/struct_anno/.gitignore b/document/src/tests/struct_anno/.gitignore new file mode 100644 index 00000000000..7a5ecfc76aa --- /dev/null +++ b/document/src/tests/struct_anno/.gitignore @@ -0,0 +1,2 @@ +/struct_anno_test +document_struct_anno_test_app diff --git a/document/src/tests/struct_anno/CMakeLists.txt b/document/src/tests/struct_anno/CMakeLists.txt new file mode 100644 index 00000000000..64678282842 --- /dev/null +++ b/document/src/tests/struct_anno/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(document_struct_anno_test_app + SOURCES + struct_anno_test.cpp + DEPENDS + document + AFTER + document_documentconfig +) +vespa_add_test(NAME document_struct_anno_test_app COMMAND document_struct_anno_test_app) diff --git a/document/src/tests/struct_anno/document.dat b/document/src/tests/struct_anno/document.dat Binary files differnew file mode 100644 index 00000000000..243b5f05a92 --- /dev/null +++ b/document/src/tests/struct_anno/document.dat diff --git a/document/src/tests/struct_anno/documentmanager.cfg b/document/src/tests/struct_anno/documentmanager.cfg new file mode 100644 index 00000000000..94020ca7b69 --- /dev/null +++ b/document/src/tests/struct_anno/documentmanager.cfg @@ -0,0 +1,160 @@ +enablecompression false +annotationtype[0] +datatype[8] +datatype[0].id -1049517126 +datatype[0].annotationreftype[0] +datatype[0].arraytype[0] +datatype[0].documenttype[1] +datatype[0].documenttype[0].bodystruct 1008689562 +datatype[0].documenttype[0].headerstruct 166307397 +datatype[0].documenttype[0].name "simple_def" +datatype[0].documenttype[0].version 0 +datatype[0].documenttype[0].inherits[1] +datatype[0].documenttype[0].inherits[0].name "document" +datatype[0].documenttype[0].inherits[0].version 0 +datatype[0].maptype[0] +datatype[0].structtype[0] +datatype[0].weightedsettype[0] +datatype[1].id -1267268530 +datatype[1].annotationreftype[0] +datatype[1].arraytype[0] +datatype[1].documenttype[0] +datatype[1].maptype[0] +datatype[1].structtype[1] +datatype[1].structtype[0].compresslevel 0 +datatype[1].structtype[0].compressminsize 800 +datatype[1].structtype[0].compressthreshold 95 +datatype[1].structtype[0].compresstype NONE +datatype[1].structtype[0].name "simple_def_search.header" +datatype[1].structtype[0].version 0 +datatype[1].structtype[0].field[3] +datatype[1].structtype[0].field[0].datatype 111553393 +datatype[1].structtype[0].field[0].name "my_url" +datatype[1].structtype[0].field[0].id[0] +datatype[1].structtype[0].field[1].datatype 2 +datatype[1].structtype[0].field[1].name "rankfeatures" +datatype[1].structtype[0].field[1].id[0] +datatype[1].structtype[0].field[2].datatype 2 +datatype[1].structtype[0].field[2].name "summaryfeatures" +datatype[1].structtype[0].field[2].id[0] +datatype[1].structtype[0].inherits[0] +datatype[1].weightedsettype[0] +datatype[2].id -495710767 +datatype[2].annotationreftype[0] +datatype[2].arraytype[0] +datatype[2].documenttype[1] +datatype[2].documenttype[0].bodystruct 1968090595 +datatype[2].documenttype[0].headerstruct -1267268530 +datatype[2].documenttype[0].name "simple_def_search" +datatype[2].documenttype[0].version 0 +datatype[2].documenttype[0].inherits[1] +datatype[2].documenttype[0].inherits[0].name "document" +datatype[2].documenttype[0].inherits[0].version 0 +datatype[2].maptype[0] +datatype[2].structtype[0] +datatype[2].weightedsettype[0] +datatype[3].id 1008689562 +datatype[3].annotationreftype[0] +datatype[3].arraytype[0] +datatype[3].documenttype[0] +datatype[3].maptype[0] +datatype[3].structtype[1] +datatype[3].structtype[0].compresslevel 0 +datatype[3].structtype[0].compressminsize 800 +datatype[3].structtype[0].compressthreshold 95 +datatype[3].structtype[0].compresstype NONE +datatype[3].structtype[0].name "simple_def.body" +datatype[3].structtype[0].version 0 +datatype[3].structtype[0].field[0] +datatype[3].structtype[0].inherits[0] +datatype[3].weightedsettype[0] +datatype[4].id 111553393 +datatype[4].annotationreftype[0] +datatype[4].arraytype[0] +datatype[4].documenttype[0] +datatype[4].maptype[0] +datatype[4].structtype[1] +datatype[4].structtype[0].compresslevel 0 +datatype[4].structtype[0].compressminsize 800 +datatype[4].structtype[0].compressthreshold 95 +datatype[4].structtype[0].compresstype NONE +datatype[4].structtype[0].name "url" +datatype[4].structtype[0].version 0 +datatype[4].structtype[0].field[7] +datatype[4].structtype[0].field[0].datatype 2 +datatype[4].structtype[0].field[0].name "all" +datatype[4].structtype[0].field[0].id[0] +datatype[4].structtype[0].field[1].datatype 2 +datatype[4].structtype[0].field[1].name "fragment" +datatype[4].structtype[0].field[1].id[0] +datatype[4].structtype[0].field[2].datatype 2 +datatype[4].structtype[0].field[2].name "host" +datatype[4].structtype[0].field[2].id[0] +datatype[4].structtype[0].field[3].datatype 2 +datatype[4].structtype[0].field[3].name "path" +datatype[4].structtype[0].field[3].id[0] +datatype[4].structtype[0].field[4].datatype 2 +datatype[4].structtype[0].field[4].name "port" +datatype[4].structtype[0].field[4].id[0] +datatype[4].structtype[0].field[5].datatype 2 +datatype[4].structtype[0].field[5].name "query" +datatype[4].structtype[0].field[5].id[0] +datatype[4].structtype[0].field[6].datatype 2 +datatype[4].structtype[0].field[6].name "scheme" +datatype[4].structtype[0].field[6].id[0] +datatype[4].structtype[0].inherits[0] +datatype[4].weightedsettype[0] +datatype[5].id 1381038251 +datatype[5].annotationreftype[0] +datatype[5].arraytype[0] +datatype[5].documenttype[0] +datatype[5].maptype[0] +datatype[5].structtype[1] +datatype[5].structtype[0].compresslevel 0 +datatype[5].structtype[0].compressminsize 800 +datatype[5].structtype[0].compressthreshold 95 +datatype[5].structtype[0].compresstype NONE +datatype[5].structtype[0].name "position" +datatype[5].structtype[0].version 0 +datatype[5].structtype[0].field[2] +datatype[5].structtype[0].field[0].datatype 0 +datatype[5].structtype[0].field[0].name "x" +datatype[5].structtype[0].field[0].id[0] +datatype[5].structtype[0].field[1].datatype 0 +datatype[5].structtype[0].field[1].name "y" +datatype[5].structtype[0].field[1].id[0] +datatype[5].structtype[0].inherits[0] +datatype[5].weightedsettype[0] +datatype[6].id 166307397 +datatype[6].annotationreftype[0] +datatype[6].arraytype[0] +datatype[6].documenttype[0] +datatype[6].maptype[0] +datatype[6].structtype[1] +datatype[6].structtype[0].compresslevel 0 +datatype[6].structtype[0].compressminsize 800 +datatype[6].structtype[0].compressthreshold 95 +datatype[6].structtype[0].compresstype NONE +datatype[6].structtype[0].name "simple_def.header" +datatype[6].structtype[0].version 0 +datatype[6].structtype[0].field[1] +datatype[6].structtype[0].field[0].datatype 111553393 +datatype[6].structtype[0].field[0].name "my_url" +datatype[6].structtype[0].field[0].id[0] +datatype[6].structtype[0].inherits[0] +datatype[6].weightedsettype[0] +datatype[7].id 1968090595 +datatype[7].annotationreftype[0] +datatype[7].arraytype[0] +datatype[7].documenttype[0] +datatype[7].maptype[0] +datatype[7].structtype[1] +datatype[7].structtype[0].compresslevel 0 +datatype[7].structtype[0].compressminsize 800 +datatype[7].structtype[0].compressthreshold 95 +datatype[7].structtype[0].compresstype NONE +datatype[7].structtype[0].name "simple_def_search.body" +datatype[7].structtype[0].version 0 +datatype[7].structtype[0].field[0] +datatype[7].structtype[0].inherits[0] +datatype[7].weightedsettype[0] diff --git a/document/src/tests/struct_anno/documenttypes.cfg b/document/src/tests/struct_anno/documenttypes.cfg new file mode 100644 index 00000000000..38ef6d54125 --- /dev/null +++ b/document/src/tests/struct_anno/documenttypes.cfg @@ -0,0 +1,98 @@ +enablecompression false +documenttype[2] +documenttype[0].id -495710767 +documenttype[0].name "simple_def_search" +documenttype[0].version 0 +documenttype[0].headerstruct -1267268530 +documenttype[0].bodystruct 1968090595 +documenttype[0].inherits[0] +documenttype[0].datatype[2] +documenttype[0].datatype[0].id -1267268530 +documenttype[0].datatype[0].type STRUCT +documenttype[0].datatype[0].array.element.id 0 +documenttype[0].datatype[0].map.key.id 0 +documenttype[0].datatype[0].map.value.id 0 +documenttype[0].datatype[0].wset.key.id 0 +documenttype[0].datatype[0].wset.createifnonexistent false +documenttype[0].datatype[0].wset.removeifzero false +documenttype[0].datatype[0].annotationref.annotation.id 0 +documenttype[0].datatype[0].sstruct.name "simple_def_search.header" +documenttype[0].datatype[0].sstruct.version 0 +documenttype[0].datatype[0].sstruct.compression.type NONE +documenttype[0].datatype[0].sstruct.compression.level 0 +documenttype[0].datatype[0].sstruct.compression.threshold 90 +documenttype[0].datatype[0].sstruct.compression.minsize 0 +documenttype[0].datatype[0].sstruct.field[3] +documenttype[0].datatype[0].sstruct.field[0].name "my_url" +documenttype[0].datatype[0].sstruct.field[0].id 1127377169 +documenttype[0].datatype[0].sstruct.field[0].id_v6 707904318 +documenttype[0].datatype[0].sstruct.field[0].datatype 111553393 +documenttype[0].datatype[0].sstruct.field[1].name "rankfeatures" +documenttype[0].datatype[0].sstruct.field[1].id 1883197392 +documenttype[0].datatype[0].sstruct.field[1].id_v6 699950698 +documenttype[0].datatype[0].sstruct.field[1].datatype 2 +documenttype[0].datatype[0].sstruct.field[2].name "summaryfeatures" +documenttype[0].datatype[0].sstruct.field[2].id 1840337115 +documenttype[0].datatype[0].sstruct.field[2].id_v6 1981648971 +documenttype[0].datatype[0].sstruct.field[2].datatype 2 +documenttype[0].datatype[1].id 1968090595 +documenttype[0].datatype[1].type STRUCT +documenttype[0].datatype[1].array.element.id 0 +documenttype[0].datatype[1].map.key.id 0 +documenttype[0].datatype[1].map.value.id 0 +documenttype[0].datatype[1].wset.key.id 0 +documenttype[0].datatype[1].wset.createifnonexistent false +documenttype[0].datatype[1].wset.removeifzero false +documenttype[0].datatype[1].annotationref.annotation.id 0 +documenttype[0].datatype[1].sstruct.name "simple_def_search.body" +documenttype[0].datatype[1].sstruct.version 0 +documenttype[0].datatype[1].sstruct.compression.type NONE +documenttype[0].datatype[1].sstruct.compression.level 0 +documenttype[0].datatype[1].sstruct.compression.threshold 90 +documenttype[0].datatype[1].sstruct.compression.minsize 0 +documenttype[0].datatype[1].sstruct.field[0] +documenttype[0].annotationtype[0] +documenttype[1].id -1049517126 +documenttype[1].name "simple_def" +documenttype[1].version 0 +documenttype[1].headerstruct 166307397 +documenttype[1].bodystruct 1008689562 +documenttype[1].inherits[0] +documenttype[1].datatype[2] +documenttype[1].datatype[0].id 166307397 +documenttype[1].datatype[0].type STRUCT +documenttype[1].datatype[0].array.element.id 0 +documenttype[1].datatype[0].map.key.id 0 +documenttype[1].datatype[0].map.value.id 0 +documenttype[1].datatype[0].wset.key.id 0 +documenttype[1].datatype[0].wset.createifnonexistent false +documenttype[1].datatype[0].wset.removeifzero false +documenttype[1].datatype[0].annotationref.annotation.id 0 +documenttype[1].datatype[0].sstruct.name "simple_def.header" +documenttype[1].datatype[0].sstruct.version 0 +documenttype[1].datatype[0].sstruct.compression.type NONE +documenttype[1].datatype[0].sstruct.compression.level 0 +documenttype[1].datatype[0].sstruct.compression.threshold 90 +documenttype[1].datatype[0].sstruct.compression.minsize 0 +documenttype[1].datatype[0].sstruct.field[1] +documenttype[1].datatype[0].sstruct.field[0].name "my_url" +documenttype[1].datatype[0].sstruct.field[0].id 1127377169 +documenttype[1].datatype[0].sstruct.field[0].id_v6 707904318 +documenttype[1].datatype[0].sstruct.field[0].datatype 111553393 +documenttype[1].datatype[1].id 1008689562 +documenttype[1].datatype[1].type STRUCT +documenttype[1].datatype[1].array.element.id 0 +documenttype[1].datatype[1].map.key.id 0 +documenttype[1].datatype[1].map.value.id 0 +documenttype[1].datatype[1].wset.key.id 0 +documenttype[1].datatype[1].wset.createifnonexistent false +documenttype[1].datatype[1].wset.removeifzero false +documenttype[1].datatype[1].annotationref.annotation.id 0 +documenttype[1].datatype[1].sstruct.name "simple_def.body" +documenttype[1].datatype[1].sstruct.version 0 +documenttype[1].datatype[1].sstruct.compression.type NONE +documenttype[1].datatype[1].sstruct.compression.level 0 +documenttype[1].datatype[1].sstruct.compression.threshold 90 +documenttype[1].datatype[1].sstruct.compression.minsize 0 +documenttype[1].datatype[1].sstruct.field[0] +documenttype[1].annotationtype[0] diff --git a/document/src/tests/struct_anno/struct_anno_test.cpp b/document/src/tests/struct_anno/struct_anno_test.cpp new file mode 100644 index 00000000000..85b3b8f2d0b --- /dev/null +++ b/document/src/tests/struct_anno/struct_anno_test.cpp @@ -0,0 +1,87 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +LOG_SETUP("struct_anno_test"); + +#include <stdlib.h> +#include <vespa/document/annotation/alternatespanlist.h> +#include <vespa/document/annotation/annotation.h> +#include <vespa/document/annotation/span.h> +#include <vespa/document/annotation/spanlist.h> +#include <vespa/document/annotation/spantree.h> +#include <vespa/document/config/config-documenttypes.h> +#include <vespa/document/document.h> +#include <vespa/document/fieldvalue/stringfieldvalue.h> +#include <vespa/document/repo/fixedtyperepo.h> +#include <vespa/document/serialization/annotationdeserializer.h> +#include <vespa/document/serialization/annotationserializer.h> +#include <vespa/document/serialization/vespadocumentdeserializer.h> +#include <vespa/document/serialization/vespadocumentserializer.h> +#include <vespa/vespalib/objects/nbostream.h> +#include <vespa/vespalib/testkit/testapp.h> +#include <sstream> +#include <vector> + +using std::ostringstream; +using std::string; +using std::vector; +using vespalib::nbostream; +using namespace document; + +namespace { + +class Test : public vespalib::TestApp { + void requireThatStructFieldsCanContainAnnotations(); + +public: + int Main(); +}; + +int Test::Main() { + if (getenv("TEST_SUBSET") != 0) { return 0; } + TEST_INIT("struct_anno_test"); + TEST_DO(requireThatStructFieldsCanContainAnnotations()); + TEST_DONE(); +} + +template <typename T, int N> int arraysize(const T (&)[N]) { return N; } + +void Test::requireThatStructFieldsCanContainAnnotations() { + DocumentTypeRepo repo(readDocumenttypesConfig("documenttypes.cfg")); + + FastOS_File file("document.dat"); + ASSERT_TRUE(file.OpenReadOnlyExisting()); + char buffer[1024]; + ssize_t size = file.Read(buffer, arraysize(buffer)); + ASSERT_TRUE(size != -1); + + nbostream stream(buffer, size); + VespaDocumentDeserializer deserializer(repo, stream, 8); + Document doc; + deserializer.read(doc); + + FieldValue::UP urlRef = doc.getValue("my_url"); + ASSERT_TRUE(urlRef.get() != NULL); + const StructFieldValue *url = dynamic_cast<const StructFieldValue*>(urlRef.get()); + ASSERT_TRUE(url != NULL); + + FieldValue::UP strRef = url->getValue("scheme"); + const StringFieldValue *str = dynamic_cast<const StringFieldValue*>(strRef.get()); + ASSERT_TRUE(str != NULL); + + SpanTree::UP tree = std::move(str->getSpanTrees().front()); + + EXPECT_EQUAL("my_tree", tree->getName()); + const SimpleSpanList *root = dynamic_cast<const SimpleSpanList*>(&tree->getRoot()); + ASSERT_TRUE(root != NULL); + EXPECT_EQUAL(1u, root->size()); + SimpleSpanList::const_iterator it = root->begin(); + EXPECT_EQUAL(Span(0, 6), (*it++)); + EXPECT_TRUE(it == root->end()); + + EXPECT_EQUAL(1u, tree->numAnnotations()); +} + +} // namespace + +TEST_APPHOOK(Test); |