001 /*
002 * Copyright 2001-2005 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.time;
017
018 import junit.framework.TestCase;
019 import junit.framework.TestSuite;
020
021 import org.joda.time.chrono.GJChronology;
022 import org.joda.time.chrono.ISOChronology;
023 import org.joda.time.chrono.JulianChronology;
024 import org.joda.time.field.FieldUtils;
025 import org.joda.time.field.SkipDateTimeField;
026
027 /**
028 * Tests IllegalFieldValueException by triggering it from other methods.
029 *
030 * @author Brian S O'Neill
031 */
032 public class TestIllegalFieldValueException extends TestCase {
033 public static void main(String[] args) {
034 junit.textui.TestRunner.run(suite());
035 }
036
037 public static TestSuite suite() {
038 return new TestSuite(TestIllegalFieldValueException.class);
039 }
040
041 public TestIllegalFieldValueException(String name) {
042 super(name);
043 }
044
045 public void testVerifyValueBounds() {
046 try {
047 FieldUtils.verifyValueBounds(ISOChronology.getInstance().monthOfYear(), -5, 1, 31);
048 fail();
049 } catch (IllegalFieldValueException e) {
050 assertEquals(DateTimeFieldType.monthOfYear(), e.getDateTimeFieldType());
051 assertEquals(null, e.getDurationFieldType());
052 assertEquals("monthOfYear", e.getFieldName());
053 assertEquals(new Integer(-5), e.getIllegalNumberValue());
054 assertEquals(null, e.getIllegalStringValue());
055 assertEquals("-5", e.getIllegalValueAsString());
056 assertEquals(new Integer(1), e.getLowerBound());
057 assertEquals(new Integer(31), e.getUpperBound());
058 }
059
060 try {
061 FieldUtils.verifyValueBounds(DateTimeFieldType.hourOfDay(), 27, 0, 23);
062 fail();
063 } catch (IllegalFieldValueException e) {
064 assertEquals(DateTimeFieldType.hourOfDay(), e.getDateTimeFieldType());
065 assertEquals(null, e.getDurationFieldType());
066 assertEquals("hourOfDay", e.getFieldName());
067 assertEquals(new Integer(27), e.getIllegalNumberValue());
068 assertEquals(null, e.getIllegalStringValue());
069 assertEquals("27", e.getIllegalValueAsString());
070 assertEquals(new Integer(0), e.getLowerBound());
071 assertEquals(new Integer(23), e.getUpperBound());
072 }
073
074 try {
075 FieldUtils.verifyValueBounds("foo", 1, 2, 3);
076 fail();
077 } catch (IllegalFieldValueException e) {
078 assertEquals(null, e.getDateTimeFieldType());
079 assertEquals(null, e.getDurationFieldType());
080 assertEquals("foo", e.getFieldName());
081 assertEquals(new Integer(1), e.getIllegalNumberValue());
082 assertEquals(null, e.getIllegalStringValue());
083 assertEquals("1", e.getIllegalValueAsString());
084 assertEquals(new Integer(2), e.getLowerBound());
085 assertEquals(new Integer(3), e.getUpperBound());
086 }
087 }
088
089 public void testSkipDateTimeField() {
090 DateTimeField field = new SkipDateTimeField
091 (ISOChronology.getInstanceUTC(), ISOChronology.getInstanceUTC().year(), 1970);
092 try {
093 field.set(0, 1970);
094 fail();
095 } catch (IllegalFieldValueException e) {
096 assertEquals(DateTimeFieldType.year(), e.getDateTimeFieldType());
097 assertEquals(null, e.getDurationFieldType());
098 assertEquals("year", e.getFieldName());
099 assertEquals(new Integer(1970), e.getIllegalNumberValue());
100 assertEquals(null, e.getIllegalStringValue());
101 assertEquals("1970", e.getIllegalValueAsString());
102 assertEquals(null, e.getLowerBound());
103 assertEquals(null, e.getUpperBound());
104 }
105 }
106
107 public void testSetText() {
108 try {
109 ISOChronology.getInstanceUTC().year().set(0, null, java.util.Locale.US);
110 fail();
111 } catch (IllegalFieldValueException e) {
112 assertEquals(DateTimeFieldType.year(), e.getDateTimeFieldType());
113 assertEquals(null, e.getDurationFieldType());
114 assertEquals("year", e.getFieldName());
115 assertEquals(null, e.getIllegalNumberValue());
116 assertEquals(null, e.getIllegalStringValue());
117 assertEquals("null", e.getIllegalValueAsString());
118 assertEquals(null, e.getLowerBound());
119 assertEquals(null, e.getUpperBound());
120 }
121
122 try {
123 ISOChronology.getInstanceUTC().year().set(0, "nineteen seventy", java.util.Locale.US);
124 fail();
125 } catch (IllegalFieldValueException e) {
126 assertEquals(DateTimeFieldType.year(), e.getDateTimeFieldType());
127 assertEquals(null, e.getDurationFieldType());
128 assertEquals("year", e.getFieldName());
129 assertEquals(null, e.getIllegalNumberValue());
130 assertEquals("nineteen seventy", e.getIllegalStringValue());
131 assertEquals("nineteen seventy", e.getIllegalValueAsString());
132 assertEquals(null, e.getLowerBound());
133 assertEquals(null, e.getUpperBound());
134 }
135
136 try {
137 ISOChronology.getInstanceUTC().era().set(0, "long ago", java.util.Locale.US);
138 fail();
139 } catch (IllegalFieldValueException e) {
140 assertEquals(DateTimeFieldType.era(), e.getDateTimeFieldType());
141 assertEquals(null, e.getDurationFieldType());
142 assertEquals("era", e.getFieldName());
143 assertEquals(null, e.getIllegalNumberValue());
144 assertEquals("long ago", e.getIllegalStringValue());
145 assertEquals("long ago", e.getIllegalValueAsString());
146 assertEquals(null, e.getLowerBound());
147 assertEquals(null, e.getUpperBound());
148 }
149
150 try {
151 ISOChronology.getInstanceUTC().monthOfYear().set(0, "spring", java.util.Locale.US);
152 fail();
153 } catch (IllegalFieldValueException e) {
154 assertEquals(DateTimeFieldType.monthOfYear(), e.getDateTimeFieldType());
155 assertEquals(null, e.getDurationFieldType());
156 assertEquals("monthOfYear", e.getFieldName());
157 assertEquals(null, e.getIllegalNumberValue());
158 assertEquals("spring", e.getIllegalStringValue());
159 assertEquals("spring", e.getIllegalValueAsString());
160 assertEquals(null, e.getLowerBound());
161 assertEquals(null, e.getUpperBound());
162 }
163
164 try {
165 ISOChronology.getInstanceUTC().dayOfWeek().set(0, "yesterday", java.util.Locale.US);
166 fail();
167 } catch (IllegalFieldValueException e) {
168 assertEquals(DateTimeFieldType.dayOfWeek(), e.getDateTimeFieldType());
169 assertEquals(null, e.getDurationFieldType());
170 assertEquals("dayOfWeek", e.getFieldName());
171 assertEquals(null, e.getIllegalNumberValue());
172 assertEquals("yesterday", e.getIllegalStringValue());
173 assertEquals("yesterday", e.getIllegalValueAsString());
174 assertEquals(null, e.getLowerBound());
175 assertEquals(null, e.getUpperBound());
176 }
177
178 try {
179 ISOChronology.getInstanceUTC().halfdayOfDay().set(0, "morning", java.util.Locale.US);
180 fail();
181 } catch (IllegalFieldValueException e) {
182 assertEquals(DateTimeFieldType.halfdayOfDay(), e.getDateTimeFieldType());
183 assertEquals(null, e.getDurationFieldType());
184 assertEquals("halfdayOfDay", e.getFieldName());
185 assertEquals(null, e.getIllegalNumberValue());
186 assertEquals("morning", e.getIllegalStringValue());
187 assertEquals("morning", e.getIllegalValueAsString());
188 assertEquals(null, e.getLowerBound());
189 assertEquals(null, e.getUpperBound());
190 }
191 }
192
193 public void testZoneTransition() {
194 DateTime dt = new DateTime
195 (2005, 4, 3, 1, 0, 0, 0, DateTimeZone.forID("America/Los_Angeles"));
196 try {
197 dt.hourOfDay().setCopy(2);
198 fail();
199 } catch (IllegalFieldValueException e) {
200 assertEquals(DateTimeFieldType.hourOfDay(), e.getDateTimeFieldType());
201 assertEquals(null, e.getDurationFieldType());
202 assertEquals("hourOfDay", e.getFieldName());
203 assertEquals(new Integer(2), e.getIllegalNumberValue());
204 assertEquals(null, e.getIllegalStringValue());
205 assertEquals("2", e.getIllegalValueAsString());
206 assertEquals(null, e.getLowerBound());
207 assertEquals(null, e.getUpperBound());
208 }
209 }
210
211 public void testJulianYearZero() {
212 DateTime dt = new DateTime(JulianChronology.getInstanceUTC());
213 try {
214 dt.year().setCopy(0);
215 fail();
216 } catch (IllegalFieldValueException e) {
217 assertEquals(DateTimeFieldType.year(), e.getDateTimeFieldType());
218 assertEquals(null, e.getDurationFieldType());
219 assertEquals("year", e.getFieldName());
220 assertEquals(new Integer(0), e.getIllegalNumberValue());
221 assertEquals(null, e.getIllegalStringValue());
222 assertEquals("0", e.getIllegalValueAsString());
223 assertEquals(null, e.getLowerBound());
224 assertEquals(null, e.getUpperBound());
225 }
226 }
227
228 public void testGJCutover() {
229 DateTime dt = new DateTime("1582-10-04", GJChronology.getInstanceUTC());
230 try {
231 dt.dayOfMonth().setCopy(5);
232 fail();
233 } catch (IllegalFieldValueException e) {
234 assertEquals(DateTimeFieldType.dayOfMonth(), e.getDateTimeFieldType());
235 assertEquals(null, e.getDurationFieldType());
236 assertEquals("dayOfMonth", e.getFieldName());
237 assertEquals(new Integer(5), e.getIllegalNumberValue());
238 assertEquals(null, e.getIllegalStringValue());
239 assertEquals("5", e.getIllegalValueAsString());
240 assertEquals(null, e.getLowerBound());
241 assertEquals(null, e.getUpperBound());
242 }
243
244 dt = new DateTime("1582-10-15", GJChronology.getInstanceUTC());
245 try {
246 dt.dayOfMonth().setCopy(14);
247 fail();
248 } catch (IllegalFieldValueException e) {
249 assertEquals(DateTimeFieldType.dayOfMonth(), e.getDateTimeFieldType());
250 assertEquals(null, e.getDurationFieldType());
251 assertEquals("dayOfMonth", e.getFieldName());
252 assertEquals(new Integer(14), e.getIllegalNumberValue());
253 assertEquals(null, e.getIllegalStringValue());
254 assertEquals("14", e.getIllegalValueAsString());
255 assertEquals(null, e.getLowerBound());
256 assertEquals(null, e.getUpperBound());
257 }
258 }
259
260 public void testReadablePartialValidate() {
261 try {
262 new YearMonthDay(1970, -5, 1);
263 fail();
264 } catch (IllegalFieldValueException e) {
265 assertEquals(DateTimeFieldType.monthOfYear(), e.getDateTimeFieldType());
266 assertEquals(null, e.getDurationFieldType());
267 assertEquals("monthOfYear", e.getFieldName());
268 assertEquals(new Integer(-5), e.getIllegalNumberValue());
269 assertEquals(null, e.getIllegalStringValue());
270 assertEquals("-5", e.getIllegalValueAsString());
271 assertEquals(new Integer(1), e.getLowerBound());
272 assertEquals(null, e.getUpperBound());
273 }
274
275 try {
276 new YearMonthDay(1970, 500, 1);
277 fail();
278 } catch (IllegalFieldValueException e) {
279 assertEquals(DateTimeFieldType.monthOfYear(), e.getDateTimeFieldType());
280 assertEquals(null, e.getDurationFieldType());
281 assertEquals("monthOfYear", e.getFieldName());
282 assertEquals(new Integer(500), e.getIllegalNumberValue());
283 assertEquals(null, e.getIllegalStringValue());
284 assertEquals("500", e.getIllegalValueAsString());
285 assertEquals(null, e.getLowerBound());
286 assertEquals(new Integer(12), e.getUpperBound());
287 }
288
289 try {
290 new YearMonthDay(1970, 2, 30);
291 fail();
292 } catch (IllegalFieldValueException e) {
293 assertEquals(DateTimeFieldType.dayOfMonth(), e.getDateTimeFieldType());
294 assertEquals(null, e.getDurationFieldType());
295 assertEquals("dayOfMonth", e.getFieldName());
296 assertEquals(new Integer(30), e.getIllegalNumberValue());
297 assertEquals(null, e.getIllegalStringValue());
298 assertEquals("30", e.getIllegalValueAsString());
299 assertEquals(null, e.getLowerBound());
300 assertEquals(new Integer(28), e.getUpperBound());
301 }
302 }
303
304 // Test extra constructors not currently called by anything
305 public void testOtherConstructors() {
306 IllegalFieldValueException e = new IllegalFieldValueException
307 (DurationFieldType.days(), new Integer(1), new Integer(2), new Integer(3));
308 assertEquals(null, e.getDateTimeFieldType());
309 assertEquals(DurationFieldType.days(), e.getDurationFieldType());
310 assertEquals("days", e.getFieldName());
311 assertEquals(new Integer(1), e.getIllegalNumberValue());
312 assertEquals(null, e.getIllegalStringValue());
313 assertEquals("1", e.getIllegalValueAsString());
314 assertEquals(new Integer(2), e.getLowerBound());
315 assertEquals(new Integer(3), e.getUpperBound());
316
317 e = new IllegalFieldValueException(DurationFieldType.months(), "five");
318 assertEquals(null, e.getDateTimeFieldType());
319 assertEquals(DurationFieldType.months(), e.getDurationFieldType());
320 assertEquals("months", e.getFieldName());
321 assertEquals(null, e.getIllegalNumberValue());
322 assertEquals("five", e.getIllegalStringValue());
323 assertEquals("five", e.getIllegalValueAsString());
324 assertEquals(null, e.getLowerBound());
325 assertEquals(null, e.getUpperBound());
326
327 e = new IllegalFieldValueException("months", "five");
328 assertEquals(null, e.getDateTimeFieldType());
329 assertEquals(null, e.getDurationFieldType());
330 assertEquals("months", e.getFieldName());
331 assertEquals(null, e.getIllegalNumberValue());
332 assertEquals("five", e.getIllegalStringValue());
333 assertEquals("five", e.getIllegalValueAsString());
334 assertEquals(null, e.getLowerBound());
335 assertEquals(null, e.getUpperBound());
336 }
337 }