1   package com.atlassian.bonnie.search;
2   
3   import junit.framework.Assert;
4   import junit.framework.TestCase;
5   
6   public class TestSearchWordsLister extends TestCase
7   {
8       public void testSearcherWithoutIgnoreWords() throws Exception
9       {
10          SearchWordsLister lister = getLister("meeting notes");
11  
12          Assert.assertEquals(0, lister.getIgnoredWords().size());
13          Assert.assertEquals(2, lister.getSearchWords().size());
14      }
15  
16      public void testSearcherWithIgnoreWords() throws Exception
17      {
18          //RM* the assertion below doesn't fail?? this is a bug in lucene, surely, the shouldn't be ignored
19          //when a wildcard is attached
20          SearchWordsLister lister = getLister("what the? oh my god!");
21  
22          Assert.assertEquals(1, lister.getIgnoredWords().size());
23          Assert.assertEquals(4, lister.getSearchWords().size());
24          Assert.assertEquals("the", lister.getIgnoredWordsAsString());
25          Assert.assertEquals("what, oh, my, god", lister.getSearchWordsAsString());
26  
27          //RM* the assertion below doesn't fail either!
28          //assertEquals("the", searchIgnoreWordsTest("what the* oh my god!"));
29      }
30  
31      public void testSearcherWithDuplicateIgnoreWords() throws Exception
32      {
33          SearchWordsLister lister = getLister("this is a big elephant and not a banana you idiot");
34  
35          Assert.assertEquals(5, lister.getIgnoredWords().size());
36          Assert.assertEquals(5, lister.getSearchWords().size());
37          Assert.assertEquals("this, is, a, and, not", lister.getIgnoredWordsAsString());
38          Assert.assertEquals("big, elephant, banana, you, idiot", lister.getSearchWordsAsString());
39      }
40  
41      public void testSearcherWithKeywords() throws Exception
42      {
43          SearchWordsLister lister = getLister("Apples AND oranges AND NOT kiwis OR bananas");
44  
45          Assert.assertEquals(0, lister.getIgnoredWords().size());
46          Assert.assertEquals(4, lister.getSearchWords().size());
47          Assert.assertEquals("", lister.getIgnoredWordsAsString());
48          Assert.assertEquals("apples, oranges, kiwis, bananas", lister.getSearchWordsAsString());
49      }
50  
51      public void testSearcherWithKeywordsAndIgnoreWords() throws Exception
52      {
53          SearchWordsLister lister = getLister("Apples and oranges AND kiwis OR bananas but Not kumquats");
54  
55          Assert.assertEquals(3, lister.getIgnoredWords().size());
56          Assert.assertEquals(5, lister.getSearchWords().size());
57          Assert.assertEquals("and, but, not", lister.getIgnoredWordsAsString());
58          //Lucene converts the query string to lower case, so Apples becomes apples
59          Assert.assertEquals("apples, oranges, kiwis, bananas, kumquats", lister.getSearchWordsAsString());
60      }
61  
62      private SearchWordsLister getLister(String query) throws Exception
63      {
64          SearchWordsLister lister = new SearchWordsLister();
65          lister.parseQuery(query);
66          return lister;
67      }
68  }