aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/tests/struct_anno
diff options
context:
space:
mode:
Diffstat (limited to 'document/src/tests/struct_anno')
-rw-r--r--document/src/tests/struct_anno/.gitignore2
-rw-r--r--document/src/tests/struct_anno/CMakeLists.txt10
-rw-r--r--document/src/tests/struct_anno/document.datbin0 -> 223 bytes
-rw-r--r--document/src/tests/struct_anno/documentmanager.cfg160
-rw-r--r--document/src/tests/struct_anno/documenttypes.cfg98
-rw-r--r--document/src/tests/struct_anno/struct_anno_test.cpp87
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
new file mode 100644
index 00000000000..243b5f05a92
--- /dev/null
+++ b/document/src/tests/struct_anno/document.dat
Binary files differ
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);