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 }