View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.routing.filters;
8   
9   import org.mule.DefaultMuleMessage;
10  import org.mule.api.MuleContext;
11  import org.mule.api.MuleMessage;
12  import org.mule.api.config.MuleConfiguration;
13  import org.mule.api.config.MuleProperties;
14  import org.mule.tck.junit4.AbstractMuleTestCase;
15  
16  import java.util.regex.Pattern;
17  
18  import org.junit.Test;
19  
20  import static org.junit.Assert.assertEquals;
21  import static org.junit.Assert.assertFalse;
22  import static org.junit.Assert.assertNotNull;
23  import static org.junit.Assert.assertNull;
24  import static org.junit.Assert.assertTrue;
25  import static org.mockito.Mockito.mock;
26  import static org.mockito.Mockito.when;
27  
28  public class RegExFilterTestCase extends AbstractMuleTestCase
29  {
30      private static final String PATTERN = "(.*) brown fox";
31  
32      @Test
33      public void testRegexFilterNoPattern()
34      {
35          // start with default
36          RegExFilter filter = new RegExFilter();
37          assertNull(filter.getPattern());
38          assertFalse(filter.accept("No tengo dinero"));
39  
40          // activate a pattern
41          filter.setPattern("(.*) brown fox");
42          assertTrue(filter.accept("The quick brown fox"));
43  
44          // remove pattern again, i.e. block all
45          filter.setPattern(null);
46          assertFalse(filter.accept("oh-oh"));
47      }
48  
49      @Test
50      public void testRegexFilter()
51      {
52          RegExFilter filter = new RegExFilter("The quick (.*)");
53          assertNotNull(filter.getPattern());
54  
55          assertTrue(filter.accept("The quick brown fox"));
56          assertTrue(filter.accept("The quick "));
57  
58          assertFalse(filter.accept("The quickbrown fox"));
59          assertFalse(filter.accept("he quick brown fox"));
60  
61          filter.setPattern("(.*) brown fox");
62          assertTrue(filter.accept("The quick brown fox"));
63          assertTrue(filter.accept(" brown fox"));
64  
65          assertFalse(filter.accept("The quickbrown fox"));
66          assertFalse(filter.accept("The quick brown fo"));
67  
68          filter.setPattern("(.*) brown (.*)");
69          assertTrue(filter.accept("The quick brown fox"));
70          assertTrue(filter.accept("(.*) brown fox"));
71  
72          assertFalse(filter.accept("The quickbrown fox"));
73          assertTrue(filter.accept("The quick brown fo"));
74  
75          filter.setPattern("(.*)");
76          assertTrue(filter.accept("The quick brown fox"));
77      }
78  
79      @Test
80      public void testNullInput()
81      {
82          RegExFilter filter = new RegExFilter("The quick (.*)");
83          assertNotNull(filter.getPattern());
84          assertFalse(filter.accept((Object) null));
85      }
86  
87      @Test
88      public void testMuleMessageInput()
89      {
90          RegExFilter filter = new RegExFilter("The quick (.*)");
91          assertNotNull(filter.getPattern());
92  
93          MuleConfiguration muleConfiguration = mock(MuleConfiguration.class);
94          when(muleConfiguration.isCacheMessageAsBytes()).thenReturn(false);
95          MuleContext muleContext= mock(MuleContext.class);
96          when(muleContext.getConfiguration()).thenReturn(muleConfiguration);
97  
98          MuleMessage message = new DefaultMuleMessage("The quick brown fox", muleContext);
99          assertTrue(filter.accept(message));
100     }
101 
102     @Test
103     public void testByteArrayInput()
104     {
105         System.setProperty(MuleProperties.MULE_ENCODING_SYSTEM_PROPERTY, "UTF-8");
106         RegExFilter filter = new RegExFilter("The quick (.*)");
107         assertNotNull(filter.getPattern());
108 
109         byte[] bytes = "The quick brown fox".getBytes();
110         assertTrue(filter.accept(bytes));
111     }
112 
113     @Test
114     public void testCharArrayInput()
115     {
116         RegExFilter filter = new RegExFilter("The quick (.*)");
117         assertNotNull(filter.getPattern());
118 
119         char[] chars = "The quick brown fox".toCharArray();
120         assertTrue(filter.accept(chars));
121     }
122 
123     @Test
124     public void testEqualsWithSamePattern()
125     {
126         RegExFilter filter1 = new RegExFilter(PATTERN);
127         RegExFilter filter2 = new RegExFilter(PATTERN);
128         assertEquals(filter1, filter2);
129     }
130 
131     @Test
132     public void testEqualsWithDifferentPattern()
133     {
134         RegExFilter filter1 = new RegExFilter("foo");
135         RegExFilter filter2 = new RegExFilter("bar");
136         assertFalse(filter1.equals(filter2));
137     }
138 
139     @Test
140     public void testEqualsWithEqualPatternAndDifferentFlags()
141     {
142         RegExFilter filter1 = new RegExFilter(PATTERN, Pattern.DOTALL);
143         RegExFilter filter2 = new RegExFilter(PATTERN, Pattern.CASE_INSENSITIVE);
144         assertFalse(filter1.equals(filter2));
145 
146         filter1 = new RegExFilter(PATTERN, Pattern.DOTALL);
147         filter2 = new RegExFilter(PATTERN, Pattern.DOTALL);
148         assertEquals(filter1, filter2);
149     }
150 }