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.util.Date;
20  
21  import static net.sourceforge.domian.specification.SpecificationFactory.greaterThanOrEqualTo;
22  import static net.sourceforge.domian.specification.SpecificationFactory.lessThanOrEqualTo;
23  import static net.sourceforge.domian.test.domain.Testdata.thirtyYearsAgo;
24  import static net.sourceforge.domian.test.domain.Testdata.today;
25  import static net.sourceforge.domian.test.domain.Testdata.tomorrow;
26  import static net.sourceforge.domian.test.domain.Testdata.yesterday;
27  
28  import junit.framework.TestCase;
29  
30  
31  public class ComparableSpecificationTest extends TestCase {
32  
33      public void testShouldNotAcceptNullAsValue() {
34          try {
35              new GreaterThanSpecification<Integer>(null);
36              fail("Should have thrown exception");
37  
38          } catch (IllegalArgumentException e) {
39              String expectedMessage = "Value parameter cannot be null";
40              assertEquals(expectedMessage, e.getMessage());
41          }
42      }
43  
44  
45      public void testGreaterThanOrEqualSpecification_Integer() {
46          Specification<Integer> grThanOrEqInt23 = greaterThanOrEqualTo(23);
47  
48          assertFalse(grThanOrEqInt23.isSatisfiedBy(null));
49          assertFalse(grThanOrEqInt23.isSatisfiedBy(22));
50          assertFalse(grThanOrEqInt23.isSatisfiedBy(new Integer("00022")));
51          assertTrue(grThanOrEqInt23.isSatisfiedBy(23));
52          assertTrue(grThanOrEqInt23.isSatisfiedBy(new Integer("0023")));
53          assertTrue(grThanOrEqInt23.isSatisfiedBy(24));
54          assertTrue(grThanOrEqInt23.isSatisfiedBy(new Integer("00002300")));
55      }
56  
57  
58      public void testGreaterThanOrEqualSpecification_Date() {
59          Specification<Date> spec = greaterThanOrEqualTo(today);
60  
61          assertFalse(spec.isSatisfiedBy(null));
62          assertTrue(spec.isSatisfiedBy(tomorrow));
63          assertTrue(spec.isSatisfiedBy(today));
64          assertFalse(spec.isSatisfiedBy(yesterday));
65          assertFalse(spec.isSatisfiedBy(thirtyYearsAgo));
66      }
67  
68  
69      public void testGreaterThanSpecification_Float() {
70          Specification<Float> grThanOrEqFloat23 = new GreaterThanSpecification<Float>(23.0F);
71  
72          assertFalse(grThanOrEqFloat23.isSatisfiedBy(null));
73          assertFalse(grThanOrEqFloat23.isSatisfiedBy(new Float("22.90")));
74          assertFalse(grThanOrEqFloat23.isSatisfiedBy(new Float("23.00")));
75          assertTrue(grThanOrEqFloat23.isSatisfiedBy(new Float("23.09")));
76      }
77  
78  
79      public void testLessThanOrEqualSpecification_Integer() {
80          Specification<Integer> lessThanOrEqInt23 = lessThanOrEqualTo(23);
81  
82          assertFalse(lessThanOrEqInt23.isSatisfiedBy(null));
83          assertTrue(lessThanOrEqInt23.isSatisfiedBy(22));
84          assertTrue(lessThanOrEqInt23.isSatisfiedBy(new Integer("00022")));
85          assertTrue(lessThanOrEqInt23.isSatisfiedBy(23));
86          assertTrue(lessThanOrEqInt23.isSatisfiedBy(new Integer("0023")));
87          assertFalse(lessThanOrEqInt23.isSatisfiedBy(24));
88          assertFalse(lessThanOrEqInt23.isSatisfiedBy(new Integer("00002300")));
89      }
90  
91  
92      public void testLessThanOrEqualSpecification_Float() {
93          Specification<Float> lessThanOrEqFloat23 = lessThanOrEqualTo(23.0F);
94  
95          assertFalse(lessThanOrEqFloat23.isSatisfiedBy(null));
96          assertTrue(lessThanOrEqFloat23.isSatisfiedBy(new Float("22.90")));
97          assertTrue(lessThanOrEqFloat23.isSatisfiedBy(new Float("23.00")));
98          assertFalse(lessThanOrEqFloat23.isSatisfiedBy(new Float("23.09")));
99      }
100 
101 
102     public void testLessThanSpecification_String() {
103         Specification<String> lessThanUpperCaseA = new LessThanSpecification<String>("A");
104         assertFalse(lessThanUpperCaseA.isSatisfiedBy(null));
105         assertFalse(lessThanUpperCaseA.isSatisfiedBy("A"));
106         assertFalse(lessThanUpperCaseA.isSatisfiedBy("B"));
107         assertFalse(lessThanUpperCaseA.isSatisfiedBy("a"));
108         assertTrue(lessThanUpperCaseA.isSatisfiedBy(""));
109         assertTrue(lessThanUpperCaseA.isSatisfiedBy("         "));
110         assertTrue(lessThanUpperCaseA.isSatisfiedBy(".,"));
111         assertTrue(lessThanUpperCaseA.isSatisfiedBy("?"));
112 
113         Specification<String> lessThanLowerCaseA = new LessThanSpecification<String>("a");
114         assertFalse(lessThanLowerCaseA.isSatisfiedBy(null));
115         assertFalse(lessThanLowerCaseA.isSatisfiedBy("a"));
116 
117         assertFalse(lessThanLowerCaseA.isSatisfiedBy("b"));
118         assertTrue(lessThanLowerCaseA.isSatisfiedBy("A"));
119         assertTrue(lessThanLowerCaseA.isSatisfiedBy("B"));
120         assertTrue(lessThanLowerCaseA.isSatisfiedBy(""));
121         assertTrue(lessThanLowerCaseA.isSatisfiedBy("         "));
122         assertTrue(lessThanLowerCaseA.isSatisfiedBy(".,"));
123         assertTrue(lessThanLowerCaseA.isSatisfiedBy("?"));
124     }
125 
126 
127     public void testLessThanSpecification_Date() {
128         Specification<Date> spec = new LessThanSpecification<Date>(today);
129 
130         assertFalse(spec.isSatisfiedBy(null));
131         assertFalse(spec.isSatisfiedBy(tomorrow));
132         assertTrue(spec.isSatisfiedBy(yesterday));
133         assertTrue(spec.isSatisfiedBy(thirtyYearsAgo));
134     }
135 }