http://git-wip-us.apache.org/repos/asf/james-project/blob/d76f8fc4/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsTest.java
index efb6b80..2249dae 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsTest.java
@@ -26,12 +26,14 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.Locale;
 import java.util.TimeZone;
 
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.SearchQuery.AddressType;
 import org.apache.james.mailbox.model.SearchQuery.DateResolution;
@@ -61,6 +63,8 @@ public class SearchUtilsTest {
     MessageBuilder builder;
 
     Collection<MessageUid> recent;
+
+    private MessageSearches messageSearches;
     
     private Calendar getGMT() {
         return Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.UK);
@@ -76,19 +80,24 @@ public class SearchUtilsTest {
         recent = new ArrayList<>();
         builder = new MessageBuilder();
         builder.uid = MessageUid.of(1009);
+        
+        Iterator<MailboxMessage> messages = null;
+        SearchQuery query = null; 
+        TextExtractor textExtractor = null;
+        messageSearches = new MessageSearches(messages, query, textExtractor);
     }
     
     @Test
     public void testMatchSizeLessThan() throws Exception {
         builder.size = SIZE;
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.sizeLessThan(SIZE - 1), row,
+        assertFalse(messageSearches.isMatch(SearchQuery.sizeLessThan(SIZE - 
1), row,
                 recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.sizeLessThan(SIZE), row,
+        assertFalse(messageSearches.isMatch(SearchQuery.sizeLessThan(SIZE), 
row,
                 recent));
-        assertTrue(new MessageSearches().isMatch(SearchQuery.sizeLessThan(SIZE 
+ 1), row,
+        assertTrue(messageSearches.isMatch(SearchQuery.sizeLessThan(SIZE + 1), 
row,
                 recent));
-        assertTrue(new MessageSearches().isMatch(
+        assertTrue(messageSearches.isMatch(
                 SearchQuery.sizeLessThan(Integer.MAX_VALUE), row, recent));
     }
 
@@ -96,13 +105,13 @@ public class SearchUtilsTest {
     public void testMatchSizeMoreThan() throws Exception {
         builder.size = SIZE;
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.sizeGreaterThan(SIZE - 1), row,
+        assertTrue(messageSearches.isMatch(SearchQuery.sizeGreaterThan(SIZE - 
1), row,
                 recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.sizeGreaterThan(SIZE), row,
+        assertFalse(messageSearches.isMatch(SearchQuery.sizeGreaterThan(SIZE), 
row,
                 recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.sizeGreaterThan(SIZE + 1),
+        assertFalse(messageSearches.isMatch(SearchQuery.sizeGreaterThan(SIZE + 
1),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .sizeGreaterThan(Integer.MAX_VALUE), row, recent));
     }
 
@@ -110,12 +119,12 @@ public class SearchUtilsTest {
     public void testMatchSizeEquals() throws Exception {
         builder.size = SIZE;
         MailboxMessage row = builder.build();
-        assertFalse(new MessageSearches().isMatch(SearchQuery.sizeEquals(SIZE 
- 1), row,
+        assertFalse(messageSearches.isMatch(SearchQuery.sizeEquals(SIZE - 1), 
row,
                 recent));
-        assertTrue(new MessageSearches().isMatch(SearchQuery.sizeEquals(SIZE), 
row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery.sizeEquals(SIZE 
+ 1), row,
+        assertTrue(messageSearches.isMatch(SearchQuery.sizeEquals(SIZE), row, 
recent));
+        assertFalse(messageSearches.isMatch(SearchQuery.sizeEquals(SIZE + 1), 
row,
                 recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.sizeEquals(Integer.MAX_VALUE),
+        
assertFalse(messageSearches.isMatch(SearchQuery.sizeEquals(Integer.MAX_VALUE),
                 row, recent));
     }
 
@@ -123,15 +132,15 @@ public class SearchUtilsTest {
     public void testMatchInternalDateEquals() throws Exception {
         builder.internalDate = SUN_SEP_9TH_2001;
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.internalDateOn(getDate(9, 9, 2000), 
DateResolution.Day),
+        
assertFalse(messageSearches.isMatch(SearchQuery.internalDateOn(getDate(9, 9, 
2000), DateResolution.Day),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.internalDateOn(getDate(8, 9, 2001), 
DateResolution.Day),
+        
assertFalse(messageSearches.isMatch(SearchQuery.internalDateOn(getDate(8, 9, 
2001), DateResolution.Day),
                 row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.internalDateOn(getDate(9, 9, 2001), 
DateResolution.Day),
+        
assertTrue(messageSearches.isMatch(SearchQuery.internalDateOn(getDate(9, 9, 
2001), DateResolution.Day),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.internalDateOn(getDate(10, 9, 2001), 
DateResolution.Day),
+        
assertFalse(messageSearches.isMatch(SearchQuery.internalDateOn(getDate(10, 9, 
2001), DateResolution.Day),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.internalDateOn(getDate(9, 9, 2002), 
DateResolution.Day),
+        
assertFalse(messageSearches.isMatch(SearchQuery.internalDateOn(getDate(9, 9, 
2002), DateResolution.Day),
                 row, recent));
     }
 
@@ -140,15 +149,15 @@ public class SearchUtilsTest {
     public void testMatchInternalDateBefore() throws Exception {
         builder.internalDate = SUN_SEP_9TH_2001;
         MailboxMessage row = builder.build();
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.internalDateBefore(getDate(9, 9, 2000), 
DateResolution.Day), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.internalDateBefore(getDate(8, 9, 2001), 
DateResolution.Day), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.internalDateBefore(getDate(9, 9, 2001), 
DateResolution.Day), row, recent));
-        assertTrue(new MessageSearches().isMatch(
+        assertTrue(messageSearches.isMatch(
                 SearchQuery.internalDateBefore(getDate(10, 9, 2001), 
DateResolution.Day), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.internalDateBefore(getDate(9, 9, 2002), 
DateResolution.Day),
+        
assertTrue(messageSearches.isMatch(SearchQuery.internalDateBefore(getDate(9, 9, 
2002), DateResolution.Day),
                 row, recent));
     }
 
@@ -156,15 +165,15 @@ public class SearchUtilsTest {
     public void testMatchInternalDateAfter() throws Exception {
         builder.internalDate = SUN_SEP_9TH_2001;
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.internalDateAfter(getDate(9, 9, 2000), 
DateResolution.Day),
+        
assertTrue(messageSearches.isMatch(SearchQuery.internalDateAfter(getDate(9, 9, 
2000), DateResolution.Day),
                 row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.internalDateAfter(getDate(8, 9, 2001), 
DateResolution.Day),
+        
assertTrue(messageSearches.isMatch(SearchQuery.internalDateAfter(getDate(8, 9, 
2001), DateResolution.Day),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.internalDateAfter(getDate(9, 9, 2001), 
DateResolution.Day),
+        
assertFalse(messageSearches.isMatch(SearchQuery.internalDateAfter(getDate(9, 9, 
2001), DateResolution.Day),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.internalDateAfter(getDate(10, 9, 2001), 
DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.internalDateAfter(getDate(9, 9, 2002), 
DateResolution.Day),
+        
assertFalse(messageSearches.isMatch(SearchQuery.internalDateAfter(getDate(9, 9, 
2002), DateResolution.Day),
                 row, recent));
     }
 
@@ -172,17 +181,17 @@ public class SearchUtilsTest {
     public void testMatchHeaderDateAfter() throws Exception {
         builder.header(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2000), DateResolution.Day), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(8,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(8,
                 9, 2001), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2001), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD,
                 getDate(10, 9, 2001), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2002), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter("BOGUS", getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter("BOGUS", 
getDate(9, 9,
                 2001), DateResolution.Day), row, recent));
     }
 
@@ -190,17 +199,17 @@ public class SearchUtilsTest {
     public void testShouldMatchCapsHeaderDateAfter() throws Exception {
         builder.header(DATE_FIELD.toUpperCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2000), DateResolution.Day), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(8,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(8,
                 9, 2001), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2001), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD,
                 getDate(10, 9, 2001), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2002), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter("BOGUS", getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter("BOGUS", 
getDate(9, 9,
                 2001), DateResolution.Day), row, recent));
     }
 
@@ -208,17 +217,17 @@ public class SearchUtilsTest {
     public void testShouldMatchLowersHeaderDateAfter() throws Exception {
         builder.header(DATE_FIELD.toLowerCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2000), DateResolution.Day), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(8,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(8,
                 9, 2001),DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD,
                 getDate(10, 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(9,
                 9, 2002), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter("BOGUS", getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter("BOGUS", 
getDate(9, 9,
                 2001), DateResolution.Day),row, recent));
     }
 
@@ -226,17 +235,17 @@ public class SearchUtilsTest {
     public void testMatchHeaderDateOn() throws Exception {
         builder.header(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2000), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(8, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(8, 9,
                 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(10,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(10,
                 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2002), DateResolution.Day), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn("BOGUS", getDate(9, 9,
+        assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn("BOGUS", 
getDate(9, 9,
                 2001), DateResolution.Day), row, recent));
     }
 
@@ -244,17 +253,17 @@ public class SearchUtilsTest {
     public void testShouldMatchCapsHeaderDateOn() throws Exception {
         builder.header(DATE_FIELD.toUpperCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2000), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(8, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(8, 9,
                 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(10,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(10,
                 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2002), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn("BOGUS", getDate(9, 9,
+        assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn("BOGUS", 
getDate(9, 9,
                 2001), DateResolution.Day),row, recent));
     }
 
@@ -262,17 +271,17 @@ public class SearchUtilsTest {
     public void testShouldMatchLowersHeaderDateOn() throws Exception {
         builder.header(DATE_FIELD.toLowerCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2000), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(8, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(8, 9,
                 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(10,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(10,
                 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(9, 9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(9, 9,
                 2002), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn("BOGUS", getDate(9, 9,
+        assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn("BOGUS", 
getDate(9, 9,
                 2001), DateResolution.Day),row, recent));
     }
 
@@ -280,17 +289,17 @@ public class SearchUtilsTest {
     public void testMatchHeaderDateBefore() throws Exception {
         builder.header(DATE_FIELD.toLowerCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(9, 9, 2000), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(8, 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(9, 9, 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(10, 9, 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD, getDate(9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD, 
getDate(9,
                 9, 2002), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore("BOGUS", getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore("BOGUS", 
getDate(9,
                 9, 2001), DateResolution.Day),row, recent));
     }
 
@@ -298,17 +307,17 @@ public class SearchUtilsTest {
     public void testShouldMatchCapsHeaderDateBefore() throws Exception {
         builder.header(DATE_FIELD.toLowerCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(9, 9, 2000), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(8, 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(9, 9, 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(10, 9, 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD, getDate(9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD, 
getDate(9,
                 9, 2002), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore("BOGUS", getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore("BOGUS", 
getDate(9,
                 9, 2001), DateResolution.Day),row, recent));
     }
 
@@ -316,17 +325,17 @@ public class SearchUtilsTest {
     public void testShouldMatchLowersHeaderDateBefore() throws Exception {
         builder.header(DATE_FIELD.toLowerCase(Locale.US), 
RFC822_SUN_SEP_9TH_2001);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(9, 9, 2000), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(8, 9, 2001), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(9, 9, 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 getDate(10, 9, 2001), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD, getDate(9,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD, 
getDate(9,
                 9, 2002), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore("BOGUS", getDate(9,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore("BOGUS", 
getDate(9,
                 9, 2001), DateResolution.Day),row, recent));
     }
 
@@ -334,15 +343,15 @@ public class SearchUtilsTest {
     public void testMatchHeaderContainsCaps() throws Exception {
         builder.header(SUBJECT_FIELD, TEXT.toUpperCase(Locale.US));
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 RHUBARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 CUSTARD), row, recent));
     }
 
@@ -350,15 +359,15 @@ public class SearchUtilsTest {
     public void testMatchHeaderContainsLowers() throws Exception {
         builder.header(SUBJECT_FIELD, TEXT.toUpperCase(Locale.US));
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 RHUBARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 CUSTARD), row, recent));
     }
 
@@ -366,15 +375,15 @@ public class SearchUtilsTest {
     public void testMatchHeaderContains() throws Exception {
         builder.header(SUBJECT_FIELD, TEXT.toUpperCase(Locale.US));
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 RHUBARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 CUSTARD), row, recent));
     }
 
@@ -382,15 +391,15 @@ public class SearchUtilsTest {
     public void testShouldMatchLowerHeaderContains() throws Exception {
         builder.header(SUBJECT_FIELD.toLowerCase(Locale.US), TEXT);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 RHUBARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 CUSTARD), row, recent));
     }
 
@@ -398,15 +407,15 @@ public class SearchUtilsTest {
     public void testShouldMatchCapsHeaderContains() throws Exception {
         builder.header(SUBJECT_FIELD.toUpperCase(Locale.US), TEXT);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(DATE_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 TEXT), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 RHUBARD), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerContains(SUBJECT_FIELD,
                 CUSTARD), row, recent));
     }
 
@@ -414,9 +423,9 @@ public class SearchUtilsTest {
     public void testMatchHeaderExists() throws Exception {
         builder.header(SUBJECT_FIELD, TEXT);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerExists(DATE_FIELD), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerExists(DATE_FIELD), row,
                 recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
                 row, recent));
     }
 
@@ -424,9 +433,9 @@ public class SearchUtilsTest {
     public void testShouldMatchLowersHeaderExists() throws Exception {
         builder.header(SUBJECT_FIELD.toLowerCase(Locale.US), TEXT);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerExists(DATE_FIELD), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerExists(DATE_FIELD), row,
                 recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
                 row, recent));
     }
 
@@ -434,9 +443,9 @@ public class SearchUtilsTest {
     public void testShouldMatchUppersHeaderExists() throws Exception {
         builder.header(SUBJECT_FIELD.toLowerCase(Locale.US), TEXT);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerExists(DATE_FIELD), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerExists(DATE_FIELD), row,
                 recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
                 row, recent));
     }
 
@@ -444,30 +453,30 @@ public class SearchUtilsTest {
     public void testShouldMatchUidRange() throws Exception {
         builder.setKey(1, MessageUid.of(1729));
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1))), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1728), 
MessageUid.of(1728))), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1))), row, recent));
+        
assertFalse(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1728), 
MessageUid.of(1728))), row,
                 recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1729), 
MessageUid.of(1729))), row,
+        
assertTrue(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1729), 
MessageUid.of(1729))), row,
                 recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1730), 
MessageUid.of(1730))), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1730), 
MessageUid.of(1730))), row,
                 recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1728))), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1728))), row,
                 recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1729))), row,
+        
assertTrue(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1729))), row,
                 recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1729), 
MessageUid.of(1800))), row,
+        
assertTrue(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1729), 
MessageUid.of(1800))), row,
                 recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .uid(range(MessageUid.of(1730), MessageUid.MAX_VALUE)), row, 
recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1730),
+        
assertFalse(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1730),
                 MessageUid.MAX_VALUE, MessageUid.of(1), MessageUid.of(1728))), 
row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1730), 
MessageUid.MAX_VALUE,
+        
assertTrue(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1730), 
MessageUid.MAX_VALUE,
                 MessageUid.of(1), MessageUid.of(1729))), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .uid(range(MessageUid.of(1), MessageUid.of(1728), 
MessageUid.of(1800), MessageUid.of(1810))), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1), MessageUid.of(1729), MessageUid.of(1729))),
+        
assertTrue(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1), MessageUid.of(1729), MessageUid.of(1729))),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1), MessageUid.of(1800), MessageUid.of(1800))),
+        
assertFalse(messageSearches.isMatch(SearchQuery.uid(range(MessageUid.of(1), 
MessageUid.of(1), MessageUid.of(1800), MessageUid.of(1800))),
                 row, recent));
     }
 
