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 }