1   /*
2    * Copyright 2006-2010 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package net.sourceforge.domian.specification;
17  
18  
19  import java.text.ParseException;
20  
21  import static org.junit.Assert.assertEquals;
22  import static org.junit.Assert.assertFalse;
23  import static org.junit.Assert.assertTrue;
24  import static org.junit.Assert.fail;
25  import org.junit.Test;
26  
27  import static net.sourceforge.domian.specification.SpecificationFactory.like;
28  
29  
30  public class WildcardExpressionMatcherStringSpecificationTest {
31  
32      @Test
33      public void shouldNotAcceptNullAsValue() {
34          try {
35              new WildcardExpressionMatcherIgnoreCaseStringSpecification(null);
36              fail("Should have thrown exception");
37  
38          } catch (IllegalArgumentException e) {
39              String expectedMessage = "Regular expression parameter cannot be null";
40              assertEquals(expectedMessage, e.getMessage());
41          }
42      }
43  
44      @Test
45      public void shouldNotAcceptEmptyAsValue() {
46          Specification<String> spec = new WildcardExpressionMatcherStringSpecification("");
47          assertFalse(spec.isSatisfiedBy(null));
48          assertTrue(spec.isSatisfiedBy(""));
49          assertFalse(spec.isSatisfiedBy(" "));
50      }
51  
52      @Test
53      public void shouldNotAcceptBlankAsValue() {
54          Specification<String> spec = new WildcardExpressionMatcherStringSpecification("   ");
55          assertFalse(spec.isSatisfiedBy(null));
56          assertFalse(spec.isSatisfiedBy(""));
57          assertFalse(spec.isSatisfiedBy(" "));
58          assertTrue(spec.isSatisfiedBy("   "));
59          assertFalse(spec.isSatisfiedBy("    "));
60      }
61  
62      @Test
63      public void shouldMatchWildcardExpressions_Plain() {
64          Specification<String> spec = new WildcardExpressionMatcherStringSpecification("Eirik");
65          assertFalse(spec.isSatisfiedBy(null));
66          assertFalse(spec.isSatisfiedBy(""));
67          assertFalse(spec.isSatisfiedBy("     "));
68          assertFalse(spec.isSatisfiedBy("eirik"));
69          assertTrue(spec.isSatisfiedBy("Eirik"));
70      }
71  
72      @Test
73      public void shouldMatchWildcardExpressions_Questions() {
74          Specification<String> spec = new WildcardExpressionMatcherStringSpecification("??");
75          assertFalse(spec.isSatisfiedBy(null));
76          assertFalse(spec.isSatisfiedBy(""));
77          assertTrue(spec.isSatisfiedBy("??"));
78          assertTrue(spec.isSatisfiedBy("yo"));
79          assertTrue(spec.isSatisfiedBy("  "));
80          assertFalse(spec.isSatisfiedBy("     "));
81          assertFalse(spec.isSatisfiedBy("e ri "));
82          assertTrue(spec.isSatisfiedBy("Ei"));
83  
84          spec = new WildcardExpressionMatcherStringSpecification("E?ri?");
85          assertFalse(spec.isSatisfiedBy(null));
86          assertFalse(spec.isSatisfiedBy(""));
87          assertFalse(spec.isSatisfiedBy("     "));
88          assertFalse(spec.isSatisfiedBy("e ri "));
89          assertTrue(spec.isSatisfiedBy("E ri "));
90          assertTrue(spec.isSatisfiedBy("E rik"));
91          assertTrue(spec.isSatisfiedBy("E%rix"));
92          assertFalse(spec.isSatisfiedBy("eirik"));
93          assertTrue(spec.isSatisfiedBy("Eirik"));
94      }
95  
96      @Test
97      public void shouldMatchWildcardExpressions_Stars() {
98          Specification<String> spec = new WildcardExpressionMatcherStringSpecification("*");
99          assertFalse(spec.isSatisfiedBy(null)); // null is never approved
100         assertTrue(spec.isSatisfiedBy(""));
101         assertTrue(spec.isSatisfiedBy("     "));
102         assertTrue(spec.isSatisfiedBy("e ri "));
103         assertTrue(spec.isSatisfiedBy("E ri "));
104         assertTrue(spec.isSatisfiedBy("E rik"));
105         assertTrue(spec.isSatisfiedBy("E%rix"));
106         assertTrue(spec.isSatisfiedBy("eirik"));
107         assertTrue(spec.isSatisfiedBy("Eirik"));
108 
109         spec = new WildcardExpressionMatcherStringSpecification("*i*k");
110         assertFalse(spec.isSatisfiedBy(null));
111         assertFalse(spec.isSatisfiedBy(""));
112         assertFalse(spec.isSatisfiedBy("     "));
113         assertTrue(spec.isSatisfiedBy("ik"));
114         assertFalse(spec.isSatisfiedBy("E ri "));
115         assertTrue(spec.isSatisfiedBy("E rik"));
116         assertTrue(spec.isSatisfiedBy("e%rik"));
117         assertTrue(spec.isSatisfiedBy("eirik"));
118         assertTrue(spec.isSatisfiedBy("Eirik"));
119     }
120 
121     @Test
122     public void testEqual() throws ParseException {
123         Specification actualSpec = like("*T?*r");
124         Specification expectedSpec = like("*T?*r");
125 
126         assertEquals(expectedSpec, actualSpec);
127     }
128 }