@@ -475,17 +484,17 @@ public class SearchUtilsTest {
     public void testShouldMatchSeenFlagSet() throws Exception {
         builder.setFlags(true, false, false, false, false, false);
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
@@ -493,17 +502,17 @@ public class SearchUtilsTest {
     public void testShouldMatchAnsweredFlagSet() throws Exception {
         builder.setFlags(false, false, true, false, false, false);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
                 row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.ANSWERED),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.ANSWERED),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
@@ -511,17 +520,17 @@ public class SearchUtilsTest {
     public void testShouldMatchFlaggedFlagSet() throws Exception {
         builder.setFlags(false, true, false, false, false, false);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
@@ -529,17 +538,17 @@ public class SearchUtilsTest {
     public void testShouldMatchDraftFlagSet() throws Exception {
         builder.setFlags(false, false, false, true, false, false);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsSet(Flags.Flag.ANSWERED), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
@@ -548,17 +557,17 @@ public class SearchUtilsTest {
     public void testShouldMatchDeletedFlagSet() throws Exception {
         builder.setFlags(false, false, false, false, true, false);
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
@@ -567,17 +576,17 @@ public class SearchUtilsTest {
         builder.setFlags(false, false, false, false, false, false);
         MailboxMessage row = builder.build();
         recent.add(row.getUid());
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.DELETED),
                 row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
@@ -586,17 +595,17 @@ public class SearchUtilsTest {
         builder.setFlags(false, true, true, true, true, true);
         MailboxMessage row = builder.build();
         recent.add(row.getUid());
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.FLAGGED), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.DELETED), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.RECENT), row, recent));
     }
 
@@ -605,17 +614,17 @@ public class SearchUtilsTest {
         builder.setFlags(true, true, false, true, true, true);
         MailboxMessage row = builder.build();
         recent.add(row.getUid());
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.FLAGGED), row, recent));
-        assertTrue(new MessageSearches().isMatch(SearchQuery
+        assertTrue(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.DELETED), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.RECENT), row, recent));
     }
 
