aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/tests/fieldvalue
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /document/src/tests/fieldvalue
Publish
Diffstat (limited to 'document/src/tests/fieldvalue')
-rw-r--r--document/src/tests/fieldvalue/.gitignore7
-rw-r--r--document/src/tests/fieldvalue/CMakeLists.txt28
-rw-r--r--document/src/tests/fieldvalue/document_test.cpp31
-rw-r--r--document/src/tests/fieldvalue/fieldvalue_test.cpp41
-rw-r--r--document/src/tests/fieldvalue/predicatefieldvalue_test.cpp70
5 files changed, 177 insertions, 0 deletions
diff --git a/document/src/tests/fieldvalue/.gitignore b/document/src/tests/fieldvalue/.gitignore
new file mode 100644
index 00000000000..6b57b8c8d17
--- /dev/null
+++ b/document/src/tests/fieldvalue/.gitignore
@@ -0,0 +1,7 @@
+*.So
+*_test
+.depend
+Makefile
+document_document_test_app
+document_fieldvalue_test_app
+document_predicatefieldvalue_test_app
diff --git a/document/src/tests/fieldvalue/CMakeLists.txt b/document/src/tests/fieldvalue/CMakeLists.txt
new file mode 100644
index 00000000000..7b5fc637e4f
--- /dev/null
+++ b/document/src/tests/fieldvalue/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(document_document_test_app
+ SOURCES
+ document_test.cpp
+ DEPENDS
+ document
+ AFTER
+ document_documentconfig
+)
+vespa_add_test(NAME document_document_test_app COMMAND document_document_test_app)
+vespa_add_executable(document_fieldvalue_test_app
+ SOURCES
+ fieldvalue_test.cpp
+ DEPENDS
+ document
+ AFTER
+ document_documentconfig
+)
+vespa_add_test(NAME document_fieldvalue_test_app COMMAND document_fieldvalue_test_app)
+vespa_add_executable(document_predicatefieldvalue_test_app
+ SOURCES
+ predicatefieldvalue_test.cpp
+ DEPENDS
+ document
+ AFTER
+ document_documentconfig
+)
+vespa_add_test(NAME document_predicatefieldvalue_test_app COMMAND document_predicatefieldvalue_test_app)
diff --git a/document/src/tests/fieldvalue/document_test.cpp b/document/src/tests/fieldvalue/document_test.cpp
new file mode 100644
index 00000000000..51216c6d77a
--- /dev/null
+++ b/document/src/tests/fieldvalue/document_test.cpp
@@ -0,0 +1,31 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Unit tests for document.
+
+#include <vespa/log/log.h>
+LOG_SETUP("document_test");
+#include <vespa/fastos/fastos.h>
+
+#include <vespa/document/base/documentid.h>
+#include <vespa/document/base/testdocrepo.h>
+#include <vespa/document/fieldvalue/document.h>
+#include <vespa/vespalib/testkit/testapp.h>
+
+using namespace document;
+
+namespace {
+
+TEST("require that document with id schema 'id' checks type") {
+ TestDocRepo repo;
+ const DataType *type = repo.getDocumentType("testdoctype1");
+ ASSERT_TRUE(type);
+
+ Document(*type, DocumentId("id:ns:testdoctype1::")); // Should not throw
+
+ EXPECT_EXCEPTION(Document(*type, DocumentId("id:ns:type::")),
+ vespalib::IllegalArgumentException,
+ "testdoctype1 that don't match the id (type type)");
+}
+
+} // namespace
+
+TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/document/src/tests/fieldvalue/fieldvalue_test.cpp b/document/src/tests/fieldvalue/fieldvalue_test.cpp
new file mode 100644
index 00000000000..7fecb42417e
--- /dev/null
+++ b/document/src/tests/fieldvalue/fieldvalue_test.cpp
@@ -0,0 +1,41 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Unit tests for fieldvalue.
+
+#include <vespa/log/log.h>
+LOG_SETUP("fieldvalue_test");
+#include <vespa/fastos/fastos.h>
+
+#include <vespa/document/fieldvalue/stringfieldvalue.h>
+#include <vespa/document/fieldvalue/longfieldvalue.h>
+#include <vespa/document/fieldvalue/intfieldvalue.h>
+
+#include <vespa/vespalib/testkit/testapp.h>
+
+using namespace document;
+
+namespace {
+
+TEST("require that StringFieldValue can be assigned primitives") {
+ StringFieldValue val;
+ val = "foo";
+ EXPECT_EQUAL("foo", val.getValue());
+ val = 1;
+ EXPECT_EQUAL("1", val.getValue());
+ val = static_cast<int64_t>(2);
+ EXPECT_EQUAL("2", val.getValue());
+ val = 3.0f;
+ EXPECT_EQUAL("3", val.getValue());
+ val = 4.0;
+ EXPECT_EQUAL("4", val.getValue());
+}
+
+TEST("require that FieldValues does not change their storage size.") {
+ EXPECT_EQUAL(8u, sizeof(FieldValue));
+ EXPECT_EQUAL(16u, sizeof(IntFieldValue));
+ EXPECT_EQUAL(24u, sizeof(LongFieldValue));
+ EXPECT_EQUAL(104u, sizeof(StringFieldValue));
+}
+
+} // namespace
+
+TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp b/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp
new file mode 100644
index 00000000000..94b0f406696
--- /dev/null
+++ b/document/src/tests/fieldvalue/predicatefieldvalue_test.cpp
@@ -0,0 +1,70 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Unit tests for predicatefieldvalue.
+
+#include <vespa/log/log.h>
+LOG_SETUP("predicatefieldvalue_test");
+#include <vespa/fastos/fastos.h>
+
+#include <vespa/document/predicate/predicate.h>
+#include <vespa/vespalib/data/slime/slime.h>
+#include <vespa/vespalib/testkit/testapp.h>
+
+#include <vespa/document/datatype/datatype.h>
+#include <vespa/document/fieldvalue/predicatefieldvalue.h>
+#include <vespa/document/predicate/predicate_slime_builder.h>
+#include <sstream>
+#include <string>
+
+using std::ostringstream;
+using std::string;
+using vespalib::Slime;
+using namespace document;
+
+namespace {
+
+void verifyEqual(const FieldValue & a, const FieldValue & b) {
+ ostringstream o1;
+ a.print(o1, false, "");
+ ostringstream o2;
+ b.print(o2, false, "");
+ ASSERT_EQUAL(o1.str(), o2.str());
+}
+
+TEST("require that PredicateFieldValue can be cloned, assigned, and operator=") {
+ PredicateSlimeBuilder builder;
+ builder.neg().feature("foo").value("bar").value("baz");
+ PredicateFieldValue val(builder.build());
+
+ FieldValue::UP val2(val.clone());
+ verifyEqual(val, *val2);
+
+ PredicateFieldValue assigned;
+ assigned.assign(val);
+ verifyEqual(val, assigned);
+
+ PredicateFieldValue operatorAssigned;
+ operatorAssigned = val;
+ verifyEqual(val, operatorAssigned);
+}
+
+TEST("require that PredicateFieldValue can be created from datatype") {
+ FieldValue::UP val = DataType::PREDICATE->createFieldValue();
+ ASSERT_TRUE(dynamic_cast<PredicateFieldValue *>(val.get()));
+}
+
+TEST("require that PredicateFieldValue can be cloned") {
+ PredicateSlimeBuilder builder;
+ builder.neg().feature("foo").value("bar").value("baz");
+ PredicateFieldValue val(builder.build());
+ FieldValue::UP val2(val.clone());
+ ostringstream o1;
+ val.print(o1, false, "");
+ ostringstream o2;
+ val2->print(o2, false, "");
+ ASSERT_EQUAL(o1.str(), o2.str());
+}
+
+
+} // namespace
+
+TEST_MAIN() { TEST_RUN_ALL(); }