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.Locale;
24
25 import junit.framework.TestCase;
26 import junit.framework.TestSuite;
27
28 import org.joda.time.chrono.BuddhistChronology;
29 import org.joda.time.chrono.CopticChronology;
30 import org.joda.time.chrono.GregorianChronology;
31 import org.joda.time.chrono.ISOChronology;
32 import org.joda.time.format.DateTimeFormat;
33 import org.joda.time.format.DateTimeFormatter;
34
35
36
37
38 public class TestMonthDay_Basics extends TestCase {
39
40 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
41 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
42 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
43 private static final Chronology COPTIC_PARIS = CopticChronology.getInstance(PARIS);
44
45 private static final Chronology COPTIC_TOKYO = CopticChronology.getInstance(TOKYO);
46 private static final Chronology COPTIC_UTC = CopticChronology.getInstanceUTC();
47
48
49
50 private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC();
51
52
53 private static final Chronology BUDDHIST_TOKYO = BuddhistChronology.getInstance(TOKYO);
54 private static final Chronology BUDDHIST_UTC = BuddhistChronology.getInstanceUTC();
55
56 private long TEST_TIME_NOW =
57 (31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
58
59 private DateTimeZone zone = null;
60
61 public static void main(String[] args) {
62 junit.textui.TestRunner.run(suite());
63 }
64
65 public static TestSuite suite() {
66 return new TestSuite(TestMonthDay_Basics.class);
67 }
68
69 public TestMonthDay_Basics(String name) {
70 super(name);
71 }
72
73 protected void setUp() throws Exception {
74 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
75 zone = DateTimeZone.getDefault();
76 DateTimeZone.setDefault(LONDON);
77 }
78
79 protected void tearDown() throws Exception {
80 DateTimeUtils.setCurrentMillisSystem();
81 DateTimeZone.setDefault(zone);
82 zone = null;
83 }
84
85
86 public void testGet() {
87 MonthDay test = new MonthDay();
88 assertEquals(6, test.get(DateTimeFieldType.monthOfYear()));
89 assertEquals(9, test.get(DateTimeFieldType.dayOfMonth()));
90 try {
91 test.get(null);
92 fail();
93 } catch (IllegalArgumentException ex) {}
94 try {
95 test.get(DateTimeFieldType.year());
96 fail();
97 } catch (IllegalArgumentException ex) {}
98 }
99
100 public void testSize() {
101 MonthDay test = new MonthDay();
102 assertEquals(2, test.size());
103 }
104
105 public void testGetFieldType() {
106 MonthDay test = new MonthDay(COPTIC_PARIS);
107 assertSame(DateTimeFieldType.monthOfYear(), test.getFieldType(0));
108 assertSame(DateTimeFieldType.dayOfMonth(), test.getFieldType(1));
109
110 try {
111 test.getFieldType(-1);
112 } catch (IndexOutOfBoundsException ex) {}
113 try {
114 test.getFieldType(2);
115 } catch (IndexOutOfBoundsException ex) {}
116 }
117
118 public void testGetFieldTypes() {
119 MonthDay test = new MonthDay(COPTIC_PARIS);
120 DateTimeFieldType[] fields = test.getFieldTypes();
121 assertEquals(2, fields.length);
122 assertSame(DateTimeFieldType.monthOfYear(), fields[0]);
123 assertSame(DateTimeFieldType.dayOfMonth(), fields[1]);
124 assertNotSame(test.getFieldTypes(), test.getFieldTypes());
125 }
126
127 public void testGetField() {
128 MonthDay test = new MonthDay(COPTIC_PARIS);
129 assertSame(COPTIC_UTC.monthOfYear(), test.getField(0));
130 assertSame(COPTIC_UTC.dayOfMonth(), test.getField(1));
131 try {
132 test.getField(-1);
133 } catch (IndexOutOfBoundsException ex) {}
134 try {
135 test.getField(2);
136 } catch (IndexOutOfBoundsException ex) {}
137 }
138
139 public void testGetFields() {
140 MonthDay test = new MonthDay(COPTIC_PARIS);
141 DateTimeField[] fields = test.getFields();
142 assertEquals(2, fields.length);
143 assertSame(COPTIC_UTC.monthOfYear(), fields[0]);
144 assertSame(COPTIC_UTC.dayOfMonth(), fields[1]);
145 assertNotSame(test.getFields(), test.getFields());
146 }
147
148 public void testGetValue() {
149 MonthDay test = new MonthDay();
150 assertEquals(6, test.getValue(0));
151 assertEquals(9, test.getValue(1));
152 try {
153 test.getValue(-1);
154 } catch (IndexOutOfBoundsException ex) {}
155 try {
156 test.getValue(2);
157 } catch (IndexOutOfBoundsException ex) {}
158 }
159
160 public void testGetValues() {
161 MonthDay test = new MonthDay();
162 int[] values = test.getValues();
163 assertEquals(2, values.length);
164 assertEquals(6, values[0]);
165 assertEquals(9, values[1]);
166 assertNotSame(test.getValues(), test.getValues());
167 }
168
169 public void testIsSupported() {
170 MonthDay test = new MonthDay(COPTIC_PARIS);
171 assertEquals(false, test.isSupported(DateTimeFieldType.year()));
172 assertEquals(true, test.isSupported(DateTimeFieldType.monthOfYear()));
173 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfMonth()));
174 assertEquals(false, test.isSupported(DateTimeFieldType.hourOfDay()));
175 }
176
177 public void testEqualsHashCode() {
178 MonthDay test1 = new MonthDay(10, 6, COPTIC_PARIS);
179 MonthDay test2 = new MonthDay(10, 6, COPTIC_PARIS);
180 assertEquals(true, test1.equals(test2));
181 assertEquals(true, test2.equals(test1));
182 assertEquals(true, test1.equals(test1));
183 assertEquals(true, test2.equals(test2));
184 assertEquals(true, test1.hashCode() == test2.hashCode());
185 assertEquals(true, test1.hashCode() == test1.hashCode());
186 assertEquals(true, test2.hashCode() == test2.hashCode());
187
188 MonthDay test3 = new MonthDay(10, 6);
189 assertEquals(false, test1.equals(test3));
190 assertEquals(false, test2.equals(test3));
191 assertEquals(false, test3.equals(test1));
192 assertEquals(false, test3.equals(test2));
193 assertEquals(false, test1.hashCode() == test3.hashCode());
194 assertEquals(false, test2.hashCode() == test3.hashCode());
195
196 assertEquals(false, test1.equals("Hello"));
197 assertEquals(true, test1.equals(new MockMD()));
198 assertEquals(false, test1.equals(MockPartial.EMPTY_INSTANCE));
199 }
200
201 class MockMD extends MockPartial {
202
203 @Override
204 public Chronology getChronology() {
205 return COPTIC_UTC;
206 }
207
208 @Override
209 public DateTimeField[] getFields() {
210 return new DateTimeField[] {
211 COPTIC_UTC.monthOfYear(),
212 COPTIC_UTC.dayOfMonth()
213 };
214 }
215
216 @Override
217 public int[] getValues() {
218 return new int[] {10, 6};
219 }
220 }
221
222
223 public void testCompareTo() {
224 MonthDay test1 = new MonthDay(6, 6);
225 MonthDay test1a = new MonthDay(6, 6);
226 assertEquals(0, test1.compareTo(test1a));
227 assertEquals(0, test1a.compareTo(test1));
228 assertEquals(0, test1.compareTo(test1));
229 assertEquals(0, test1a.compareTo(test1a));
230
231 MonthDay test2 = new MonthDay(6, 7);
232 assertEquals(-1, test1.compareTo(test2));
233 assertEquals(+1, test2.compareTo(test1));
234
235 MonthDay test3 = new MonthDay(6, 7, GregorianChronology.getInstanceUTC());
236 assertEquals(-1, test1.compareTo(test3));
237 assertEquals(+1, test3.compareTo(test1));
238 assertEquals(0, test3.compareTo(test2));
239
240 DateTimeFieldType[] types = new DateTimeFieldType[] {
241 DateTimeFieldType.monthOfYear(),
242 DateTimeFieldType.dayOfMonth()
243 };
244 int[] values = new int[] {6, 6};
245 Partial p = new Partial(types, values);
246 assertEquals(0, test1.compareTo(p));
247 try {
248 test1.compareTo(null);
249 fail();
250 } catch (NullPointerException ex) {}
251 try {
252 test1.compareTo(new LocalTime());
253 fail();
254 } catch (ClassCastException ex) {}
255 Partial partial = new Partial()
256 .with(DateTimeFieldType.centuryOfEra(), 1)
257 .with(DateTimeFieldType.halfdayOfDay(), 0)
258 .with(DateTimeFieldType.dayOfMonth(), 9);
259 try {
260 new MonthDay(10, 6).compareTo(partial);
261 fail();
262 } catch (ClassCastException ex) {}
263 }
264
265
266 public void testIsEqual_MD() {
267 MonthDay test1 = new MonthDay(6, 6);
268 MonthDay test1a = new MonthDay(6, 6);
269 assertEquals(true, test1.isEqual(test1a));
270 assertEquals(true, test1a.isEqual(test1));
271 assertEquals(true, test1.isEqual(test1));
272 assertEquals(true, test1a.isEqual(test1a));
273
274 MonthDay test2 = new MonthDay(6, 7);
275 assertEquals(false, test1.isEqual(test2));
276 assertEquals(false, test2.isEqual(test1));
277
278 MonthDay test3 = new MonthDay(6, 7, GregorianChronology.getInstanceUTC());
279 assertEquals(false, test1.isEqual(test3));
280 assertEquals(false, test3.isEqual(test1));
281 assertEquals(true, test3.isEqual(test2));
282
283 try {
284 new MonthDay(6, 7).isEqual(null);
285 fail();
286 } catch (IllegalArgumentException ex) {}
287 }
288
289
290 public void testIsBefore_MD() {
291 MonthDay test1 = new MonthDay(6, 6);
292 MonthDay test1a = new MonthDay(6, 6);
293 assertEquals(false, test1.isBefore(test1a));
294 assertEquals(false, test1a.isBefore(test1));
295 assertEquals(false, test1.isBefore(test1));
296 assertEquals(false, test1a.isBefore(test1a));
297
298 MonthDay test2 = new MonthDay(6, 7);
299 assertEquals(true, test1.isBefore(test2));
300 assertEquals(false, test2.isBefore(test1));
301
302 MonthDay test3 = new MonthDay(6, 7, GregorianChronology.getInstanceUTC());
303 assertEquals(true, test1.isBefore(test3));
304 assertEquals(false, test3.isBefore(test1));
305 assertEquals(false, test3.isBefore(test2));
306
307 try {
308 new MonthDay(6, 7).isBefore(null);
309 fail();
310 } catch (IllegalArgumentException ex) {}
311 }
312
313
314 public void testIsAfter_MD() {
315 MonthDay test1 = new MonthDay(6, 6);
316 MonthDay test1a = new MonthDay(6, 6);
317 assertEquals(false, test1.isAfter(test1a));
318 assertEquals(false, test1a.isAfter(test1));
319 assertEquals(false, test1.isAfter(test1));
320 assertEquals(false, test1a.isAfter(test1a));
321
322 MonthDay test2 = new MonthDay(6, 7);
323 assertEquals(false, test1.isAfter(test2));
324 assertEquals(true, test2.isAfter(test1));
325
326 MonthDay test3 = new MonthDay(6, 7, GregorianChronology.getInstanceUTC());
327 assertEquals(false, test1.isAfter(test3));
328 assertEquals(true, test3.isAfter(test1));
329 assertEquals(false, test3.isAfter(test2));
330
331 try {
332 new MonthDay(6, 7).isAfter(null);
333 fail();
334 } catch (IllegalArgumentException ex) {}
335 }
336
337
338 public void testWithChronologyRetainFields_Chrono() {
339 MonthDay base = new MonthDay(6, 6, COPTIC_PARIS);
340 MonthDay test = base.withChronologyRetainFields(BUDDHIST_TOKYO);
341 check(base, 6, 6);
342 assertEquals(COPTIC_UTC, base.getChronology());
343 check(test, 6, 6);
344 assertEquals(BUDDHIST_UTC, test.getChronology());
345 }
346
347 public void testWithChronologyRetainFields_sameChrono() {
348 MonthDay base = new MonthDay(6, 6, COPTIC_PARIS);
349 MonthDay test = base.withChronologyRetainFields(COPTIC_TOKYO);
350 assertSame(base, test);
351 }
352
353 public void testWithChronologyRetainFields_nullChrono() {
354 MonthDay base = new MonthDay(6, 6, COPTIC_PARIS);
355 MonthDay test = base.withChronologyRetainFields(null);
356 check(base, 6, 6);
357 assertEquals(COPTIC_UTC, base.getChronology());
358 check(test, 6, 6);
359 assertEquals(ISO_UTC, test.getChronology());
360 }
361
362
363 public void testWithField() {
364 MonthDay test = new MonthDay(9, 6);
365 MonthDay result = test.withField(DateTimeFieldType.monthOfYear(), 10);
366
367 assertEquals(new MonthDay(9, 6), test);
368 assertEquals(new MonthDay(10, 6), result);
369 }
370
371 public void testWithField_nullField() {
372 MonthDay test = new MonthDay(9, 6);
373 try {
374 test.withField(null, 6);
375 fail();
376 } catch (IllegalArgumentException ex) {}
377 }
378
379 public void testWithField_unknownField() {
380 MonthDay test = new MonthDay(9, 6);
381 try {
382 test.withField(DateTimeFieldType.hourOfDay(), 6);
383 fail();
384 } catch (IllegalArgumentException ex) {}
385 }
386
387 public void testWithField_same() {
388 MonthDay test = new MonthDay(9, 6);
389 MonthDay result = test.withField(DateTimeFieldType.monthOfYear(), 9);
390 assertEquals(new MonthDay(9, 6), test);
391 assertSame(test, result);
392 }
393
394
395 public void testWithFieldAdded() {
396 MonthDay test = new MonthDay(9, 6);
397 MonthDay result = test.withFieldAdded(DurationFieldType.months(), 1);
398
399 assertEquals(new MonthDay(9, 6), test);
400 assertEquals(new MonthDay(10, 6), result);
401 }
402
403 public void testWithFieldAdded_nullField_zero() {
404 MonthDay test = new MonthDay(9, 6);
405 try {
406 test.withFieldAdded(null, 0);
407 fail();
408 } catch (IllegalArgumentException ex) {}
409 }
410
411 public void testWithFieldAdded_nullField_nonZero() {
412 MonthDay test = new MonthDay(9, 6);
413 try {
414 test.withFieldAdded(null, 6);
415 fail();
416 } catch (IllegalArgumentException ex) {}
417 }
418
419 public void testWithFieldAdded_zero() {
420 MonthDay test = new MonthDay(9, 6);
421 MonthDay result = test.withFieldAdded(DurationFieldType.months(), 0);
422 assertSame(test, result);
423 }
424
425 public void testWithFieldAdded_unknownField() {
426 MonthDay test = new MonthDay(9, 6);
427 try {
428 test.withFieldAdded(DurationFieldType.hours(), 6);
429 fail();
430 } catch (IllegalArgumentException ex) {}
431 }
432
433
434 public void testPlus_RP() {
435 MonthDay test = new MonthDay(6, 5, BuddhistChronology.getInstance());
436 MonthDay result = test.plus(new Period(1, 2, 3, 4, 5, 6, 7, 8));
437 MonthDay expected = new MonthDay(8, 9, BuddhistChronology.getInstance());
438 assertEquals(expected, result);
439
440 result = test.plus((ReadablePeriod) null);
441 assertSame(test, result);
442 }
443
444 public void testPlusMonths_int() {
445 MonthDay test = new MonthDay(6, 5, BuddhistChronology.getInstance());
446 MonthDay result = test.plusMonths(1);
447 MonthDay expected = new MonthDay(7, 5, BuddhistChronology.getInstance());
448 assertEquals(expected, result);
449 }
450
451 public void testPlusMonths_int_fromLeap() {
452 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
453 MonthDay result = test.plusMonths(1);
454 MonthDay expected = new MonthDay(3, 29, ISOChronology.getInstance());
455 assertEquals(expected, result);
456 }
457
458 public void testPlusMonths_int_negativeFromLeap() {
459 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
460 MonthDay result = test.plusMonths(-1);
461 MonthDay expected = new MonthDay(1, 29, ISOChronology.getInstance());
462 assertEquals(expected, result);
463 }
464
465 public void testPlusMonths_int_endOfMonthAdjust() {
466 MonthDay test = new MonthDay(3, 31, ISOChronology.getInstanceUTC());
467 MonthDay result = test.plusMonths(1);
468 MonthDay expected = new MonthDay(4, 30, ISOChronology.getInstance());
469 assertEquals(expected, result);
470 }
471
472 public void testPlusMonths_int_negativeEndOfMonthAdjust() {
473 MonthDay test = new MonthDay(3, 31, ISOChronology.getInstanceUTC());
474 MonthDay result = test.plusMonths(-1);
475 MonthDay expected = new MonthDay(2, 29, ISOChronology.getInstance());
476 assertEquals(expected, result);
477 }
478
479 public void testPlusMonths_int_same() {
480 MonthDay test = new MonthDay(6, 5, ISO_UTC);
481 MonthDay result = test.plusMonths(0);
482 assertSame(test, result);
483 }
484
485 public void testPlusMonths_int_wrap() {
486 MonthDay test = new MonthDay(6, 5, ISO_UTC);
487 MonthDay result = test.plusMonths(10);
488 MonthDay expected = new MonthDay(4, 5, ISO_UTC);
489 assertEquals(expected, result);
490 }
491
492 public void testPlusMonths_int_adjust() {
493 MonthDay test = new MonthDay(7, 31, ISO_UTC);
494 MonthDay result = test.plusMonths(2);
495 MonthDay expected = new MonthDay(9, 30, ISO_UTC);
496 assertEquals(expected, result);
497 }
498
499
500 public void testPlusDays_int() {
501 MonthDay test = new MonthDay(5, 10, BuddhistChronology.getInstance());
502 MonthDay result = test.plusDays(1);
503 MonthDay expected = new MonthDay(5, 11, BuddhistChronology.getInstance());
504 assertEquals(expected, result);
505 }
506
507 public void testPlusDays_int_fromLeap() {
508 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
509 MonthDay result = test.plusDays(1);
510 MonthDay expected = new MonthDay(3, 1, ISOChronology.getInstance());
511 assertEquals(expected, result);
512 }
513
514 public void testPlusDays_int_negativeFromLeap() {
515 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
516 MonthDay result = test.plusDays(-1);
517 MonthDay expected = new MonthDay(2, 28, ISOChronology.getInstance());
518 assertEquals(expected, result);
519 }
520
521 public void testPlusDays_same() {
522 MonthDay test = new MonthDay(5, 10, BuddhistChronology.getInstance());
523 MonthDay result = test.plusDays(0);
524 assertSame(test, result);
525 }
526
527
528 public void testMinus_RP() {
529 MonthDay test = new MonthDay(6, 5, BuddhistChronology.getInstance());
530 MonthDay result = test.minus(new Period(1, 1, 1, 1, 1, 1, 1, 1));
531 MonthDay expected = new MonthDay(5, 4, BuddhistChronology.getInstance());
532 assertEquals(expected, result);
533
534 result = test.minus((ReadablePeriod) null);
535 assertSame(test, result);
536 }
537
538 public void testMinusMonths_int() {
539 MonthDay test = new MonthDay(6, 5, BuddhistChronology.getInstance());
540 MonthDay result = test.minusMonths(1);
541 MonthDay expected = new MonthDay(5, 5, BuddhistChronology.getInstance());
542 assertEquals(expected, result);
543 }
544
545 public void testMinusMonths_int_fromLeap() {
546 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
547 MonthDay result = test.minusMonths(1);
548 MonthDay expected = new MonthDay(1, 29, ISOChronology.getInstance());
549 assertEquals(expected, result);
550 }
551
552 public void testMinusMonths_int_negativeFromLeap() {
553 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
554 MonthDay result = test.minusMonths(-1);
555 MonthDay expected = new MonthDay(3, 29, ISOChronology.getInstance());
556 assertEquals(expected, result);
557 }
558
559 public void testMinusMonths_int_endOfMonthAdjust() {
560 MonthDay test = new MonthDay(3, 31, ISOChronology.getInstanceUTC());
561 MonthDay result = test.minusMonths(1);
562 MonthDay expected = new MonthDay(2, 29, ISOChronology.getInstance());
563 assertEquals(expected, result);
564 }
565
566 public void testMinusMonths_int_negativeEndOfMonthAdjust() {
567 MonthDay test = new MonthDay(3, 31, ISOChronology.getInstanceUTC());
568 MonthDay result = test.minusMonths(-1);
569 MonthDay expected = new MonthDay(4, 30, ISOChronology.getInstance());
570 assertEquals(expected, result);
571 }
572
573 public void testMinusMonths_int_same() {
574 MonthDay test = new MonthDay(6, 5, ISO_UTC);
575 MonthDay result = test.minusMonths(0);
576 assertSame(test, result);
577 }
578
579 public void testMinusMonths_int_wrap() {
580 MonthDay test = new MonthDay(6, 5, ISO_UTC);
581 MonthDay result = test.minusMonths(10);
582 MonthDay expected = new MonthDay(8, 5, ISO_UTC);
583 assertEquals(expected, result);
584 }
585
586 public void testMinusMonths_int_adjust() {
587 MonthDay test = new MonthDay(7, 31, ISO_UTC);
588 MonthDay result = test.minusMonths(3);
589 MonthDay expected = new MonthDay(4, 30, ISO_UTC);
590 assertEquals(expected, result);
591 }
592
593
594 public void testMinusDays_int() {
595 MonthDay test = new MonthDay(5, 11, BuddhistChronology.getInstance());
596 MonthDay result = test.minusDays(1);
597 MonthDay expected = new MonthDay(5, 10, BuddhistChronology.getInstance());
598 assertEquals(expected, result);
599 }
600
601 public void testMinusDays_int_fromLeap() {
602 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
603 MonthDay result = test.minusDays(1);
604 MonthDay expected = new MonthDay(2, 28, ISOChronology.getInstance());
605 assertEquals(expected, result);
606 }
607
608 public void testMinusDays_int_negativeFromLeap() {
609 MonthDay test = new MonthDay(2, 29, ISOChronology.getInstanceUTC());
610 MonthDay result = test.minusDays(-1);
611 MonthDay expected = new MonthDay(3, 1, ISOChronology.getInstance());
612 assertEquals(expected, result);
613 }
614
615 public void testMinusDays_same() {
616 MonthDay test = new MonthDay(5, 11, BuddhistChronology.getInstance());
617 MonthDay result = test.minusDays(0);
618 assertSame(test, result);
619 }
620
621
622 public void testToLocalDate() {
623 MonthDay base = new MonthDay(6, 6, COPTIC_UTC);
624 LocalDate test = base.toLocalDate(2009);
625 assertEquals(new LocalDate(2009, 6, 6, COPTIC_UTC), test);
626 try {
627 base.toLocalDate(0);
628 fail();
629 } catch (IllegalArgumentException ex) {}
630 }
631
632
633 public void testToDateTime_RI() {
634 MonthDay base = new MonthDay(6, 6, COPTIC_PARIS);
635 DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7);
636
637 DateTime test = base.toDateTime(dt);
638 check(base, 6, 6);
639 DateTime expected = dt;
640 expected = expected.monthOfYear().setCopy(6);
641 expected = expected.dayOfMonth().setCopy(6);
642 assertEquals(expected, test);
643 }
644
645 public void testToDateTime_nullRI() {
646 MonthDay base = new MonthDay(6, 6);
647 DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7);
648 DateTimeUtils.setCurrentMillisFixed(dt.getMillis());
649
650 DateTime test = base.toDateTime((ReadableInstant) null);
651 check(base, 6, 6);
652 DateTime expected = dt;
653 expected = expected.monthOfYear().setCopy(6);
654 expected = expected.dayOfMonth().setCopy(6);
655 assertEquals(expected, test);
656 }
657
658
659 public void testWithers() {
660 MonthDay test = new MonthDay(10, 6);
661 check(test.withMonthOfYear(5), 5, 6);
662 check(test.withDayOfMonth(2), 10, 2);
663 try {
664 test.withMonthOfYear(0);
665 fail();
666 } catch (IllegalArgumentException ex) {}
667 try {
668 test.withMonthOfYear(13);
669 fail();
670 } catch (IllegalArgumentException ex) {}
671 }
672
673
674 public void testProperty() {
675 MonthDay test = new MonthDay(6, 6);
676 assertEquals(test.monthOfYear(), test.property(DateTimeFieldType.monthOfYear()));
677 assertEquals(test.dayOfMonth(), test.property(DateTimeFieldType.dayOfMonth()));
678 try {
679 test.property(DateTimeFieldType.millisOfDay());
680 fail();
681 } catch (IllegalArgumentException ex) {}
682 try {
683 test.property(null);
684 fail();
685 } catch (IllegalArgumentException ex) {}
686 }
687
688
689 public void testSerialization() throws Exception {
690 MonthDay test = new MonthDay(5, 6, COPTIC_PARIS);
691
692 ByteArrayOutputStream baos = new ByteArrayOutputStream();
693 ObjectOutputStream oos = new ObjectOutputStream(baos);
694 oos.writeObject(test);
695 byte[] bytes = baos.toByteArray();
696 oos.close();
697
698 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
699 ObjectInputStream ois = new ObjectInputStream(bais);
700 MonthDay result = (MonthDay) ois.readObject();
701 ois.close();
702
703 assertEquals(test, result);
704 assertTrue(Arrays.equals(test.getValues(), result.getValues()));
705 assertTrue(Arrays.equals(test.getFields(), result.getFields()));
706 assertEquals(test.getChronology(), result.getChronology());
707 }
708
709
710 public void testToString() {
711 MonthDay test = new MonthDay(5, 6);
712 assertEquals("--05-06", test.toString());
713 }
714
715
716 public void testToString_String() {
717 MonthDay test = new MonthDay(5, 6);
718 assertEquals("05 \ufffd\ufffd", test.toString("MM HH"));
719 assertEquals("--05-06", test.toString((String) null));
720 }
721
722
723 public void testToString_String_Locale() {
724 MonthDay test = new MonthDay(5, 6);
725 assertEquals("\ufffd 6/5", test.toString("EEE d/M", Locale.ENGLISH));
726 assertEquals("\ufffd 6/5", test.toString("EEE d/M", Locale.FRENCH));
727 assertEquals("--05-06", test.toString(null, Locale.ENGLISH));
728 assertEquals("\ufffd 6/5", test.toString("EEE d/M", null));
729 assertEquals("--05-06", test.toString(null, null));
730 }
731
732
733 public void testToString_DTFormatter() {
734 MonthDay test = new MonthDay(5, 6);
735 assertEquals("05 \ufffd\ufffd", test.toString(DateTimeFormat.forPattern("MM HH")));
736 assertEquals("--05-06", test.toString((DateTimeFormatter) null));
737 }
738
739
740 private void check(MonthDay test, int month, int day) {
741 assertEquals(month, test.getMonthOfYear());
742 assertEquals(day, test.getDayOfMonth());
743 }
744 }