@@ -624,17 +633,17 @@ public class SearchUtilsTest {
         builder.setFlags(true, false, true, true, true, true);
         MailboxMessage row = builder.build();
         recent.add(row.getUid());
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
-        assertTrue(new MessageSearches().isMatch(
+        assertTrue(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.FLAGGED), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.DELETED), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.RECENT), row, recent));
     }
 
@@ -643,17 +652,17 @@ public class SearchUtilsTest {
         builder.setFlags(true, true, true, false, true, true);
         MailboxMessage row = builder.build();
         recent.add(row.getUid());
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.FLAGGED), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.ANSWERED), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.DELETED), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.RECENT), row, recent));
     }
 
@@ -662,17 +671,17 @@ public class SearchUtilsTest {
         builder.setFlags(true, true, true, true, false, true);
         MailboxMessage row = builder.build();
         recent.add(row.getUid());
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.FLAGGED), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertTrue(new MessageSearches().isMatch(
+        assertTrue(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.DELETED), row, recent));
-        assertFalse(new MessageSearches().isMatch(
+        assertFalse(messageSearches.isMatch(
                 SearchQuery.flagIsUnSet(Flags.Flag.RECENT), row, recent));
     }
 
@@ -681,60 +690,60 @@ public class SearchUtilsTest {
         builder.setFlags(true, true, true, true, true, true);
         MailboxMessage row = builder.build();
         recent.add(row.getUid().next());
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.FLAGGED), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.ANSWERED), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
+        
assertFalse(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.DRAFT),
                 row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .flagIsUnSet(Flags.Flag.DELETED), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.flagIsUnSet(Flags.Flag.RECENT),
