1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sourceforge.domian.specification;
17
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertSame;
22 import static org.junit.Assert.assertTrue;
23 import static org.junit.Assert.fail;
24 import org.junit.Test;
25
26
27 public class DateStringSpecificationTest {
28
29 final static String nullString = null;
30 final static String emptyString = "";
31 final static String blankString = " ";
32 final static String whitespaceString = "\t\r\n";
33
34 final static String nonNumericDateString1 = "ddMMyyyy";
35 final static String nonNumericDateString2 = "01MM2007";
36 final static String nonNumericDateString3 = "0101yyyy";
37 final static String nonNumericDateString4 = "0a0b200c";
38 final static String nonNumericDateString5 = "010b200c";
39 final static String nonNumericDateString6 = "0a012007";
40 final static String nonNumericDateString7 = "0101200c";
41 final static String nonNumericDateString8 = "0101.2007";
42 final static String tooShortDateString = "0101200";
43 final static String tooLongDateString = "010120000";
44 final static String highDateString1 = "32032007";
45 final static String highDateString2 = "31042007";
46 final static String highMonthString = "01132007";
47 final static String illegalLeapYearDateString = "29022007";
48
49 final static String okDateString = "01012007";
50
51
52 @Test
53 public void shouldNotAcceptNullDatePattern() {
54 try {
55 new DateStringSpecification(nullString);
56 fail("Should have thrown exception");
57
58 } catch (IllegalArgumentException e) {
59 String expectedMessage = "Date pattern parameter cannot be null";
60 assertEquals(expectedMessage, e.getMessage());
61 }
62 }
63
64
65 @Test
66 public void shouldNotAcceptEmptyDatePattern() {
67 try {
68 new DateStringSpecification(emptyString);
69 fail("Should have thrown exception");
70
71 } catch (IllegalArgumentException e) {
72 String expectedMessage = "Date pattern parameter cannot be empty";
73 assertEquals(expectedMessage, e.getMessage());
74 }
75 }
76
77
78 @Test
79 public void shouldNotAcceptBlankDatePattern() {
80 try {
81 new DateStringSpecification(blankString);
82 fail("Should have thrown exception");
83
84 } catch (IllegalArgumentException e) {
85 String expectedMessage = "Date pattern parameter cannot be blank";
86 assertEquals(expectedMessage, e.getMessage());
87 }
88 }
89
90
91 @Test
92 public void shouldNotAcceptIllegalDatePattern() {
93 try {
94 new DateStringSpecification("abc");
95 fail("Should have thrown exception");
96
97 } catch (IllegalArgumentException e) {
98 String expectedMessage = "\"abc\" is not a valid date pattern";
99 assertEquals(expectedMessage, e.getMessage());
100 }
101 }
102
103
104 @Test
105 public void testSpecificationType() {
106 Specification<String> spec = new DateStringSpecification(okDateString);
107 assertSame(String.class, spec.getType());
108
109 assertSame(String.class, new DateStringSpecification(okDateString).getType());
110 }
111
112
113 @Test
114 public void testGetDatePattern() {
115 DateStringSpecification spec = new DateStringSpecification("ddMMyyyy");
116 assertSame(String.class, spec.getType());
117 assertEquals("ddMMyyyy", spec.getValue());
118 }
119
120
121 @Test
122 public void testDateStringSpecification() {
123 Specification<String> spec = new DateStringSpecification("ddMMyyyy");
124
125 assertFalse(spec.isSatisfiedBy(nullString));
126 assertFalse(spec.isSatisfiedBy(emptyString));
127 assertFalse(spec.isSatisfiedBy(blankString));
128 assertFalse(spec.isSatisfiedBy(whitespaceString));
129 assertFalse(spec.isSatisfiedBy(nonNumericDateString1));
130 assertFalse(spec.isSatisfiedBy(nonNumericDateString2));
131 assertFalse(spec.isSatisfiedBy(nonNumericDateString3));
132 assertFalse(spec.isSatisfiedBy(nonNumericDateString4));
133 assertFalse(spec.isSatisfiedBy(nonNumericDateString5));
134 assertFalse(spec.isSatisfiedBy(nonNumericDateString6));
135 assertFalse(spec.isSatisfiedBy(nonNumericDateString7));
136 assertFalse(spec.isSatisfiedBy(nonNumericDateString8));
137 assertFalse(spec.isSatisfiedBy(tooShortDateString));
138 assertFalse(spec.isSatisfiedBy(tooLongDateString));
139 assertFalse(spec.isSatisfiedBy(highDateString1));
140 assertFalse(spec.isSatisfiedBy(highDateString2));
141 assertFalse(spec.isSatisfiedBy(highMonthString));
142 assertFalse(spec.isSatisfiedBy(illegalLeapYearDateString));
143
144 assertTrue(spec.isSatisfiedBy(okDateString));
145 }
146
147
148 @Test
149 public void testDateStringSpecificationWithDatePatternContainingCharacters() {
150 Specification<String> spec = new DateStringSpecification("yyyy.MM.dd");
151 assertFalse(spec.isSatisfiedBy(nullString));
152 assertFalse(spec.isSatisfiedBy(emptyString));
153 assertFalse(spec.isSatisfiedBy(blankString));
154 assertFalse(spec.isSatisfiedBy(whitespaceString));
155 assertFalse(spec.isSatisfiedBy(nonNumericDateString1));
156 assertFalse(spec.isSatisfiedBy(nonNumericDateString2));
157 assertFalse(spec.isSatisfiedBy(nonNumericDateString3));
158 assertFalse(spec.isSatisfiedBy(nonNumericDateString4));
159 assertFalse(spec.isSatisfiedBy(nonNumericDateString5));
160 assertFalse(spec.isSatisfiedBy(nonNumericDateString6));
161 assertFalse(spec.isSatisfiedBy(nonNumericDateString7));
162 assertFalse(spec.isSatisfiedBy(nonNumericDateString8));
163 assertFalse(spec.isSatisfiedBy(tooShortDateString));
164 assertFalse(spec.isSatisfiedBy(tooLongDateString));
165 assertFalse(spec.isSatisfiedBy(highDateString1));
166 assertFalse(spec.isSatisfiedBy(highDateString2));
167 assertFalse(spec.isSatisfiedBy(highMonthString));
168 assertFalse(spec.isSatisfiedBy(illegalLeapYearDateString));
169 assertTrue(spec.isSatisfiedBy("2007.10.25"));
170
171 spec = new DateStringSpecification("yyyy-MM-dd");
172 assertTrue(spec.isSatisfiedBy("2007-10-25"));
173
174 spec = new DateStringSpecification("yyyy/MM/dd");
175 assertTrue(spec.isSatisfiedBy("2007/10/25"));
176 }
177
178
179 @Test
180 public void testDateStringSpecification_YearFrom1To9() {
181 Specification<String> spec = new DateStringSpecification("y.MM.dd");
182 assertFalse(spec.isSatisfiedBy("0.10.25"));
183 assertTrue(spec.isSatisfiedBy("2.10.25"));
184 }
185
186
187
188 public void XtestDateStringSpecification_YearFrom10To99() {
189 Specification<String> spec = new DateStringSpecification("yyyy/MM/dd");
190 assertFalse(spec.isSatisfiedBy("99.10.25"));
191 assertTrue(spec.isSatisfiedBy("99/10/25"));
192
193 spec = new DateStringSpecification("yy/MM/dd");
194 assertFalse(spec.isSatisfiedBy("99.10.25"));
195 assertTrue(spec.isSatisfiedBy("99/10/25"));
196
197 spec = new DateStringSpecification("yy/MM/dd");
198 assertFalse(spec.isSatisfiedBy("0099.10.25"));
199 assertTrue(spec.isSatisfiedBy("0099/10/25"));
200 }
201
202
203 @Test
204 public void testDateStringSpecification_YearFrom100To999() {
205 Specification<String> spec = new DateStringSpecification("yyy.MM.dd");
206 assertTrue(spec.isSatisfiedBy("200.10.25"));
207 }
208
209
210 @Test
211 public void testDateStringSpecification_YearFrom10000To99999() {
212 Specification<String> spec = new DateStringSpecification("yyyyy-MM-dd");
213 assertTrue(spec.isSatisfiedBy("10000-10-25"));
214 }
215 }