1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.ByteArrayOutputStream;
20 import java.io.ObjectInputStream;
21 import java.io.ObjectOutputStream;
22 import java.util.Arrays;
23 import java.util.Calendar;
24 import java.util.Date;
25 import java.util.GregorianCalendar;
26 import java.util.Locale;
27 import java.util.SimpleTimeZone;
28 import java.util.TimeZone;
29
30 import junit.framework.TestCase;
31 import junit.framework.TestSuite;
32
33 import org.joda.time.chrono.BuddhistChronology;
34 import org.joda.time.chrono.CopticChronology;
35 import org.joda.time.chrono.GJChronology;
36 import org.joda.time.chrono.GregorianChronology;
37 import org.joda.time.chrono.ISOChronology;
38 import org.joda.time.format.DateTimeFormat;
39 import org.joda.time.format.DateTimeFormatter;
40
41
42
43
44
45
46 public class TestLocalDateTime_Basics extends TestCase {
47
48 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
49 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
50 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
51 private static final int OFFSET = 1;
52 private static final GJChronology GJ_UTC = GJChronology.getInstanceUTC();
53 private static final Chronology COPTIC_PARIS = CopticChronology.getInstance(PARIS);
54 private static final Chronology COPTIC_LONDON = CopticChronology.getInstance(LONDON);
55 private static final Chronology COPTIC_TOKYO = CopticChronology.getInstance(TOKYO);
56 private static final Chronology COPTIC_UTC = CopticChronology.getInstanceUTC();
57 private static final Chronology ISO_PARIS = ISOChronology.getInstance(PARIS);
58 private static final Chronology ISO_LONDON = ISOChronology.getInstance(LONDON);
59 private static final Chronology ISO_TOKYO = ISOChronology.getInstance(TOKYO);
60 private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC();
61 private static final Chronology GREGORIAN_UTC = GregorianChronology.getInstanceUTC();
62 private static final Chronology BUDDHIST_PARIS = BuddhistChronology.getInstance(PARIS);
63 private static final Chronology BUDDHIST_LONDON = BuddhistChronology.getInstance(LONDON);
64 private static final Chronology BUDDHIST_TOKYO = BuddhistChronology.getInstance(TOKYO);
65 private static final Chronology BUDDHIST_UTC = BuddhistChronology.getInstanceUTC();
66
67
68
69
70
71
72
73
74
75
76
77 private int MILLIS_OF_DAY_UTC =
78 (int) (10L * DateTimeConstants.MILLIS_PER_HOUR
79 + 20L * DateTimeConstants.MILLIS_PER_MINUTE
80 + 30L * DateTimeConstants.MILLIS_PER_SECOND
81 + 40L);
82
83 private long TEST_TIME_NOW_UTC =
84 (31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY + MILLIS_OF_DAY_UTC;
85
86 private DateTimeZone zone = null;
87
88 private Locale systemDefaultLocale = null;
89
90 public static void main(String[] args) {
91 junit.textui.TestRunner.run(suite());
92 }
93
94 public static TestSuite suite() {
95 return new TestSuite(TestLocalDateTime_Basics.class);
96 }
97
98 public TestLocalDateTime_Basics(String name) {
99 super(name);
100 }
101
102 protected void setUp() throws Exception {
103 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW_UTC);
104 zone = DateTimeZone.getDefault();
105 DateTimeZone.setDefault(LONDON);
106 systemDefaultLocale = Locale.getDefault();
107 Locale.setDefault(Locale.ENGLISH);
108 }
109
110 protected void tearDown() throws Exception {
111 DateTimeUtils.setCurrentMillisSystem();
112 DateTimeZone.setDefault(zone);
113 zone = null;
114 Locale.setDefault(systemDefaultLocale);
115 systemDefaultLocale = null;
116 }
117
118
119 public void testGet_DateTimeFieldType() {
120 LocalDateTime test = new LocalDateTime(1970, 6, 9, 10, 20, 30, 40);
121 assertEquals(1970, test.get(DateTimeFieldType.year()));
122 assertEquals(6, test.get(DateTimeFieldType.monthOfYear()));
123 assertEquals(9, test.get(DateTimeFieldType.dayOfMonth()));
124 assertEquals(2, test.get(DateTimeFieldType.dayOfWeek()));
125 assertEquals(160, test.get(DateTimeFieldType.dayOfYear()));
126 assertEquals(24, test.get(DateTimeFieldType.weekOfWeekyear()));
127 assertEquals(1970, test.get(DateTimeFieldType.weekyear()));
128 assertEquals(10, test.get(DateTimeFieldType.hourOfDay()));
129 assertEquals(20, test.get(DateTimeFieldType.minuteOfHour()));
130 assertEquals(30, test.get(DateTimeFieldType.secondOfMinute()));
131 assertEquals(40, test.get(DateTimeFieldType.millisOfSecond()));
132 assertEquals(MILLIS_OF_DAY_UTC / 60000 , test.get(DateTimeFieldType.minuteOfDay()));
133 assertEquals(MILLIS_OF_DAY_UTC / 1000 , test.get(DateTimeFieldType.secondOfDay()));
134 assertEquals(MILLIS_OF_DAY_UTC , test.get(DateTimeFieldType.millisOfDay()));
135 assertEquals(10, test.get(DateTimeFieldType.hourOfHalfday()));
136 assertEquals(DateTimeConstants.AM, test.get(DateTimeFieldType.halfdayOfDay()));
137
138 test = new LocalDateTime(1970, 6, 9, 12, 30);
139 assertEquals(0, test.get(DateTimeFieldType.hourOfHalfday()));
140 assertEquals(12, test.get(DateTimeFieldType.clockhourOfHalfday()));
141 assertEquals(12, test.get(DateTimeFieldType.clockhourOfDay()));
142 assertEquals(DateTimeConstants.PM, test.get(DateTimeFieldType.halfdayOfDay()));
143 test = new LocalDateTime(1970, 6, 9, 14, 30);
144 assertEquals(2, test.get(DateTimeFieldType.hourOfHalfday()));
145 assertEquals(2, test.get(DateTimeFieldType.clockhourOfHalfday()));
146 assertEquals(14, test.get(DateTimeFieldType.clockhourOfDay()));
147 assertEquals(DateTimeConstants.PM, test.get(DateTimeFieldType.halfdayOfDay()));
148 test = new LocalDateTime(1970, 6, 9, 0, 30);
149 assertEquals(0, test.get(DateTimeFieldType.hourOfHalfday()));
150 assertEquals(12, test.get(DateTimeFieldType.clockhourOfHalfday()));
151 assertEquals(24, test.get(DateTimeFieldType.clockhourOfDay()));
152 assertEquals(DateTimeConstants.AM, test.get(DateTimeFieldType.halfdayOfDay()));
153 try {
154 test.get(null);
155 fail();
156 } catch (IllegalArgumentException ex) {}
157 }
158
159 public void testSize() {
160 LocalDateTime test = new LocalDateTime();
161 assertEquals(4, test.size());
162 }
163
164 public void testGetFieldType_int() {
165 LocalDateTime test = new LocalDateTime(COPTIC_PARIS);
166 assertSame(DateTimeFieldType.year(), test.getFieldType(0));
167 assertSame(DateTimeFieldType.monthOfYear(), test.getFieldType(1));
168 assertSame(DateTimeFieldType.dayOfMonth(), test.getFieldType(2));
169 assertSame(DateTimeFieldType.millisOfDay(), test.getFieldType(3));
170 try {
171 test.getFieldType(-1);
172 } catch (IndexOutOfBoundsException ex) {}
173 try {
174 test.getFieldType(3);
175 } catch (IndexOutOfBoundsException ex) {}
176 }
177
178 public void testGetFieldTypes() {
179 LocalDateTime test = new LocalDateTime(COPTIC_PARIS);
180 DateTimeFieldType[] fields = test.getFieldTypes();
181 assertSame(DateTimeFieldType.year(), fields[0]);
182 assertSame(DateTimeFieldType.monthOfYear(), fields[1]);
183 assertSame(DateTimeFieldType.dayOfMonth(), fields[2]);
184 assertSame(DateTimeFieldType.millisOfDay(), fields[3]);
185 assertNotSame(test.getFieldTypes(), test.getFieldTypes());
186 }
187
188 public void testGetField_int() {
189 LocalDateTime test = new LocalDateTime(COPTIC_PARIS);
190 assertSame(COPTIC_UTC.year(), test.getField(0));
191 assertSame(COPTIC_UTC.monthOfYear(), test.getField(1));
192 assertSame(COPTIC_UTC.dayOfMonth(), test.getField(2));
193 assertSame(COPTIC_UTC.millisOfDay(), test.getField(3));
194 try {
195 test.getField(-1);
196 } catch (IndexOutOfBoundsException ex) {}
197 try {
198 test.getField(3);
199 } catch (IndexOutOfBoundsException ex) {}
200 }
201
202 public void testGetFields() {
203 LocalDateTime test = new LocalDateTime(COPTIC_PARIS);
204 DateTimeField[] fields = test.getFields();
205 assertSame(COPTIC_UTC.year(), fields[0]);
206 assertSame(COPTIC_UTC.monthOfYear(), fields[1]);
207 assertSame(COPTIC_UTC.dayOfMonth(), fields[2]);
208 assertSame(COPTIC_UTC.millisOfDay(), fields[3]);
209 assertNotSame(test.getFields(), test.getFields());
210 }
211
212 public void testGetValue_int() {
213 LocalDateTime test = new LocalDateTime(ISO_UTC);
214 assertEquals(1970, test.getValue(0));
215 assertEquals(6, test.getValue(1));
216 assertEquals(9, test.getValue(2));
217 assertEquals(MILLIS_OF_DAY_UTC, test.getValue(3));
218 try {
219 test.getValue(-1);
220 } catch (IndexOutOfBoundsException ex) {}
221 try {
222 test.getValue(3);
223 } catch (IndexOutOfBoundsException ex) {}
224 }
225
226 public void testGetValues() {
227 LocalDateTime test = new LocalDateTime(ISO_UTC);
228 int[] values = test.getValues();
229 assertEquals(1970, values[0]);
230 assertEquals(6, values[1]);
231 assertEquals(9, values[2]);
232 assertEquals(MILLIS_OF_DAY_UTC, values[3]);
233 assertNotSame(test.getValues(), test.getValues());
234 }
235
236 public void testIsSupported_DateTimeFieldType() {
237 LocalDateTime test = new LocalDateTime();
238 assertEquals(true, test.isSupported(DateTimeFieldType.year()));
239 assertEquals(true, test.isSupported(DateTimeFieldType.monthOfYear()));
240 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfMonth()));
241 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfWeek()));
242 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfYear()));
243 assertEquals(true, test.isSupported(DateTimeFieldType.weekOfWeekyear()));
244 assertEquals(true, test.isSupported(DateTimeFieldType.weekyear()));
245 assertEquals(true, test.isSupported(DateTimeFieldType.yearOfCentury()));
246 assertEquals(true, test.isSupported(DateTimeFieldType.yearOfEra()));
247 assertEquals(true, test.isSupported(DateTimeFieldType.centuryOfEra()));
248 assertEquals(true, test.isSupported(DateTimeFieldType.weekyearOfCentury()));
249 assertEquals(true, test.isSupported(DateTimeFieldType.era()));
250
251 assertEquals(true, test.isSupported(DateTimeFieldType.hourOfDay()));
252 assertEquals(true, test.isSupported(DateTimeFieldType.minuteOfHour()));
253 assertEquals(true, test.isSupported(DateTimeFieldType.secondOfMinute()));
254 assertEquals(true, test.isSupported(DateTimeFieldType.millisOfSecond()));
255 assertEquals(true, test.isSupported(DateTimeFieldType.minuteOfDay()));
256 assertEquals(true, test.isSupported(DateTimeFieldType.secondOfDay()));
257 assertEquals(true, test.isSupported(DateTimeFieldType.millisOfDay()));
258 assertEquals(true, test.isSupported(DateTimeFieldType.hourOfHalfday()));
259 assertEquals(true, test.isSupported(DateTimeFieldType.halfdayOfDay()));
260 assertEquals(true, test.isSupported(DateTimeFieldType.clockhourOfHalfday()));
261 assertEquals(true, test.isSupported(DateTimeFieldType.clockhourOfDay()));
262
263 assertEquals(false, test.isSupported((DateTimeFieldType) null));
264 }
265
266 public void testIsSupported_DurationFieldType() {
267 LocalDateTime test = new LocalDateTime();
268 assertEquals(false, test.isSupported(DurationFieldType.eras()));
269 assertEquals(true, test.isSupported(DurationFieldType.centuries()));
270 assertEquals(true, test.isSupported(DurationFieldType.years()));
271 assertEquals(true, test.isSupported(DurationFieldType.months()));
272 assertEquals(true, test.isSupported(DurationFieldType.weekyears()));
273 assertEquals(true, test.isSupported(DurationFieldType.weeks()));
274 assertEquals(true, test.isSupported(DurationFieldType.days()));
275
276 assertEquals(true, test.isSupported(DurationFieldType.hours()));
277 assertEquals(true, test.isSupported(DurationFieldType.minutes()));
278 assertEquals(true, test.isSupported(DurationFieldType.seconds()));
279 assertEquals(true, test.isSupported(DurationFieldType.millis()));
280 assertEquals(true, test.isSupported(DurationFieldType.halfdays()));
281
282 assertEquals(false, test.isSupported((DurationFieldType) null));
283 }
284
285 public void testEqualsHashCode() {
286 LocalDateTime test1 = new LocalDateTime(1970, 6, 9, 10, 20, 30, 40, COPTIC_PARIS);
287 LocalDateTime test2 = new LocalDateTime(1970, 6, 9, 10, 20, 30, 40, COPTIC_PARIS);
288 assertEquals(true, test1.equals(test2));
289 assertEquals(true, test2.equals(test1));
290 assertEquals(true, test1.equals(test1));
291 assertEquals(true, test2.equals(test2));
292 assertEquals(true, test1.hashCode() == test2.hashCode());
293 assertEquals(true, test1.hashCode() == test1.hashCode());
294 assertEquals(true, test2.hashCode() == test2.hashCode());
295
296 LocalDateTime test3 = new LocalDateTime(1971, 6, 9, 10, 20, 30, 40);
297 assertEquals(false, test1.equals(test3));
298 assertEquals(false, test2.equals(test3));
299 assertEquals(false, test3.equals(test1));
300 assertEquals(false, test3.equals(test2));
301 assertEquals(false, test1.hashCode() == test3.hashCode());
302 assertEquals(false, test2.hashCode() == test3.hashCode());
303
304 assertEquals(false, test1.equals("Hello"));
305 assertEquals(true, test1.equals(new MockInstant()));
306 Partial partial = new Partial(
307 new DateTimeFieldType[] {
308 DateTimeFieldType.year(), DateTimeFieldType.monthOfYear(),
309 DateTimeFieldType.dayOfMonth(), DateTimeFieldType.millisOfDay()},
310 new int[] {1970, 6, 9, MILLIS_OF_DAY_UTC}, COPTIC_PARIS);
311 assertEquals(true, test1.equals(partial));
312 assertEquals(true, test1.hashCode() == partial.hashCode());
313 assertEquals(false, test1.equals(MockPartial.EMPTY_INSTANCE));
314 }
315
316 class MockInstant extends MockPartial {
317 public Chronology getChronology() {
318 return COPTIC_UTC;
319 }
320 public DateTimeField[] getFields() {
321 return new DateTimeField[] {
322 COPTIC_UTC.year(),
323 COPTIC_UTC.monthOfYear(),
324 COPTIC_UTC.dayOfMonth(),
325 COPTIC_UTC.millisOfDay(),
326 };
327 }
328 public int[] getValues() {
329 return new int[] {1970, 6, 9, MILLIS_OF_DAY_UTC};
330 }
331 }
332
333
334 public void testCompareTo() {
335 LocalDateTime test1 = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
336 LocalDateTime test1a = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
337 assertEquals(0, test1.compareTo(test1a));
338 assertEquals(0, test1a.compareTo(test1));
339 assertEquals(0, test1.compareTo(test1));
340 assertEquals(0, test1a.compareTo(test1a));
341
342 LocalDateTime test2 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40);
343 assertEquals(-1, test1.compareTo(test2));
344 assertEquals(+1, test2.compareTo(test1));
345
346 LocalDateTime test3 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40, GREGORIAN_UTC);
347 assertEquals(-1, test1.compareTo(test3));
348 assertEquals(+1, test3.compareTo(test1));
349 assertEquals(0, test3.compareTo(test2));
350
351 DateTimeFieldType[] types = new DateTimeFieldType[] {
352 DateTimeFieldType.year(),
353 DateTimeFieldType.monthOfYear(),
354 DateTimeFieldType.dayOfMonth(),
355 DateTimeFieldType.millisOfDay(),
356 };
357 int[] values = new int[] {2005, 6, 2, MILLIS_OF_DAY_UTC};
358 Partial p = new Partial(types, values);
359 assertEquals(0, test1.compareTo(p));
360 try {
361 test1.compareTo(null);
362 fail();
363 } catch (NullPointerException ex) {}
364
365
366
367
368 try {
369 test1.compareTo(new YearMonthDay());
370 fail();
371 } catch (ClassCastException ex) {}
372 try {
373 test1.compareTo(new TimeOfDay());
374 fail();
375 } catch (ClassCastException ex) {}
376 Partial partial = new Partial()
377 .with(DateTimeFieldType.centuryOfEra(), 1)
378 .with(DateTimeFieldType.halfdayOfDay(), 0)
379 .with(DateTimeFieldType.dayOfMonth(), 9);
380 try {
381 new LocalDateTime(1970, 6, 9, 10, 20, 30, 40).compareTo(partial);
382 fail();
383 } catch (ClassCastException ex) {}
384 }
385
386
387 public void testIsEqual_LocalDateTime() {
388 LocalDateTime test1 = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
389 LocalDateTime test1a = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
390 assertEquals(true, test1.isEqual(test1a));
391 assertEquals(true, test1a.isEqual(test1));
392 assertEquals(true, test1.isEqual(test1));
393 assertEquals(true, test1a.isEqual(test1a));
394
395 LocalDateTime test2 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40);
396 assertEquals(false, test1.isEqual(test2));
397 assertEquals(false, test2.isEqual(test1));
398
399 LocalDateTime test3 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40, GREGORIAN_UTC);
400 assertEquals(false, test1.isEqual(test3));
401 assertEquals(false, test3.isEqual(test1));
402 assertEquals(true, test3.isEqual(test2));
403
404 try {
405 new LocalDateTime(2005, 7, 2, 10, 20, 30, 40).isEqual(null);
406 fail();
407 } catch (IllegalArgumentException ex) {}
408 }
409
410
411 public void testIsBefore_LocalDateTime() {
412 LocalDateTime test1 = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
413 LocalDateTime test1a = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
414 assertEquals(false, test1.isBefore(test1a));
415 assertEquals(false, test1a.isBefore(test1));
416 assertEquals(false, test1.isBefore(test1));
417 assertEquals(false, test1a.isBefore(test1a));
418
419 LocalDateTime test2 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40);
420 assertEquals(true, test1.isBefore(test2));
421 assertEquals(false, test2.isBefore(test1));
422
423 LocalDateTime test3 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40, GREGORIAN_UTC);
424 assertEquals(true, test1.isBefore(test3));
425 assertEquals(false, test3.isBefore(test1));
426 assertEquals(false, test3.isBefore(test2));
427
428 try {
429 new LocalDateTime(2005, 7, 2, 10, 20, 30, 40).isBefore(null);
430 fail();
431 } catch (IllegalArgumentException ex) {}
432 }
433
434
435 public void testIsAfter_LocalDateTime() {
436 LocalDateTime test1 = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
437 LocalDateTime test1a = new LocalDateTime(2005, 6, 2, 10, 20, 30, 40);
438 assertEquals(false, test1.isAfter(test1a));
439 assertEquals(false, test1a.isAfter(test1));
440 assertEquals(false, test1.isAfter(test1));
441 assertEquals(false, test1a.isAfter(test1a));
442
443 LocalDateTime test2 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40);
444 assertEquals(false, test1.isAfter(test2));
445 assertEquals(true, test2.isAfter(test1));
446
447 LocalDateTime test3 = new LocalDateTime(2005, 7, 2, 10, 20, 30, 40, GREGORIAN_UTC);
448 assertEquals(false, test1.isAfter(test3));
449 assertEquals(true, test3.isAfter(test1));
450 assertEquals(false, test3.isAfter(test2));
451
452 try {
453 new LocalDateTime(2005, 7, 2, 10, 20, 30, 40).isAfter(null);
454 fail();
455 } catch (IllegalArgumentException ex) {}
456 }
457
458
459 public void testWithDate() {
460 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
461 LocalDateTime result = test.withDate(2006, 2, 1);
462
463 check(test, 2004, 6, 9, 10, 20, 30, 40);
464 check(result, 2006, 2, 1, 10, 20, 30, 40);
465 }
466
467
468 public void testWithTime() {
469 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
470 LocalDateTime result = test.withTime(9, 8, 7, 6);
471
472 check(test, 2004, 6, 9, 10, 20, 30, 40);
473 check(result, 2004, 6, 9, 9, 8, 7, 6);
474 }
475
476
477 public void testWithField_DateTimeFieldType_int_1() {
478 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
479 LocalDateTime result = test.withField(DateTimeFieldType.year(), 2006);
480
481 assertEquals(new LocalDateTime(2004, 6, 9, 10, 20, 30, 40), test);
482 assertEquals(new LocalDateTime(2006, 6, 9, 10, 20, 30, 40), result);
483 }
484
485 public void testWithField_DateTimeFieldType_int_2() {
486 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
487 try {
488 test.withField(null, 6);
489 fail();
490 } catch (IllegalArgumentException ex) {}
491 }
492
493 public void testWithField_DateTimeFieldType_int_3() {
494 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
495 LocalDateTime result = test.withField(DateTimeFieldType.year(), 2004);
496 assertEquals(new LocalDateTime(2004, 6, 9, 10, 20, 30, 40), test);
497 assertSame(test, result);
498 }
499
500
501 public void testWithFieldAdded_DurationFieldType_int_1() {
502 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
503 LocalDateTime result = test.withFieldAdded(DurationFieldType.years(), 6);
504
505 assertEquals(new LocalDateTime(2004, 6, 9, 10, 20, 30, 40), test);
506 assertEquals(new LocalDateTime(2010, 6, 9, 10, 20, 30, 40), result);
507 }
508
509 public void testWithFieldAdded_DurationFieldType_int_2() {
510 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
511 try {
512 test.withFieldAdded(null, 0);
513 fail();
514 } catch (IllegalArgumentException ex) {}
515 }
516
517 public void testWithFieldAdded_DurationFieldType_int_3() {
518 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
519 try {
520 test.withFieldAdded(null, 6);
521 fail();
522 } catch (IllegalArgumentException ex) {}
523 }
524
525 public void testWithFieldAdded_DurationFieldType_int_4() {
526 LocalDateTime test = new LocalDateTime(2004, 6, 9, 10, 20, 30, 40);
527 LocalDateTime result = test.withFieldAdded(DurationFieldType.years(), 0);
528 assertSame(test, result);
529 }
530
531
532 public void testPlus_RP() {
533 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
534 LocalDateTime result = test.plus(new Period(1, 2, 3, 4, 29, 6, 7, 8));
535 LocalDateTime expected = new LocalDateTime(2003, 7, 29, 15, 26, 37, 48, BUDDHIST_LONDON);
536 assertEquals(expected, result);
537
538 result = test.plus((ReadablePeriod) null);
539 assertSame(test, result);
540 }
541
542 public void testPlusYears_int() {
543 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
544 LocalDateTime result = test.plusYears(1);
545 LocalDateTime expected = new LocalDateTime(2003, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
546 assertEquals(expected, result);
547
548 result = test.plusYears(0);
549 assertSame(test, result);
550 }
551
552 public void testPlusMonths_int() {
553 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
554 LocalDateTime result = test.plusMonths(1);
555 LocalDateTime expected = new LocalDateTime(2002, 6, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
556 assertEquals(expected, result);
557
558 result = test.plusMonths(0);
559 assertSame(test, result);
560 }
561
562 public void testPlusWeeks_int() {
563 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
564 LocalDateTime result = test.plusWeeks(1);
565 LocalDateTime expected = new LocalDateTime(2002, 5, 10, 10, 20, 30, 40, BUDDHIST_LONDON);
566 assertEquals(expected, result);
567
568 result = test.plusWeeks(0);
569 assertSame(test, result);
570 }
571
572 public void testPlusDays_int() {
573 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
574 LocalDateTime result = test.plusDays(1);
575 LocalDateTime expected = new LocalDateTime(2002, 5, 4, 10, 20, 30, 40, BUDDHIST_LONDON);
576 assertEquals(expected, result);
577
578 result = test.plusDays(0);
579 assertSame(test, result);
580 }
581
582 public void testPlusHours_int() {
583 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
584 LocalDateTime result = test.plusHours(1);
585 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 11, 20, 30, 40, BUDDHIST_LONDON);
586 assertEquals(expected, result);
587
588 result = test.plusHours(0);
589 assertSame(test, result);
590 }
591
592 public void testPlusMinutes_int() {
593 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
594 LocalDateTime result = test.plusMinutes(1);
595 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 10, 21, 30, 40, BUDDHIST_LONDON);
596 assertEquals(expected, result);
597
598 result = test.plusMinutes(0);
599 assertSame(test, result);
600 }
601
602 public void testPlusSeconds_int() {
603 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
604 LocalDateTime result = test.plusSeconds(1);
605 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 10, 20, 31, 40, BUDDHIST_LONDON);
606 assertEquals(expected, result);
607
608 result = test.plusSeconds(0);
609 assertSame(test, result);
610 }
611
612 public void testPlusMillis_int() {
613 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
614 LocalDateTime result = test.plusMillis(1);
615 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 10, 20, 30, 41, BUDDHIST_LONDON);
616 assertEquals(expected, result);
617
618 result = test.plusMillis(0);
619 assertSame(test, result);
620 }
621
622
623 public void testMinus_RP() {
624 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
625 LocalDateTime result = test.minus(new Period(1, 1, 1, 1, 1, 1, 1, 1));
626
627 LocalDateTime expected = new LocalDateTime(2001, 3, 26, 9, 19, 29, 39, BUDDHIST_LONDON);
628 assertEquals(expected, result);
629
630 result = test.minus((ReadablePeriod) null);
631 assertSame(test, result);
632 }
633
634 public void testMinusYears_int() {
635 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
636 LocalDateTime result = test.minusYears(1);
637 LocalDateTime expected = new LocalDateTime(2001, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
638 assertEquals(expected, result);
639
640 result = test.minusYears(0);
641 assertSame(test, result);
642 }
643
644 public void testMinusMonths_int() {
645 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
646 LocalDateTime result = test.minusMonths(1);
647 LocalDateTime expected = new LocalDateTime(2002, 4, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
648 assertEquals(expected, result);
649
650 result = test.minusMonths(0);
651 assertSame(test, result);
652 }
653
654 public void testMinusWeeks_int() {
655 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
656 LocalDateTime result = test.minusWeeks(1);
657 LocalDateTime expected = new LocalDateTime(2002, 4, 26, 10, 20, 30, 40, BUDDHIST_LONDON);
658 assertEquals(expected, result);
659
660 result = test.minusWeeks(0);
661 assertSame(test, result);
662 }
663
664 public void testMinusDays_int() {
665 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
666 LocalDateTime result = test.minusDays(1);
667 LocalDateTime expected = new LocalDateTime(2002, 5, 2, 10, 20, 30, 40, BUDDHIST_LONDON);
668 assertEquals(expected, result);
669
670 result = test.minusDays(0);
671 assertSame(test, result);
672 }
673
674 public void testMinusHours_int() {
675 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
676 LocalDateTime result = test.minusHours(1);
677 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 9, 20, 30, 40, BUDDHIST_LONDON);
678 assertEquals(expected, result);
679
680 result = test.minusHours(0);
681 assertSame(test, result);
682 }
683
684 public void testMinusMinutes_int() {
685 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
686 LocalDateTime result = test.minusMinutes(1);
687 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 10, 19, 30, 40, BUDDHIST_LONDON);
688 assertEquals(expected, result);
689
690 result = test.minusMinutes(0);
691 assertSame(test, result);
692 }
693
694 public void testMinusSeconds_int() {
695 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
696 LocalDateTime result = test.minusSeconds(1);
697 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 10, 20, 29, 40, BUDDHIST_LONDON);
698 assertEquals(expected, result);
699
700 result = test.minusSeconds(0);
701 assertSame(test, result);
702 }
703
704 public void testMinusMillis_int() {
705 LocalDateTime test = new LocalDateTime(2002, 5, 3, 10, 20, 30, 40, BUDDHIST_LONDON);
706 LocalDateTime result = test.minusMillis(1);
707 LocalDateTime expected = new LocalDateTime(2002, 5, 3, 10, 20, 30, 39, BUDDHIST_LONDON);
708 assertEquals(expected, result);
709
710 result = test.minusMillis(0);
711 assertSame(test, result);
712 }
713
714
715 public void testGetters() {
716 LocalDateTime test = new LocalDateTime(1970, 6, 9, 10, 20, 30, 40, GJ_UTC);
717 assertEquals(1970, test.getYear());
718 assertEquals(6, test.getMonthOfYear());
719 assertEquals(9, test.getDayOfMonth());
720 assertEquals(160, test.getDayOfYear());
721 assertEquals(2, test.getDayOfWeek());
722 assertEquals(24, test.getWeekOfWeekyear());
723 assertEquals(1970, test.getWeekyear());
724 assertEquals(70, test.getYearOfCentury());
725 assertEquals(20, test.getCenturyOfEra());
726 assertEquals(1970, test.getYearOfEra());
727 assertEquals(DateTimeConstants.AD, test.getEra());
728 assertEquals(10, test.getHourOfDay());
729 assertEquals(20, test.getMinuteOfHour());
730 assertEquals(30, test.getSecondOfMinute());
731 assertEquals(40, test.getMillisOfSecond());
732 assertEquals(MILLIS_OF_DAY_UTC, test.getMillisOfDay());
733 }
734
735
736 public void testWithers() {
737 LocalDateTime test = new LocalDateTime(1970, 6, 9, 10, 20, 30, 40, GJ_UTC);
738 check(test.withYear(2000), 2000, 6, 9, 10, 20, 30, 40);
739 check(test.withMonthOfYear(2), 1970, 2, 9, 10, 20, 30, 40);
740 check(test.withDayOfMonth(2), 1970, 6, 2, 10, 20, 30, 40);
741 check(test.withDayOfYear(6), 1970, 1, 6, 10, 20, 30, 40);
742 check(test.withDayOfWeek(6), 1970, 6, 13, 10, 20, 30, 40);
743 check(test.withWeekOfWeekyear(6), 1970, 2, 3, 10, 20, 30, 40);
744 check(test.withWeekyear(1971), 1971, 6, 15, 10, 20, 30, 40);
745 check(test.withYearOfCentury(60), 1960, 6, 9, 10, 20, 30, 40);
746 check(test.withCenturyOfEra(21), 2070, 6, 9, 10, 20, 30, 40);
747 check(test.withYearOfEra(1066), 1066, 6, 9, 10, 20, 30, 40);
748 check(test.withEra(DateTimeConstants.BC), -1970, 6, 9, 10, 20, 30, 40);
749 check(test.withHourOfDay(6), 1970, 6, 9, 6, 20, 30, 40);
750 check(test.withMinuteOfHour(6), 1970, 6, 9, 10, 6, 30, 40);
751 check(test.withSecondOfMinute(6), 1970, 6, 9, 10, 20, 6, 40);
752 check(test.withMillisOfSecond(6), 1970, 6, 9, 10, 20, 30, 6);
753 check(test.withMillisOfDay(61234), 1970, 6, 9, 0, 1, 1, 234);
754 try {
755 test.withMonthOfYear(0);
756 fail();
757 } catch (IllegalArgumentException ex) {}
758 try {
759 test.withMonthOfYear(13);
760 fail();
761 } catch (IllegalArgumentException ex) {}
762 }
763
764
765 public void testToDateTime() {
766 LocalDateTime base = new LocalDateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_PARIS);
767
768 DateTime test = base.toDateTime();
769 check(base, 2005, 6, 9, 6, 7, 8, 9);
770 DateTime expected = new DateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_LONDON);
771 assertEquals(expected, test);
772 }
773
774
775 public void testToDateTime_Zone() {
776 LocalDateTime base = new LocalDateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_PARIS);
777
778 DateTime test = base.toDateTime(TOKYO);
779 check(base, 2005, 6, 9, 6, 7, 8, 9);
780 DateTime expected = new DateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_TOKYO);
781 assertEquals(expected, test);
782 }
783
784 public void testToDateTime_nullZone() {
785 LocalDateTime base = new LocalDateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_PARIS);
786
787 DateTime test = base.toDateTime((DateTimeZone) null);
788 check(base, 2005, 6, 9, 6, 7, 8, 9);
789 DateTime expected = new DateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_LONDON);
790 assertEquals(expected, test);
791 }
792
793
794 public void testToLocalDate() {
795 LocalDateTime base = new LocalDateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_PARIS);
796 LocalDate expected = new LocalDate(2005, 6, 9, COPTIC_LONDON);
797 assertEquals(expected,base.toLocalDate());
798 }
799
800 public void testToLocalTime() {
801 LocalDateTime base = new LocalDateTime(2005, 6, 9, 6, 7, 8, 9, COPTIC_PARIS);
802 LocalTime expected = new LocalTime(6, 7, 8, 9, COPTIC_LONDON);
803 assertEquals(expected,base.toLocalTime());
804 }
805
806
807 public void testToDateTime_RI() {
808 LocalDateTime base = new LocalDateTime(2005, 6, 9, 10, 20, 30, 40, COPTIC_PARIS);
809 DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7, BUDDHIST_TOKYO);
810
811 DateTime test = base.toDateTime(dt);
812 check(base, 2005, 6, 9, 10, 20, 30, 40);
813 DateTime expected = new DateTime(2005, 6, 9, 10, 20, 30, 40, BUDDHIST_TOKYO);
814 assertEquals(expected, test);
815 }
816
817 public void testToDateTime_nullRI() {
818 LocalDateTime base = new LocalDateTime(2005, 6, 9, 10, 20, 30, 40, COPTIC_PARIS);
819
820 DateTime test = base.toDateTime((ReadableInstant) null);
821 check(base, 2005, 6, 9, 10, 20, 30, 40);
822 DateTime expected = new DateTime(2005, 6, 9, 10, 20, 30, 40, ISO_LONDON);
823 assertEquals(expected, test);
824 }
825
826
827 public void testToDate_summer() {
828 LocalDateTime base = new LocalDateTime(2005, 7, 9, 10, 20, 30, 40, COPTIC_PARIS);
829
830 Date test = base.toDate();
831 check(base, 2005, 7, 9, 10, 20, 30, 40);
832
833 GregorianCalendar gcal = new GregorianCalendar();
834 gcal.clear();
835 gcal.set(Calendar.YEAR, 2005);
836 gcal.set(Calendar.MONTH, Calendar.JULY);
837 gcal.set(Calendar.DAY_OF_MONTH, 9);
838 gcal.set(Calendar.HOUR_OF_DAY, 10);
839 gcal.set(Calendar.MINUTE, 20);
840 gcal.set(Calendar.SECOND, 30);
841 gcal.set(Calendar.MILLISECOND, 40);
842 assertEquals(gcal.getTime(), test);
843 }
844
845 public void testToDate_winter() {
846 LocalDateTime base = new LocalDateTime(2005, 1, 9, 10, 20, 30, 40, COPTIC_PARIS);
847
848 Date test = base.toDate();
849 check(base, 2005, 1, 9, 10, 20, 30, 40);
850
851 GregorianCalendar gcal = new GregorianCalendar();
852 gcal.clear();
853 gcal.set(Calendar.YEAR, 2005);
854 gcal.set(Calendar.MONTH, Calendar.JANUARY);
855 gcal.set(Calendar.DAY_OF_MONTH, 9);
856 gcal.set(Calendar.HOUR_OF_DAY, 10);
857 gcal.set(Calendar.MINUTE, 20);
858 gcal.set(Calendar.SECOND, 30);
859 gcal.set(Calendar.MILLISECOND, 40);
860 assertEquals(gcal.getTime(), test);
861 }
862
863 public void testToDate_springDST() {
864 LocalDateTime base = new LocalDateTime(2007, 4, 2, 0, 20, 0, 0);
865
866 SimpleTimeZone testZone = new SimpleTimeZone(3600000, "NoMidnight",
867 Calendar.APRIL, 2, 0, 0, Calendar.OCTOBER, 2, 0, 3600000);
868 TimeZone currentZone = TimeZone.getDefault();
869 try {
870 TimeZone.setDefault(testZone);
871 Date test = base.toDate();
872 check(base, 2007, 4, 2, 0, 20, 0, 0);
873 assertEquals("Mon Apr 02 01:00:00 GMT+02:00 2007", test.toString());
874 } finally {
875 TimeZone.setDefault(currentZone);
876 }
877 }
878
879 public void testToDate_springDST_2Hour40Savings() {
880 LocalDateTime base = new LocalDateTime(2007, 4, 2, 0, 20, 0, 0);
881
882 SimpleTimeZone testZone = new SimpleTimeZone(3600000, "NoMidnight",
883 Calendar.APRIL, 2, 0, 0, Calendar.OCTOBER, 2, 0, 3600000, (3600000 / 6) * 16);
884 TimeZone currentZone = TimeZone.getDefault();
885 try {
886 TimeZone.setDefault(testZone);
887 Date test = base.toDate();
888 check(base, 2007, 4, 2, 0, 20, 0, 0);
889 assertEquals("Mon Apr 02 02:40:00 GMT+03:40 2007", test.toString());
890 } finally {
891 TimeZone.setDefault(currentZone);
892 }
893 }
894
895 public void testToDate_autumnDST() {
896 LocalDateTime base = new LocalDateTime(2007, 10, 2, 0, 20, 30, 0);
897
898 SimpleTimeZone testZone = new SimpleTimeZone(3600000, "NoMidnight",
899 Calendar.APRIL, 2, 0, 0, Calendar.OCTOBER, 2, 0, 3600000);
900 TimeZone currentZone = TimeZone.getDefault();
901 try {
902 TimeZone.setDefault(testZone);
903 Date test = base.toDate();
904 check(base, 2007, 10, 2, 0, 20, 30, 0);
905 assertEquals("Tue Oct 02 00:20:30 GMT+02:00 2007", test.toString());
906 } finally {
907 TimeZone.setDefault(currentZone);
908 }
909 }
910
911
912 public void testProperty() {
913 LocalDateTime test = new LocalDateTime(2005, 6, 9, 10, 20, 30, 40, GJ_UTC);
914 assertEquals(test.year(), test.property(DateTimeFieldType.year()));
915 assertEquals(test.monthOfYear(), test.property(DateTimeFieldType.monthOfYear()));
916 assertEquals(test.dayOfMonth(), test.property(DateTimeFieldType.dayOfMonth()));
917 assertEquals(test.dayOfWeek(), test.property(DateTimeFieldType.dayOfWeek()));
918 assertEquals(test.dayOfYear(), test.property(DateTimeFieldType.dayOfYear()));
919 assertEquals(test.weekOfWeekyear(), test.property(DateTimeFieldType.weekOfWeekyear()));
920 assertEquals(test.weekyear(), test.property(DateTimeFieldType.weekyear()));
921 assertEquals(test.yearOfCentury(), test.property(DateTimeFieldType.yearOfCentury()));
922 assertEquals(test.yearOfEra(), test.property(DateTimeFieldType.yearOfEra()));
923 assertEquals(test.centuryOfEra(), test.property(DateTimeFieldType.centuryOfEra()));
924 assertEquals(test.era(), test.property(DateTimeFieldType.era()));
925 assertEquals(test.hourOfDay(), test.property(DateTimeFieldType.hourOfDay()));
926 assertEquals(test.minuteOfHour(), test.property(DateTimeFieldType.minuteOfHour()));
927 assertEquals(test.secondOfMinute(), test.property(DateTimeFieldType.secondOfMinute()));
928 assertEquals(test.millisOfSecond(), test.property(DateTimeFieldType.millisOfSecond()));
929 assertEquals(test.millisOfDay(), test.property(DateTimeFieldType.millisOfDay()));
930
931 try {
932 test.property(null);
933 fail();
934 } catch (IllegalArgumentException ex) {}
935 assertEquals(test, test.property(DateTimeFieldType.minuteOfDay()).getLocalDateTime());
936 }
937
938
939 public void testSerialization() throws Exception {
940 LocalDateTime test = new LocalDateTime(1972, 6, 9, 10, 20, 30, 40, COPTIC_PARIS);
941
942 ByteArrayOutputStream baos = new ByteArrayOutputStream();
943 ObjectOutputStream oos = new ObjectOutputStream(baos);
944 oos.writeObject(test);
945 byte[] bytes = baos.toByteArray();
946 oos.close();
947
948 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
949 ObjectInputStream ois = new ObjectInputStream(bais);
950 LocalDateTime result = (LocalDateTime) ois.readObject();
951 ois.close();
952
953 assertEquals(test, result);
954 assertTrue(Arrays.equals(test.getValues(), result.getValues()));
955 assertTrue(Arrays.equals(test.getFields(), result.getFields()));
956 assertEquals(test.getChronology(), result.getChronology());
957 assertTrue(result.isSupported(DateTimeFieldType.dayOfMonth()));
958 }
959
960
961 public void testToString() {
962 LocalDateTime test = new LocalDateTime(2002, 6, 9, 10, 20, 30, 40);
963 assertEquals("2002-06-09T10:20:30.040", test.toString());
964 }
965
966
967 public void testToString_String() {
968 LocalDateTime test = new LocalDateTime(2002, 6, 9, 10, 20, 30, 40);
969 assertEquals("2002 10", test.toString("yyyy HH"));
970 assertEquals("2002-06-09T10:20:30.040", test.toString((String) null));
971 }
972
973
974 public void testToString_String_Locale() {
975 LocalDateTime test = new LocalDateTime(1970, 6, 9, 10, 20, 30, 40);
976 assertEquals("Tue 9/6", test.toString("EEE d/M", Locale.ENGLISH));
977 assertEquals("mar. 9/6", test.toString("EEE d/M", Locale.FRENCH));
978 assertEquals("1970-06-09T10:20:30.040", test.toString(null, Locale.ENGLISH));
979 assertEquals("Tue 9/6", test.toString("EEE d/M", null));
980 assertEquals("1970-06-09T10:20:30.040", test.toString(null, null));
981 }
982
983
984 public void testToString_DTFormatter() {
985 LocalDateTime test = new LocalDateTime(2002, 6, 9, 10, 20, 30, 40);
986 assertEquals("2002 10", test.toString(DateTimeFormat.forPattern("yyyy HH")));
987 assertEquals("2002-06-09T10:20:30.040", test.toString((DateTimeFormatter) null));
988 }
989
990
991 private void check(LocalDateTime test, int year, int month, int day, int hour, int min, int sec, int mil) {
992 assertEquals(year, test.getYear());
993 assertEquals(month, test.getMonthOfYear());
994 assertEquals(day, test.getDayOfMonth());
995 assertEquals(hour, test.getHourOfDay());
996 assertEquals(min, test.getMinuteOfHour());
997 assertEquals(sec, test.getSecondOfMinute());
998 assertEquals(mil, test.getMillisOfSecond());
999 }
1000 }