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 net.sourceforge.domian.test.domain.Customer;
20  
21  import junit.framework.TestCase;
22  
23  
24  public class EnumNameStringSpecificationTest extends TestCase {
25  
26      final static String maleGenderString = Customer.Gender.MALE.name();
27      final static String femaleGenderString = Customer.Gender.FEMALE.name();
28      final static String mixedCaseMaleGenderString = "MaLe";
29      final static String mixedCaseFemaleGenderString = "fEmALe";
30      final static String lowercaseMaleGenderString = Customer.Gender.MALE.name().toLowerCase();
31      final static String lowercaseMFemaleGenderString = Customer.Gender.FEMALE.name().toLowerCase();
32      final static String almostMaleGenderString = "MALLE";
33      final static String almostFemaleGenderString = "FEEMALE";
34  
35      final static Specification rawSpec = new EnumNameStringSpecification(Customer.Gender.class);
36      final static Specification<String> spec = new EnumNameStringSpecification<Customer.Gender>(Customer.Gender.class);
37      final static Specification<String> notEnumTypeSpec = new EnumNameStringSpecification(Customer.class);
38  
39  
40      public void testRawEnumSpecificationShouldNotBeSatisfiedByBlankStrings() {
41          assertFalse(rawSpec.isSatisfiedBy(null));
42  
43          assertFalse(rawSpec.isSatisfiedBy(""));
44          assertFalse(rawSpec.isSatisfiedBy("   "));
45          assertFalse(rawSpec.isSatisfiedBy("\n"));
46          assertFalse(rawSpec.isSatisfiedBy("\r"));
47          assertFalse(rawSpec.isSatisfiedBy("\t"));
48          assertFalse(rawSpec.isSatisfiedBy("\r\n"));
49          assertFalse(rawSpec.isSatisfiedBy("\r\n\t"));
50  
51          assertFalse(rawSpec.isSatisfiedBy("."));
52          assertFalse(rawSpec.isSatisfiedBy("x"));
53      }
54  
55  
56      public void testShouldNotBeSatisfiedByBlankStrings() {
57          assertFalse(spec.isSatisfiedBy(null));
58  
59          assertFalse(spec.isSatisfiedBy(""));
60          assertFalse(spec.isSatisfiedBy("   "));
61          assertFalse(spec.isSatisfiedBy("\n"));
62          assertFalse(spec.isSatisfiedBy("\r"));
63          assertFalse(spec.isSatisfiedBy("\t"));
64          assertFalse(spec.isSatisfiedBy("\r\n"));
65          assertFalse(spec.isSatisfiedBy("\r\n\t"));
66  
67          assertFalse(spec.isSatisfiedBy("."));
68          assertFalse(spec.isSatisfiedBy("x"));
69      }
70  
71  
72      public void testNotEnumSpecificationShouldNotBeSatisfiedByBlankStrings() {
73          assertFalse(notEnumTypeSpec.isSatisfiedBy(null));
74  
75          assertFalse(notEnumTypeSpec.isSatisfiedBy(""));
76          assertFalse(notEnumTypeSpec.isSatisfiedBy("   "));
77          assertFalse(notEnumTypeSpec.isSatisfiedBy("\n"));
78          assertFalse(notEnumTypeSpec.isSatisfiedBy("\r"));
79          assertFalse(notEnumTypeSpec.isSatisfiedBy("\t"));
80          assertFalse(notEnumTypeSpec.isSatisfiedBy("\r\n"));
81          assertFalse(notEnumTypeSpec.isSatisfiedBy("\r\n\t"));
82  
83          assertFalse(notEnumTypeSpec.isSatisfiedBy("."));
84          assertFalse(notEnumTypeSpec.isSatisfiedBy("x"));
85      }
86  
87  
88      public void testRawEnumSpecificationShouldBeSatisfiedByEnumStrings() {
89          assertTrue(rawSpec.isSatisfiedBy(maleGenderString));
90          assertTrue(rawSpec.isSatisfiedBy(femaleGenderString));
91          assertTrue(rawSpec.isSatisfiedBy(lowercaseMaleGenderString));
92          assertTrue(rawSpec.isSatisfiedBy(lowercaseMFemaleGenderString));
93          assertTrue(rawSpec.isSatisfiedBy(mixedCaseMaleGenderString));
94          assertTrue(rawSpec.isSatisfiedBy(mixedCaseFemaleGenderString));
95  
96          assertFalse(rawSpec.isSatisfiedBy(almostMaleGenderString));
97          assertFalse(rawSpec.isSatisfiedBy(almostFemaleGenderString));
98      }
99  
100 
101     public void testShouldBeSatisfiedByEnumStrings() {
102         assertTrue(spec.isSatisfiedBy(maleGenderString));
103         assertTrue(spec.isSatisfiedBy(femaleGenderString));
104         assertTrue(spec.isSatisfiedBy(lowercaseMaleGenderString));
105         assertTrue(spec.isSatisfiedBy(lowercaseMFemaleGenderString));
106         assertTrue(spec.isSatisfiedBy(mixedCaseMaleGenderString));
107         assertTrue(spec.isSatisfiedBy(mixedCaseFemaleGenderString));
108 
109         assertFalse(spec.isSatisfiedBy(almostMaleGenderString));
110         assertFalse(spec.isSatisfiedBy(almostFemaleGenderString));
111     }
112 
113 
114     public void testNotEnumSpecificationShouldNotBeSatisfiedByAnything() {
115         assertFalse(notEnumTypeSpec.isSatisfiedBy(maleGenderString));
116         assertFalse(notEnumTypeSpec.isSatisfiedBy(femaleGenderString));
117         assertFalse(notEnumTypeSpec.isSatisfiedBy(lowercaseMaleGenderString));
118         assertFalse(notEnumTypeSpec.isSatisfiedBy(lowercaseMFemaleGenderString));
119         assertFalse(notEnumTypeSpec.isSatisfiedBy(mixedCaseMaleGenderString));
120         assertFalse(notEnumTypeSpec.isSatisfiedBy(mixedCaseFemaleGenderString));
121 
122         assertFalse(notEnumTypeSpec.isSatisfiedBy(almostMaleGenderString));
123         assertFalse(notEnumTypeSpec.isSatisfiedBy(almostFemaleGenderString));
124     }
125 
126 
127     public void testGetType() {
128         assertEquals(String.class, spec.getType());
129     }
130 
131 
132     public void testEnumType() {
133         assertEquals(Customer.Gender.class, ((EnumNameStringSpecification) spec).getEnumType());
134     }
135 }