1 package com.atlassian.bonnie.search.extractor;
2
3 import com.atlassian.bonnie.search.BaseDocumentBuilder;
4 import com.atlassian.bonnie.search.MockLuceneIndexableObject;
5 import com.atlassian.bonnie.search.MockLuceneIndexableObjectSubclass;
6 import junit.framework.TestCase;
7 import org.apache.lucene.document.Document;
8 import org.apache.lucene.document.Field;
9
10 import java.util.ArrayList;
11 import java.util.List;
12
13 public class TestXmlConfiguredExtractor extends TestCase
14 {
15 private XmlConfiguredExtractor extractor;
16
17 protected void setUp() throws Exception
18 {
19 super.setUp();
20
21 extractor = new XmlConfiguredExtractor();
22 }
23
24 public void testUnconfiguredClass()
25 {
26 MockLuceneIndexableObject obj = new MockLuceneIndexableObjectSubclass();
27 populateWithTestData(obj);
28 Document doc = makeDocument(obj);
29
30 assertNull(doc.get("keywordField"));
31 assertNull(doc.get("textField"));
32 assertNull(doc.get("unIndexedField"));
33 assertNull(doc.get("unStoredField"));
34 assertNull(doc.get(BaseDocumentBuilder.FieldName.CONTENT_BODY));
35 }
36
37 public void testCreateDocument() throws Exception
38 {
39 MockLuceneIndexableObject obj = new MockLuceneIndexableObject();
40 populateWithTestData(obj);
41 Document doc = makeDocument(obj);
42
43 assertEquals(obj.getKeywordAttr(), doc.get("keywordField"));
44 assertEquals("" + obj.getTextAttr(), doc.get("textField"));
45 assertEquals("" + obj.getUnIndexedAttr(), doc.get("unIndexedField"));
46 assertEquals("" + obj.getUnStoredAttr(), doc.get("unStoredField"));
47 assertEquals("" + obj.getTextAttr(), doc.get(BaseDocumentBuilder.FieldName.CONTENT_BODY));
48
49 assertCollectionFieldTypes(doc);
50 }
51
52 private Document makeDocument(MockLuceneIndexableObject obj)
53 {
54 Document doc = new Document();
55 StringBuffer extractedText = new StringBuffer();
56 extractor.addFields(doc, extractedText, obj);
57
58 if (extractedText.length() > 0)
59 doc.add(new Field("contentBody", extractedText.toString(), Field.Store.YES, Field.Index.TOKENIZED));
60
61 return doc;
62 }
63
64 private void assertCollectionFieldTypes(Document doc)
65 {
66 String[] listValues = doc.getValues("listField");
67 assertEquals(2, listValues.length);
68 assertEquals("Goat", listValues[0]);
69 assertEquals("3", listValues[1]);
70
71 String[] objArrValues = doc.getValues("objArrayField");
72 assertEquals(2, objArrValues.length);
73 assertEquals("Fish", objArrValues[0]);
74 assertEquals("4", objArrValues[1]);
75
76 String[] intArrValues = doc.getValues("intArrayField");
77 assertEquals(5, intArrValues.length);
78 assertEquals("1", intArrValues[0]);
79 assertEquals("2", intArrValues[1]);
80 assertEquals("3", intArrValues[2]);
81 assertEquals("4", intArrValues[3]);
82 assertEquals("5", intArrValues[4]);
83 }
84
85 private void populateWithTestData(MockLuceneIndexableObject obj)
86 {
87 obj.setHandleAttr(111);
88 obj.setKeywordAttr("112");
89 obj.setTextAttr(113);
90 obj.setUnIndexedAttr(114);
91 obj.setUnStoredAttr(115);
92 obj.setIntArrayAttr(new int[] { 1, 2, 3, 4, 5 });
93 obj.setObjArrayAttr(new Object[] { "Fish", new Integer(4) });
94 List myList = new ArrayList();
95 myList.add("Goat");
96 myList.add(new Integer(3));
97 obj.setListAttr(myList);
98 }
99
100 }