summaryrefslogtreecommitdiffstats
path: root/document/src/test/java/com/yahoo/document/annotation/Bug4261985TestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'document/src/test/java/com/yahoo/document/annotation/Bug4261985TestCase.java')
-rw-r--r--document/src/test/java/com/yahoo/document/annotation/Bug4261985TestCase.java153
1 files changed, 153 insertions, 0 deletions
diff --git a/document/src/test/java/com/yahoo/document/annotation/Bug4261985TestCase.java b/document/src/test/java/com/yahoo/document/annotation/Bug4261985TestCase.java
new file mode 100644
index 00000000000..4d6d040bcf8
--- /dev/null
+++ b/document/src/test/java/com/yahoo/document/annotation/Bug4261985TestCase.java
@@ -0,0 +1,153 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.document.annotation;
+
+import com.yahoo.document.ArrayDataType;
+import com.yahoo.document.Document;
+import com.yahoo.document.DocumentType;
+import com.yahoo.document.DocumentTypeManager;
+import com.yahoo.document.DocumentTypeManagerConfigurer;
+import com.yahoo.document.Field;
+import com.yahoo.document.StructDataType;
+import com.yahoo.document.datatypes.Array;
+import com.yahoo.document.datatypes.FieldValue;
+import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.document.datatypes.Struct;
+import com.yahoo.io.GrowableByteBuffer;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Bug4261985TestCase {
+
+ @Test
+ public void testAnnotate() {
+ DocumentTypeManager manager = new DocumentTypeManager();
+ DocumentTypeManagerConfigurer.configure(manager, "file:src/test/java/com/yahoo/document/annotation/documentmanager.bug4261985.cfg");
+
+ DocumentType type = manager.getDocumentType("blog");
+ Document doc = new Document(type, "doc:this:is:a:test");
+ doc.setFieldValue("body", new StringFieldValue("bla bla bla bla bla bla bla" +
+ "bla bla bla bla bla bla bla"));
+ annotate(doc, manager);
+
+ GrowableByteBuffer buf = new GrowableByteBuffer();
+ doc.serialize(buf);
+ }
+
+ public void annotate(Document document, DocumentTypeManager manager) {
+ AnnotationTypeRegistry registry = manager.getAnnotationTypeRegistry();
+
+ AnnotationType company = registry.getType("company");
+ AnnotationType industry = registry.getType("industry");
+ AnnotationType person = registry.getType("person");
+ AnnotationType location = registry.getType("location");
+ AnnotationType bigshots = registry.getType("bigshots");
+
+ if (company.inherits(industry)) {
+ System.out.println("Company Inherits Industry");
+ } else {
+ System.out.println("FAIL: COMPANY DOES NOT INHERIT INDUSTRY");
+ throw new RuntimeException("FAIL: COMPANY DOES NOT INHERIT INDUSTRY, though it does in SD file");
+ }
+
+ SpanTree tree = new SpanTree("testannotations");
+ SpanList root = (SpanList) tree.getRoot();
+
+ SpanNode span1 = new Span(0,5);
+ SpanNode span2 = new Span(5,10);
+ SpanNode span3 = new Span(10,15);
+ SpanNode span4 = new Span(15,20);
+ SpanNode span5 = new Span(6,10);
+ SpanNode span6 = new Span(8,4);
+ SpanNode span7 = new Span(4, 2);
+ SpanNode span8 = new Span(12, 6);
+
+ root.add(span1);
+ root.add(span2);
+ //root.add(span3);
+ root.add(span4);
+ root.add(span5);
+ root.add(span6);
+ //root.add(span7);
+ root.add(span8);
+
+ AlternateSpanList aspl = new AlternateSpanList();
+ aspl.add(span7);
+ List<SpanNode> subtree1 = new ArrayList<SpanNode>();
+ subtree1.add(span3);
+ aspl.addChildren(1, subtree1, 33.0d);
+
+ root.add(aspl);
+
+ Struct personValue = (Struct) person.getDataType().createFieldValue();
+ personValue.setFieldValue("name", "Richard Bair");
+ Annotation personAn = new Annotation(person, personValue);
+ tree.annotate(span1, personAn);
+
+ Struct companyValue = (Struct) company.getDataType().createFieldValue();
+ companyValue.setFieldValue("name", "Sun");
+
+ Struct locationVal = new Struct(manager.getDataType("annotation.location"));
+ locationVal.setFieldValue("lat", 37.774929);
+ locationVal.setFieldValue("lon", -122.419415);
+ Annotation locAnnotation = new Annotation(location, locationVal);
+ Field compLocField = ((StructDataType) company.getDataType()).getField("place");
+ //FieldValue compLocFieldVal = new FieldValue(compLocField.getDataType());
+ AnnotationReferenceDataType annType = (AnnotationReferenceDataType) compLocField.getDataType();
+ FieldValue compLocFieldVal = null;
+ //if (scenario.equals("createFieldValue")) {
+ // compLocFieldVal = annType.createFieldValue(new AnnotationReference(annType, locAnnotation));
+ //} else {
+ compLocFieldVal = new AnnotationReference(annType, locAnnotation);
+ //}
+ companyValue.setFieldValue(compLocField, compLocFieldVal);
+
+ companyValue.setFieldValue("vertical", "software");
+ Struct dirValue1 = new Struct(manager.getDataType("annotation.person"));
+ dirValue1.setFieldValue("name", "Jonathan Schwartz");
+ Annotation dirAnnotation1 = new Annotation(person, dirValue1);
+ Struct dirValue2 = new Struct(manager.getDataType("annotation.person"));
+ dirValue2.setFieldValue("name", "Scott Mcnealy");
+ Annotation dirAnnotation2 = new Annotation(person, dirValue2);
+ Field dirField = ((StructDataType) company.getDataType()).getField("directors");
+ Array<FieldValue> dirFieldVal = new Array<FieldValue>(dirField.getDataType());
+ AnnotationReferenceDataType annRefType = (AnnotationReferenceDataType) ((ArrayDataType) dirField.getDataType()).getNestedType();
+ dirFieldVal.add(new AnnotationReference(annRefType, dirAnnotation1));
+ dirFieldVal.add(new AnnotationReference(annRefType, dirAnnotation2));
+ companyValue.setFieldValue(dirField, dirFieldVal);
+ Annotation compAn = new Annotation(company, companyValue);
+ tree.annotate(span2, compAn);
+
+ Struct bigshotsValue = (Struct) bigshots.getDataType().createFieldValue();
+ Field ceosField = ((StructDataType) bigshots.getDataType()).getField("ceos");
+ //FieldValue compLocFieldVal = new FieldValue(compLocField.getDataType());
+ AnnotationReferenceDataType annType1 = (AnnotationReferenceDataType) ceosField.getDataType();
+ FieldValue ceosFieldVal = new AnnotationReference(annType1, compAn);
+ bigshotsValue.setFieldValue(ceosField, ceosFieldVal);
+
+ Annotation bigshotsAn = new Annotation(bigshots, bigshotsValue);
+ tree.annotate(span8, bigshotsAn);
+
+ Field selfField = ((StructDataType) bigshots.getDataType()).getField("self");
+ AnnotationReferenceDataType annType2 = (AnnotationReferenceDataType) selfField.getDataType();
+ FieldValue selfFieldVal = new AnnotationReference(annType2, bigshotsAn);
+ bigshotsValue.setFieldValue(selfField, selfFieldVal);
+ bigshotsAn = new Annotation(bigshots, bigshotsValue);
+ tree.annotate(span8, bigshotsAn);
+
+ tree.annotate(span3, locAnnotation);
+ tree.annotate(span5, dirAnnotation1);
+ tree.annotate(span6, dirAnnotation2);
+
+ Struct indValue = new Struct(manager.getDataType("annotation.industry"));
+ indValue.setFieldValue("vertical", "Manufacturing");
+ Annotation indAn = new Annotation(industry, indValue);
+ tree.annotate(span4, indAn);
+
+ StringFieldValue body = (StringFieldValue) document.getFieldValue(document.getDataType().getField("body"));
+ body.setSpanTree(tree);
+ document.setFieldValue(document.getDataType().getField("body"), body);
+ }
+}
+