1 package com.atlassian.bonnie.search.extractor;
2
3 import com.atlassian.bonnie.Searchable;
4 import com.atlassian.bonnie.search.Extractor;
5 import com.atlassian.bonnie.search.MockSearchableAttachment;
6 import com.atlassian.bonnie.search.SearchableAttachment;
7 import junit.framework.TestCase;
8 import org.apache.lucene.document.Document;
9 import org.apache.lucene.document.Field;
10
11 import java.util.Collection;
12
13 public abstract class BaseAttachmentContentExtractorTest extends TestCase
14 {
15 protected Extractor extractor;
16
17 public abstract Extractor getExtractor();
18
19 protected void setUp() throws Exception
20 {
21 super.setUp();
22
23 extractor = getExtractor();
24 }
25
26 protected void tearDown() throws Exception
27 {
28 extractor = null;
29
30 super.tearDown();
31 }
32
33 protected void assertOnExtractedTextOf(SearchableAttachment attachment, String[] expectedWords, String[] nonExpectedWords)
34 {
35 StringBuffer searchableContent = new StringBuffer();
36 extractor.addFields(new Document(), searchableContent, attachment);
37
38 for (int i = 0; i < expectedWords.length; i++)
39 {
40 String expected = expectedWords[i];
41 assertTrue("Expected to find: " + expected, searchableContent.indexOf(expected) >= 0);
42 }
43
44 for (int i = 0; i < nonExpectedWords.length; i++)
45 {
46 String nonExpected = nonExpectedWords[i];
47 assertTrue("Not expecting to find: " + nonExpected, searchableContent.indexOf(nonExpected) < 0);
48 }
49 }
50
51 public void testNonAttachment()
52 {
53 Searchable searchable = new Searchable()
54 {
55 public long getId()
56 {
57 return -1;
58 }
59
60 public Collection getSearchableDependants()
61 {
62 return null;
63 }
64
65 public boolean isIndexable()
66 {
67 return false;
68 }
69 };
70
71 Document document = new Document();
72 extractor.addFields(document, new StringBuffer(), searchable);
73 assertNull(document.getField("contentBody"));
74 }
75
76 public void testSkipAttachmentContentExtractionIfContentBodyExists()
77 {
78 SearchableAttachment attachment = createSearchableAttachment("test-attachment-search.txt", "text/plain");
79
80 Document document = new Document();
81 final String contentBody = "I am a fish";
82 document.add(new Field("contentBody", contentBody, Field.Store.YES, Field.Index.TOKENIZED));
83
84 final StringBuffer extractedText = new StringBuffer();
85 extractor.addFields(document, extractedText, attachment);
86
87 assertEquals(1, document.getFields("contentBody").length);
88 assertEquals(contentBody, document.getField("contentBody").stringValue());
89 assertEquals(0, extractedText.length());
90 }
91
92 protected MockSearchableAttachment createSearchableAttachment(String fileName, String contentType)
93 {
94 MockSearchableAttachment attachment = new MockSearchableAttachment();
95 attachment.setContentType(contentType);
96 attachment.setFileName(fileName);
97 return attachment;
98 }
99 }