+        
assertTrue(messageSearches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.RECENT),
                 row, recent));
     }
 
     @Test
     public void testShouldMatchAll() throws Exception {
         MailboxMessage row = builder.build();
-        assertTrue(new MessageSearches().isMatch(SearchQuery.all(), row, 
recent));
+        assertTrue(messageSearches.isMatch(SearchQuery.all(), row, recent));
     }
 
     @Test
     public void testShouldMatchNot() throws Exception {
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.not(SearchQuery.all()), row,
+        
assertFalse(messageSearches.isMatch(SearchQuery.not(SearchQuery.all()), row,
                 recent));
-        assertTrue(new MessageSearches().isMatch(SearchQuery.not(SearchQuery
+        assertTrue(messageSearches.isMatch(SearchQuery.not(SearchQuery
                 .headerExists(DATE_FIELD)), row, recent));
     }
 
     @Test
     public void testShouldMatchOr() throws Exception {
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.or(SearchQuery.all(),
+        assertTrue(messageSearches.isMatch(SearchQuery.or(SearchQuery.all(),
                 SearchQuery.headerExists(DATE_FIELD)), row, recent));
-        assertTrue(new MessageSearches().isMatch(SearchQuery.or(SearchQuery
+        assertTrue(messageSearches.isMatch(SearchQuery.or(SearchQuery
                 .headerExists(DATE_FIELD), SearchQuery.all()), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .or(SearchQuery.headerExists(DATE_FIELD), SearchQuery
                         .headerExists(DATE_FIELD)), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.or(SearchQuery.all(),
+        assertTrue(messageSearches.isMatch(SearchQuery.or(SearchQuery.all(),
                 SearchQuery.all()), row, recent));
     }
 
     @Test
     public void testShouldMatchAnd() throws Exception {
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.and(SearchQuery.all(),
+        assertFalse(messageSearches.isMatch(SearchQuery.and(SearchQuery.all(),
                 SearchQuery.headerExists(DATE_FIELD)), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery.and(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery.and(SearchQuery
                 .headerExists(DATE_FIELD), SearchQuery.all()), row, recent));
-        assertFalse(new MessageSearches().isMatch(SearchQuery
+        assertFalse(messageSearches.isMatch(SearchQuery
                 .and(SearchQuery.headerExists(DATE_FIELD), SearchQuery
                         .headerExists(DATE_FIELD)), row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.and(SearchQuery.all(),
+        assertTrue(messageSearches.isMatch(SearchQuery.and(SearchQuery.all(),
                 SearchQuery.all()), row, recent));
     }
     
@@ -754,12 +763,12 @@ public class SearchUtilsTest {
     public void testMatchHeaderDateOnWithOffset() throws Exception {
         builder.header(DATE_FIELD, "Mon, 26 Mar 2007 00:00:00 +0300");
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(26, 3,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(26, 3,
                 2007), DateResolution.Day),row, recent));
         
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(25, 3,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(25, 3,
                 2007), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateOn(DATE_FIELD, getDate(27, 3,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 
getDate(27, 3,
                 2007), DateResolution.Day),row, recent));
     }
     
@@ -768,12 +777,12 @@ public class SearchUtilsTest {
     public void testShouldMatchHeaderDateBeforeWithOffset() throws Exception {
         builder.header(DATE_FIELD, "Mon, 26 Mar 2007 00:00:00 +0300");
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD, getDate(26, 
3,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD, 
getDate(26, 3,
                 2007), DateResolution.Day),row, recent));
         
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD, getDate(27, 
3,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD, 
getDate(27, 3,
                 2007), DateResolution.Day),row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateBefore(DATE_FIELD, getDate(25, 
3,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD, 
getDate(25, 3,
                 2007), DateResolution.Day),row, recent));
     }
 
@@ -781,12 +790,12 @@ public class SearchUtilsTest {
     public void testShouldMatchHeaderDateAfterWithOffset() throws Exception {
         builder.header(DATE_FIELD, "Mon, 26 Mar 2007 00:00:00 +0300");
         MailboxMessage row = builder.build();
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(26, 3,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(26, 3,
                 2007), DateResolution.Day),row, recent));
         
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(27, 3,
+        
assertFalse(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(27, 3,
                 2007), DateResolution.Day),row, recent));
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.headerDateAfter(DATE_FIELD, getDate(25, 3,
+        
assertTrue(messageSearches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 
getDate(25, 3,
                 2007), DateResolution.Day),row, recent));
     }
     
@@ -794,8 +803,8 @@ public class SearchUtilsTest {
     public void testShouldMatchAddressHeaderWithComments() throws Exception {
         builder.header("To", "<user-from (comment)@ (comment) domain.org>");
         MailboxMessage row = builder.build();
-        assertTrue(new 
MessageSearches().isMatch(SearchQuery.address(AddressType.To, 
"user-f...@domain.org"), row, recent));
-        assertFalse(new 
MessageSearches().isMatch(SearchQuery.address(AddressType.From, 
"user-f...@domain.org"), row, recent));
+        assertTrue(messageSearches.isMatch(SearchQuery.address(AddressType.To, 
"user-f...@domain.org"), row, recent));
+        
assertFalse(messageSearches.isMatch(SearchQuery.address(AddressType.From, 
"user-f...@domain.org"), row, recent));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d76f8fc4/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index fd9d173..a2686f3 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -22,12 +22,14 @@ package org.apache.james.mailbox.store.search;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
 import javax.mail.Flags;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
@@ -47,10 +49,18 @@ import 
org.apache.james.mailbox.model.SearchQuery.Sort.SortClause;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreMessageManager;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.dom.MessageWriter;
+import org.apache.james.mime4j.dom.Multipart;
+import org.apache.james.mime4j.message.BodyPart;
+import org.apache.james.mime4j.message.BodyPartBuilder;
+import org.apache.james.mime4j.message.DefaultMessageWriter;
+import org.apache.james.mime4j.message.MultipartBuilder;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;
 
 public abstract class AbstractMessageSearchIndexTest {
@@ -208,6 +218,7 @@ public abstract class AbstractMessageSearchIndexTest {
             otherSession,
             RECENT,
             new Flags());
+
         await();
     }
 
@@ -574,7 +585,7 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
-    public void 
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsSeendWhenUsedWithFlagSeen() 
throws MailboxException {
+    public void 
flagIsUnSetShouldReturnUidOfMessageNotMarkedAsSeenWhenUsedWithFlagSeen() throws 
MailboxException {
         // Only message 6 is marked as read.
         SearchQuery searchQuery = new 
SearchQuery(SearchQuery.flagIsUnSet(Flags.Flag.SEEN));
 
@@ -1102,6 +1113,56 @@ public abstract class AbstractMessageSearchIndexTest {
     }
 
     @Test
+    public void 
searchWithTextAttachmentShouldReturnMailsWhenAttachmentContentMatches() throws 
Exception {
+        
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Attachment));
+        ComposedMessageId messageWithBeautifulBananaAsTextAttachment = 
myFolderMessageManager.appendMessage(
+                
ClassLoader.getSystemResourceAsStream("eml/emailWithTextAttachment.eml"),
+                new Date(1404252000000L),
+                session,
+                RECENT,
+                new Flags());
+        await();
+
+        SearchQuery searchQuery = new 
SearchQuery(SearchQuery.attachmentContains("beautiful banana"));
+
+        assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
+            
.containsExactly(messageWithBeautifulBananaAsTextAttachment.getUid());
+    }
+
+    @Test
+    public void 
searchWithPDFAttachmentShouldReturnMailsWhenAttachmentContentMatches() throws 
Exception {
+        
Assume.assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Attachment));
+        byte[] attachmentContent = 
IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/attachment.pdf"));
+        BodyPart attachment = BodyPartBuilder.create()
+                .setBody(attachmentContent, "application/pdf")
+                .setContentDisposition("attachment")
+                .build();
+        BodyPart textPart = BodyPartBuilder.create().setBody("The message has 
a PDF attachment.", "plain", Charsets.UTF_8).build();
+        Multipart multipart = MultipartBuilder.create("mixed")
+                .addBodyPart(attachment)
+                .addBodyPart(textPart)
+                .build();
+        Message message = Message.Builder.of()
+                .setBody(multipart)
+                .build();
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        MessageWriter writer = new DefaultMessageWriter();
+        writer.writeMessage(message, outputStream);
+        ComposedMessageId messageWithBeautifulBananaAsPDFAttachment = 
myFolderMessageManager.appendMessage(
+                new ByteArrayInputStream(outputStream.toByteArray()),
+                new Date(1404252000000L),
+                session,
+                RECENT,
+                new Flags());
+        await();
+
+        SearchQuery searchQuery = new 
SearchQuery(SearchQuery.attachmentContains("beautiful banana"));
+
+        assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
+            
.containsExactly(messageWithBeautifulBananaAsPDFAttachment.getUid());
+    }
+
+    @Test
     public void sortShouldNotDiscardResultWhenSearchingFieldIsIdentical() 
throws Exception {
         SearchQuery searchQuery = new SearchQuery(SearchQuery.all());
         searchQuery.setSorts(ImmutableList.of(new Sort(SortClause.Arrival)));

http://git-wip-us.apache.org/repos/asf/james-project/blob/d76f8fc4/mailbox/store/src/test/resources/eml/attachment.pdf
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/resources/eml/attachment.pdf 
b/mailbox/store/src/test/resources/eml/attachment.pdf
new file mode 100644
index 0000000..6db56a2
Binary files /dev/null and 
b/mailbox/store/src/test/resources/eml/attachment.pdf differ

http://git-wip-us.apache.org/repos/asf/james-project/blob/d76f8fc4/mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml 
b/mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
new file mode 100644
index 0000000..0a487ef
--- /dev/null
+++ b/mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
@@ -0,0 +1,26 @@
+To: James User <u...@james.org>
+From: James Sender <sen...@james.org>
+Subject: Message with text attachment
+Message-ID: <ffaa7bce-fbe3-83b5-de3f-9a7301233...@linagora.com>
+Date: Tue, 5 Sep 2017 09:54:16 +0200
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="------------D24E361990BDBA143D4D8794"
+Content-Language: en-US
+
+This is a multi-part message in MIME format.
+--------------D24E361990BDBA143D4D8794
+Content-Type: text/plain; charset=utf-8; format=flowed
+Content-Transfer-Encoding: 7bit
+
+The message has a text attachment.
+
+--------------D24E361990BDBA143D4D8794
+Content-Type: text/plain; charset=UTF-8;
+ name="attachment.txt"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="attachment.txt"
+
+VGhpcyBpcyBhIGJlYXV0aWZ1bCBiYW5hbmEuCg==
+--------------D24E361990BDBA143D4D8794--


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to