001 /*
002 * Copyright 2001-2010 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 java.io.ByteArrayInputStream;
019 import java.io.ByteArrayOutputStream;
020 import java.io.ObjectInputStream;
021 import java.io.ObjectOutputStream;
022 import java.util.Arrays;
023 import java.util.Calendar;
024 import java.util.Date;
025 import java.util.GregorianCalendar;
026 import java.util.Locale;
027 import java.util.SimpleTimeZone;
028 import java.util.TimeZone;
029
030 import junit.framework.TestCase;
031 import junit.framework.TestSuite;
032
033 import org.joda.time.chrono.BuddhistChronology;
034 import org.joda.time.chrono.CopticChronology;
035 import org.joda.time.chrono.GJChronology;
036 import org.joda.time.chrono.GregorianChronology;
037 import org.joda.time.chrono.ISOChronology;
038 import org.joda.time.chrono.LenientChronology;
039 import org.joda.time.chrono.StrictChronology;
040 import org.joda.time.format.DateTimeFormat;
041 import org.joda.time.format.DateTimeFormatter;
042
043 /**
044 * This class is a Junit unit test for LocalDate.
045 *
046 * @author Stephen Colebourne
047 */
048 public class TestLocalDate_Basics extends TestCase {
049
050 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
051 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
052 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
053 // private static final int OFFSET = 1;
054 private static final GJChronology GJ_UTC = GJChronology.getInstanceUTC();
055 private static final Chronology COPTIC_PARIS = CopticChronology.getInstance(PARIS);
056 private static final Chronology COPTIC_LONDON = CopticChronology.getInstance(LONDON);
057 private static final Chronology COPTIC_TOKYO = CopticChronology.getInstance(TOKYO);
058 private static final Chronology COPTIC_UTC = CopticChronology.getInstanceUTC();
059 // private static final Chronology ISO_PARIS = ISOChronology.getInstance(PARIS);
060 private static final Chronology ISO_LONDON = ISOChronology.getInstance(LONDON);
061 // private static final Chronology ISO_TOKYO = ISOChronology.getInstance(TOKYO);
062 // private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC();
063 private static final Chronology BUDDHIST_PARIS = BuddhistChronology.getInstance(PARIS);
064 private static final Chronology BUDDHIST_LONDON = BuddhistChronology.getInstance(LONDON);
065 private static final Chronology BUDDHIST_TOKYO = BuddhistChronology.getInstance(TOKYO);
066 // private static final Chronology BUDDHIST_UTC = BuddhistChronology.getInstanceUTC();
067
068 /** Mock zone simulating Asia/Gaza cutover at midnight 2007-04-01 */
069 private static long CUTOVER_GAZA = 1175378400000L;
070 private static int OFFSET_GAZA = 7200000; // +02:00
071 private static final DateTimeZone MOCK_GAZA = new MockZone(CUTOVER_GAZA, OFFSET_GAZA, 3600);
072
073 private long TEST_TIME_NOW =
074 (31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
075
076 // private long TEST_TIME1 =
077 // (31L + 28L + 31L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY
078 // + 12L * DateTimeConstants.MILLIS_PER_HOUR
079 // + 24L * DateTimeConstants.MILLIS_PER_MINUTE;
080 //
081 // private long TEST_TIME2 =
082 // (365L + 31L + 28L + 31L + 30L + 7L -1L) * DateTimeConstants.MILLIS_PER_DAY
083 // + 14L * DateTimeConstants.MILLIS_PER_HOUR
084 // + 28L * DateTimeConstants.MILLIS_PER_MINUTE;
085
086 private DateTimeZone zone = null;
087
088 private Locale systemDefaultLocale = null;
089
090 public static void main(String[] args) {
091 junit.textui.TestRunner.run(suite());
092 }
093
094 public static TestSuite suite() {
095 return new TestSuite(TestLocalDate_Basics.class);
096 }
097
098 public TestLocalDate_Basics(String name) {
099 super(name);
100 }
101
102 protected void setUp() throws Exception {
103 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
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 LocalDate test = new LocalDate();
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 try {
129 test.get(null);
130 fail();
131 } catch (IllegalArgumentException ex) {}
132 try {
133 test.get(DateTimeFieldType.hourOfDay());
134 fail();
135 } catch (IllegalArgumentException ex) {}
136 }
137
138 public void testSize() {
139 LocalDate test = new LocalDate();
140 assertEquals(3, test.size());
141 }
142
143 public void testGetFieldType_int() {
144 LocalDate test = new LocalDate(COPTIC_PARIS);
145 assertSame(DateTimeFieldType.year(), test.getFieldType(0));
146 assertSame(DateTimeFieldType.monthOfYear(), test.getFieldType(1));
147 assertSame(DateTimeFieldType.dayOfMonth(), test.getFieldType(2));
148 try {
149 test.getFieldType(-1);
150 } catch (IndexOutOfBoundsException ex) {}
151 try {
152 test.getFieldType(3);
153 } catch (IndexOutOfBoundsException ex) {}
154 }
155
156 public void testGetFieldTypes() {
157 LocalDate test = new LocalDate(COPTIC_PARIS);
158 DateTimeFieldType[] fields = test.getFieldTypes();
159 assertSame(DateTimeFieldType.year(), fields[0]);
160 assertSame(DateTimeFieldType.monthOfYear(), fields[1]);
161 assertSame(DateTimeFieldType.dayOfMonth(), fields[2]);
162 assertNotSame(test.getFieldTypes(), test.getFieldTypes());
163 }
164
165 public void testGetField_int() {
166 LocalDate test = new LocalDate(COPTIC_PARIS);
167 assertSame(COPTIC_UTC.year(), test.getField(0));
168 assertSame(COPTIC_UTC.monthOfYear(), test.getField(1));
169 assertSame(COPTIC_UTC.dayOfMonth(), test.getField(2));
170 try {
171 test.getField(-1);
172 } catch (IndexOutOfBoundsException ex) {}
173 try {
174 test.getField(3);
175 } catch (IndexOutOfBoundsException ex) {}
176 }
177
178 public void testGetFields() {
179 LocalDate test = new LocalDate(COPTIC_PARIS);
180 DateTimeField[] fields = test.getFields();
181 assertSame(COPTIC_UTC.year(), fields[0]);
182 assertSame(COPTIC_UTC.monthOfYear(), fields[1]);
183 assertSame(COPTIC_UTC.dayOfMonth(), fields[2]);
184 assertNotSame(test.getFields(), test.getFields());
185 }
186
187 public void testGetValue_int() {
188 LocalDate test = new LocalDate();
189 assertEquals(1970, test.getValue(0));
190 assertEquals(6, test.getValue(1));
191 assertEquals(9, test.getValue(2));
192 try {
193 test.getValue(-1);
194 } catch (IndexOutOfBoundsException ex) {}
195 try {
196 test.getValue(3);
197 } catch (IndexOutOfBoundsException ex) {}
198 }
199
200 public void testGetValues() {
201 LocalDate test = new LocalDate();
202 int[] values = test.getValues();
203 assertEquals(1970, values[0]);
204 assertEquals(6, values[1]);
205 assertEquals(9, values[2]);
206 assertNotSame(test.getValues(), test.getValues());
207 }
208
209 public void testIsSupported_DateTimeFieldType() {
210 LocalDate test = new LocalDate(COPTIC_PARIS);
211 assertEquals(true, test.isSupported(DateTimeFieldType.year()));
212 assertEquals(true, test.isSupported(DateTimeFieldType.monthOfYear()));
213 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfMonth()));
214 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfWeek()));
215 assertEquals(true, test.isSupported(DateTimeFieldType.dayOfYear()));
216 assertEquals(true, test.isSupported(DateTimeFieldType.weekOfWeekyear()));
217 assertEquals(true, test.isSupported(DateTimeFieldType.weekyear()));
218 assertEquals(true, test.isSupported(DateTimeFieldType.yearOfCentury()));
219 assertEquals(true, test.isSupported(DateTimeFieldType.yearOfEra()));
220 assertEquals(true, test.isSupported(DateTimeFieldType.centuryOfEra()));
221 assertEquals(true, test.isSupported(DateTimeFieldType.weekyearOfCentury()));
222 assertEquals(true, test.isSupported(DateTimeFieldType.era()));
223 assertEquals(false, test.isSupported(DateTimeFieldType.hourOfDay()));
224 assertEquals(false, test.isSupported((DateTimeFieldType) null));
225 }
226
227 public void testIsSupported_DurationFieldType() {
228 LocalDate test = new LocalDate(1970, 6, 9);
229 assertEquals(false, test.isSupported(DurationFieldType.eras()));
230 assertEquals(true, test.isSupported(DurationFieldType.centuries()));
231 assertEquals(true, test.isSupported(DurationFieldType.years()));
232 assertEquals(true, test.isSupported(DurationFieldType.months()));
233 assertEquals(true, test.isSupported(DurationFieldType.weekyears()));
234 assertEquals(true, test.isSupported(DurationFieldType.weeks()));
235 assertEquals(true, test.isSupported(DurationFieldType.days()));
236
237 assertEquals(false, test.isSupported(DurationFieldType.hours()));
238 assertEquals(false, test.isSupported((DurationFieldType) null));
239 }
240
241 public void testEqualsHashCode() {
242 LocalDate test1 = new LocalDate(1970, 6, 9, COPTIC_PARIS);
243 LocalDate test2 = new LocalDate(1970, 6, 9, COPTIC_PARIS);
244 assertEquals(true, test1.equals(test2));
245 assertEquals(true, test2.equals(test1));
246 assertEquals(true, test1.equals(test1));
247 assertEquals(true, test2.equals(test2));
248 assertEquals(true, test1.hashCode() == test2.hashCode());
249 assertEquals(true, test1.hashCode() == test1.hashCode());
250 assertEquals(true, test2.hashCode() == test2.hashCode());
251
252 LocalDate test3 = new LocalDate(1971, 6, 9);
253 assertEquals(false, test1.equals(test3));
254 assertEquals(false, test2.equals(test3));
255 assertEquals(false, test3.equals(test1));
256 assertEquals(false, test3.equals(test2));
257 assertEquals(false, test1.hashCode() == test3.hashCode());
258 assertEquals(false, test2.hashCode() == test3.hashCode());
259
260 assertEquals(false, test1.equals("Hello"));
261 assertEquals(true, test1.equals(new MockInstant()));
262 assertEquals(true, test1.equals(new YearMonthDay(1970, 6, 9, COPTIC_PARIS)));
263 assertEquals(true, test1.hashCode() == new YearMonthDay(1970, 6, 9, COPTIC_PARIS).hashCode());
264 assertEquals(false, test1.equals(MockPartial.EMPTY_INSTANCE));
265 }
266
267 class MockInstant extends MockPartial {
268 public Chronology getChronology() {
269 return COPTIC_UTC;
270 }
271 public DateTimeField[] getFields() {
272 return new DateTimeField[] {
273 COPTIC_UTC.year(),
274 COPTIC_UTC.monthOfYear(),
275 COPTIC_UTC.dayOfMonth(),
276 };
277 }
278 public int[] getValues() {
279 return new int[] {1970, 6, 9};
280 }
281 }
282
283 public void testEqualsHashCodeLenient() {
284 LocalDate test1 = new LocalDate(1970, 6, 9, LenientChronology.getInstance(COPTIC_PARIS));
285 LocalDate test2 = new LocalDate(1970, 6, 9, LenientChronology.getInstance(COPTIC_PARIS));
286 assertEquals(true, test1.equals(test2));
287 assertEquals(true, test2.equals(test1));
288 assertEquals(true, test1.equals(test1));
289 assertEquals(true, test2.equals(test2));
290 assertEquals(true, test1.hashCode() == test2.hashCode());
291 assertEquals(true, test1.hashCode() == test1.hashCode());
292 assertEquals(true, test2.hashCode() == test2.hashCode());
293 }
294
295 public void testEqualsHashCodeStrict() {
296 LocalDate test1 = new LocalDate(1970, 6, 9, StrictChronology.getInstance(COPTIC_PARIS));
297 LocalDate test2 = new LocalDate(1970, 6, 9, StrictChronology.getInstance(COPTIC_PARIS));
298 assertEquals(true, test1.equals(test2));
299 assertEquals(true, test2.equals(test1));
300 assertEquals(true, test1.equals(test1));
301 assertEquals(true, test2.equals(test2));
302 assertEquals(true, test1.hashCode() == test2.hashCode());
303 assertEquals(true, test1.hashCode() == test1.hashCode());
304 assertEquals(true, test2.hashCode() == test2.hashCode());
305 }
306
307 public void testEqualsHashCodeAPI() {
308 LocalDate test = new LocalDate(1970, 6, 9, COPTIC_PARIS);
309 int expected = 157;
310 expected = 23 * expected + 1970;
311 expected = 23 * expected + COPTIC_UTC.year().getType().hashCode();
312 expected = 23 * expected + 6;
313 expected = 23 * expected + COPTIC_UTC.monthOfYear().getType().hashCode();
314 expected = 23 * expected + 9;
315 expected = 23 * expected + COPTIC_UTC.dayOfMonth().getType().hashCode();
316 expected += COPTIC_UTC.hashCode();
317 assertEquals(expected, test.hashCode());
318 }
319
320 //-----------------------------------------------------------------------
321 public void testCompareTo() {
322 LocalDate test1 = new LocalDate(2005, 6, 2);
323 LocalDate test1a = new LocalDate(2005, 6, 2);
324 assertEquals(0, test1.compareTo(test1a));
325 assertEquals(0, test1a.compareTo(test1));
326 assertEquals(0, test1.compareTo(test1));
327 assertEquals(0, test1a.compareTo(test1a));
328
329 LocalDate test2 = new LocalDate(2005, 7, 2);
330 assertEquals(-1, test1.compareTo(test2));
331 assertEquals(+1, test2.compareTo(test1));
332
333 LocalDate test3 = new LocalDate(2005, 7, 2, GregorianChronology.getInstanceUTC());
334 assertEquals(-1, test1.compareTo(test3));
335 assertEquals(+1, test3.compareTo(test1));
336 assertEquals(0, test3.compareTo(test2));
337
338 DateTimeFieldType[] types = new DateTimeFieldType[] {
339 DateTimeFieldType.year(),
340 DateTimeFieldType.monthOfYear(),
341 DateTimeFieldType.dayOfMonth(),
342 };
343 int[] values = new int[] {2005, 6, 2};
344 Partial p = new Partial(types, values);
345 assertEquals(0, test1.compareTo(p));
346 assertEquals(0, test1.compareTo(new YearMonthDay(2005, 6, 2)));
347 try {
348 test1.compareTo(null);
349 fail();
350 } catch (NullPointerException ex) {}
351 // try {
352 // test1.compareTo(new Date());
353 // fail();
354 // } catch (ClassCastException ex) {}
355 try {
356 test1.compareTo(new TimeOfDay());
357 fail();
358 } catch (ClassCastException ex) {}
359 Partial partial = new Partial()
360 .with(DateTimeFieldType.centuryOfEra(), 1)
361 .with(DateTimeFieldType.halfdayOfDay(), 0)
362 .with(DateTimeFieldType.dayOfMonth(), 9);
363 try {
364 new LocalDate(1970, 6, 9).compareTo(partial);
365 fail();
366 } catch (ClassCastException ex) {}
367 }
368
369 //-----------------------------------------------------------------------
370 public void testIsEqual_LocalDate() {
371 LocalDate test1 = new LocalDate(2005, 6, 2);
372 LocalDate test1a = new LocalDate(2005, 6, 2);
373 assertEquals(true, test1.isEqual(test1a));
374 assertEquals(true, test1a.isEqual(test1));
375 assertEquals(true, test1.isEqual(test1));
376 assertEquals(true, test1a.isEqual(test1a));
377
378 LocalDate test2 = new LocalDate(2005, 7, 2);
379 assertEquals(false, test1.isEqual(test2));
380 assertEquals(false, test2.isEqual(test1));
381
382 LocalDate test3 = new LocalDate(2005, 7, 2, GregorianChronology.getInstanceUTC());
383 assertEquals(false, test1.isEqual(test3));
384 assertEquals(false, test3.isEqual(test1));
385 assertEquals(true, test3.isEqual(test2));
386
387 try {
388 new LocalDate(2005, 7, 2).isEqual(null);
389 fail();
390 } catch (IllegalArgumentException ex) {}
391 }
392
393 //-----------------------------------------------------------------------
394 public void testIsBefore_LocalDate() {
395 LocalDate test1 = new LocalDate(2005, 6, 2);
396 LocalDate test1a = new LocalDate(2005, 6, 2);
397 assertEquals(false, test1.isBefore(test1a));
398 assertEquals(false, test1a.isBefore(test1));
399 assertEquals(false, test1.isBefore(test1));
400 assertEquals(false, test1a.isBefore(test1a));
401
402 LocalDate test2 = new LocalDate(2005, 7, 2);
403 assertEquals(true, test1.isBefore(test2));
404 assertEquals(false, test2.isBefore(test1));
405
406 LocalDate test3 = new LocalDate(2005, 7, 2, GregorianChronology.getInstanceUTC());
407 assertEquals(true, test1.isBefore(test3));
408 assertEquals(false, test3.isBefore(test1));
409 assertEquals(false, test3.isBefore(test2));
410
411 try {
412 new LocalDate(2005, 7, 2).isBefore(null);
413 fail();
414 } catch (IllegalArgumentException ex) {}
415 }
416
417 //-----------------------------------------------------------------------
418 public void testIsAfter_LocalDate() {
419 LocalDate test1 = new LocalDate(2005, 6, 2);
420 LocalDate test1a = new LocalDate(2005, 6, 2);
421 assertEquals(false, test1.isAfter(test1a));
422 assertEquals(false, test1a.isAfter(test1));
423 assertEquals(false, test1.isAfter(test1));
424 assertEquals(false, test1a.isAfter(test1a));
425
426 LocalDate test2 = new LocalDate(2005, 7, 2);
427 assertEquals(false, test1.isAfter(test2));
428 assertEquals(true, test2.isAfter(test1));
429
430 LocalDate test3 = new LocalDate(2005, 7, 2, GregorianChronology.getInstanceUTC());
431 assertEquals(false, test1.isAfter(test3));
432 assertEquals(true, test3.isAfter(test1));
433 assertEquals(false, test3.isAfter(test2));
434
435 try {
436 new LocalDate(2005, 7, 2).isAfter(null);
437 fail();
438 } catch (IllegalArgumentException ex) {}
439 }
440
441 //-----------------------------------------------------------------------
442 public void testWithField_DateTimeFieldType_int_1() {
443 LocalDate test = new LocalDate(2004, 6, 9);
444 LocalDate result = test.withField(DateTimeFieldType.year(), 2006);
445
446 assertEquals(new LocalDate(2004, 6, 9), test);
447 assertEquals(new LocalDate(2006, 6, 9), result);
448 }
449
450 public void testWithField_DateTimeFieldType_int_2() {
451 LocalDate test = new LocalDate(2004, 6, 9);
452 try {
453 test.withField(null, 6);
454 fail();
455 } catch (IllegalArgumentException ex) {}
456 }
457
458 public void testWithField_DateTimeFieldType_int_3() {
459 LocalDate test = new LocalDate(2004, 6, 9);
460 try {
461 test.withField(DateTimeFieldType.hourOfDay(), 6);
462 fail();
463 } catch (IllegalArgumentException ex) {}
464 }
465
466 public void testWithField_DateTimeFieldType_int_4() {
467 LocalDate test = new LocalDate(2004, 6, 9);
468 LocalDate result = test.withField(DateTimeFieldType.year(), 2004);
469 assertEquals(new LocalDate(2004, 6, 9), test);
470 assertSame(test, result);
471 }
472
473 //-----------------------------------------------------------------------
474 public void testWithFieldAdded_DurationFieldType_int_1() {
475 LocalDate test = new LocalDate(2004, 6, 9);
476 LocalDate result = test.withFieldAdded(DurationFieldType.years(), 6);
477
478 assertEquals(new LocalDate(2004, 6, 9), test);
479 assertEquals(new LocalDate(2010, 6, 9), result);
480 }
481
482 public void testWithFieldAdded_DurationFieldType_int_2() {
483 LocalDate test = new LocalDate(2004, 6, 9);
484 try {
485 test.withFieldAdded(null, 0);
486 fail();
487 } catch (IllegalArgumentException ex) {}
488 }
489
490 public void testWithFieldAdded_DurationFieldType_int_3() {
491 LocalDate test = new LocalDate(2004, 6, 9);
492 try {
493 test.withFieldAdded(null, 6);
494 fail();
495 } catch (IllegalArgumentException ex) {}
496 }
497
498 public void testWithFieldAdded_DurationFieldType_int_4() {
499 LocalDate test = new LocalDate(2004, 6, 9);
500 LocalDate result = test.withFieldAdded(DurationFieldType.years(), 0);
501 assertSame(test, result);
502 }
503
504 public void testWithFieldAdded_DurationFieldType_int_5() {
505 LocalDate test = new LocalDate(2004, 6, 9);
506 try {
507 test.withFieldAdded(DurationFieldType.hours(), 6);
508 fail();
509 } catch (IllegalArgumentException ex) {}
510 }
511
512 //-----------------------------------------------------------------------
513 public void testPlus_RP() {
514 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
515 LocalDate result = test.plus(new Period(1, 2, 3, 4, 29, 6, 7, 8));
516 LocalDate expected = new LocalDate(2003, 7, 28, BUDDHIST_LONDON);
517 assertEquals(expected, result);
518
519 result = test.plus((ReadablePeriod) null);
520 assertSame(test, result);
521 }
522
523 public void testPlusYears_int() {
524 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
525 LocalDate result = test.plusYears(1);
526 LocalDate expected = new LocalDate(2003, 5, 3, BUDDHIST_LONDON);
527 assertEquals(expected, result);
528
529 result = test.plusYears(0);
530 assertSame(test, result);
531 }
532
533 public void testPlusMonths_int() {
534 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
535 LocalDate result = test.plusMonths(1);
536 LocalDate expected = new LocalDate(2002, 6, 3, BUDDHIST_LONDON);
537 assertEquals(expected, result);
538
539 result = test.plusMonths(0);
540 assertSame(test, result);
541 }
542
543 public void testPlusWeeks_int() {
544 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
545 LocalDate result = test.plusWeeks(1);
546 LocalDate expected = new LocalDate(2002, 5, 10, BUDDHIST_LONDON);
547 assertEquals(expected, result);
548
549 result = test.plusWeeks(0);
550 assertSame(test, result);
551 }
552
553 public void testPlusDays_int() {
554 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
555 LocalDate result = test.plusDays(1);
556 LocalDate expected = new LocalDate(2002, 5, 4, BUDDHIST_LONDON);
557 assertEquals(expected, result);
558
559 result = test.plusDays(0);
560 assertSame(test, result);
561 }
562
563 //-----------------------------------------------------------------------
564 public void testMinus_RP() {
565 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
566 LocalDate result = test.minus(new Period(1, 1, 1, 1, 1, 1, 1, 1));
567
568 // TODO breaks because it subtracts millis now, and thus goes
569 // into the previous day
570
571 LocalDate expected = new LocalDate(2001, 3, 26, BUDDHIST_LONDON);
572 assertEquals(expected, result);
573
574 result = test.minus((ReadablePeriod) null);
575 assertSame(test, result);
576 }
577
578 public void testMinusYears_int() {
579 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
580 LocalDate result = test.minusYears(1);
581 LocalDate expected = new LocalDate(2001, 5, 3, BUDDHIST_LONDON);
582 assertEquals(expected, result);
583
584 result = test.minusYears(0);
585 assertSame(test, result);
586 }
587
588 public void testMinusMonths_int() {
589 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
590 LocalDate result = test.minusMonths(1);
591 LocalDate expected = new LocalDate(2002, 4, 3, BUDDHIST_LONDON);
592 assertEquals(expected, result);
593
594 result = test.minusMonths(0);
595 assertSame(test, result);
596 }
597
598 public void testMinusWeeks_int() {
599 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
600 LocalDate result = test.minusWeeks(1);
601 LocalDate expected = new LocalDate(2002, 4, 26, BUDDHIST_LONDON);
602 assertEquals(expected, result);
603
604 result = test.minusWeeks(0);
605 assertSame(test, result);
606 }
607
608 public void testMinusDays_int() {
609 LocalDate test = new LocalDate(2002, 5, 3, BUDDHIST_LONDON);
610 LocalDate result = test.minusDays(1);
611 LocalDate expected = new LocalDate(2002, 5, 2, BUDDHIST_LONDON);
612 assertEquals(expected, result);
613
614 result = test.minusDays(0);
615 assertSame(test, result);
616 }
617
618 //-----------------------------------------------------------------------
619 public void testGetters() {
620 LocalDate test = new LocalDate(1970, 6, 9, GJ_UTC);
621 assertEquals(1970, test.getYear());
622 assertEquals(6, test.getMonthOfYear());
623 assertEquals(9, test.getDayOfMonth());
624 assertEquals(160, test.getDayOfYear());
625 assertEquals(2, test.getDayOfWeek());
626 assertEquals(24, test.getWeekOfWeekyear());
627 assertEquals(1970, test.getWeekyear());
628 assertEquals(70, test.getYearOfCentury());
629 assertEquals(20, test.getCenturyOfEra());
630 assertEquals(1970, test.getYearOfEra());
631 assertEquals(DateTimeConstants.AD, test.getEra());
632 }
633
634 //-----------------------------------------------------------------------
635 public void testWithers() {
636 LocalDate test = new LocalDate(1970, 6, 9, GJ_UTC);
637 check(test.withYear(2000), 2000, 6, 9);
638 check(test.withMonthOfYear(2), 1970, 2, 9);
639 check(test.withDayOfMonth(2), 1970, 6, 2);
640 check(test.withDayOfYear(6), 1970, 1, 6);
641 check(test.withDayOfWeek(6), 1970, 6, 13);
642 check(test.withWeekOfWeekyear(6), 1970, 2, 3);
643 check(test.withWeekyear(1971), 1971, 6, 15);
644 check(test.withYearOfCentury(60), 1960, 6, 9);
645 check(test.withCenturyOfEra(21), 2070, 6, 9);
646 check(test.withYearOfEra(1066), 1066, 6, 9);
647 check(test.withEra(DateTimeConstants.BC), -1970, 6, 9);
648 try {
649 test.withMonthOfYear(0);
650 fail();
651 } catch (IllegalArgumentException ex) {}
652 try {
653 test.withMonthOfYear(13);
654 fail();
655 } catch (IllegalArgumentException ex) {}
656 }
657
658 //-----------------------------------------------------------------------
659 public void testToDateTimeAtStartOfDay() {
660 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
661
662 DateTime test = base.toDateTimeAtStartOfDay();
663 check(base, 2005, 6, 9);
664 assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_LONDON), test);
665 }
666
667 public void testToDateTimeAtStartOfDay_avoidDST() {
668 LocalDate base = new LocalDate(2007, 4, 1);
669
670 DateTimeZone.setDefault(MOCK_GAZA);
671 DateTime test = base.toDateTimeAtStartOfDay();
672 check(base, 2007, 4, 1);
673 assertEquals(new DateTime(2007, 4, 1, 1, 0, 0, 0, MOCK_GAZA), test);
674 }
675
676 //-----------------------------------------------------------------------
677 public void testToDateTimeAtStartOfDay_Zone() {
678 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
679
680 DateTime test = base.toDateTimeAtStartOfDay(TOKYO);
681 check(base, 2005, 6, 9);
682 assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_TOKYO), test);
683 }
684
685 public void testToDateTimeAtStartOfDay_Zone_avoidDST() {
686 LocalDate base = new LocalDate(2007, 4, 1);
687
688 DateTime test = base.toDateTimeAtStartOfDay(MOCK_GAZA);
689 check(base, 2007, 4, 1);
690 assertEquals(new DateTime(2007, 4, 1, 1, 0, 0, 0, MOCK_GAZA), test);
691 }
692
693 public void testToDateTimeAtStartOfDay_nullZone() {
694 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
695
696 DateTime test = base.toDateTimeAtStartOfDay((DateTimeZone) null);
697 check(base, 2005, 6, 9);
698 assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_LONDON), test);
699 }
700
701 //-----------------------------------------------------------------------
702 @SuppressWarnings("deprecation")
703 public void testToDateTimeAtMidnight() {
704 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
705
706 DateTime test = base.toDateTimeAtMidnight();
707 check(base, 2005, 6, 9);
708 assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_LONDON), test);
709 }
710
711 //-----------------------------------------------------------------------
712 @SuppressWarnings("deprecation")
713 public void testToDateTimeAtMidnight_Zone() {
714 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
715
716 DateTime test = base.toDateTimeAtMidnight(TOKYO);
717 check(base, 2005, 6, 9);
718 assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_TOKYO), test);
719 }
720
721 @SuppressWarnings("deprecation")
722 public void testToDateTimeAtMidnight_nullZone() {
723 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
724
725 DateTime test = base.toDateTimeAtMidnight((DateTimeZone) null);
726 check(base, 2005, 6, 9);
727 assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_LONDON), test);
728 }
729
730 //-----------------------------------------------------------------------
731 public void testToDateTimeAtCurrentTime() {
732 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
733 DateTime dt = new DateTime(2004, 6, 9, 6, 7, 8, 9);
734 DateTimeUtils.setCurrentMillisFixed(dt.getMillis());
735
736 DateTime test = base.toDateTimeAtCurrentTime();
737 check(base, 2005, 6, 9);
738 DateTime expected = new DateTime(dt.getMillis(), COPTIC_LONDON);
739 expected = expected.year().setCopy(2005);
740 expected = expected.monthOfYear().setCopy(6);
741 expected = expected.dayOfMonth().setCopy(9);
742 assertEquals(expected, test);
743 }
744
745 //-----------------------------------------------------------------------
746 public void testToDateTimeAtCurrentTime_Zone() {
747 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
748 DateTime dt = new DateTime(2004, 6, 9, 6, 7, 8, 9);
749 DateTimeUtils.setCurrentMillisFixed(dt.getMillis());
750
751 DateTime test = base.toDateTimeAtCurrentTime(TOKYO);
752 check(base, 2005, 6, 9);
753 DateTime expected = new DateTime(dt.getMillis(), COPTIC_TOKYO);
754 expected = expected.year().setCopy(2005);
755 expected = expected.monthOfYear().setCopy(6);
756 expected = expected.dayOfMonth().setCopy(9);
757 assertEquals(expected, test);
758 }
759
760 public void testToDateTimeAtCurrentTime_nullZone() {
761 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
762 DateTime dt = new DateTime(2004, 6, 9, 6, 7, 8, 9);
763 DateTimeUtils.setCurrentMillisFixed(dt.getMillis());
764
765 DateTime test = base.toDateTimeAtCurrentTime((DateTimeZone) null);
766 check(base, 2005, 6, 9);
767 DateTime expected = new DateTime(dt.getMillis(), COPTIC_LONDON);
768 expected = expected.year().setCopy(2005);
769 expected = expected.monthOfYear().setCopy(6);
770 expected = expected.dayOfMonth().setCopy(9);
771 assertEquals(expected, test);
772 }
773
774 //-----------------------------------------------------------------------
775 public void testToLocalDateTime_LocalTime() {
776 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
777 LocalTime tod = new LocalTime(12, 13, 14, 15, COPTIC_TOKYO);
778
779 LocalDateTime test = base.toLocalDateTime(tod);
780 check(base, 2005, 6, 9);
781 LocalDateTime expected = new LocalDateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_UTC);
782 assertEquals(expected, test);
783 }
784
785 public void testToLocalDateTime_nullLocalTime() {
786 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
787
788 try {
789 base.toLocalDateTime((LocalTime) null);
790 fail();
791 } catch (IllegalArgumentException ex) {
792 // expected
793 }
794 }
795
796 public void testToLocalDateTime_wrongChronologyLocalTime() {
797 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
798 LocalTime tod = new LocalTime(12, 13, 14, 15, BUDDHIST_PARIS); // PARIS irrelevant
799
800 try {
801 base.toLocalDateTime(tod);
802 fail();
803 } catch (IllegalArgumentException ex) {
804 // expected
805 }
806 }
807
808 //-----------------------------------------------------------------------
809 public void testToDateTime_LocalTime() {
810 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
811 LocalTime tod = new LocalTime(12, 13, 14, 15, COPTIC_TOKYO);
812
813 DateTime test = base.toDateTime(tod);
814 check(base, 2005, 6, 9);
815 DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_LONDON);
816 assertEquals(expected, test);
817 }
818
819 public void testToDateTime_nullLocalTime() {
820 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
821 long now = new DateTime(2004, 5, 8, 12, 13, 14, 15, COPTIC_LONDON).getMillis();
822 DateTimeUtils.setCurrentMillisFixed(now);
823
824 DateTime test = base.toDateTime((LocalTime) null);
825 check(base, 2005, 6, 9);
826 DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_LONDON);
827 assertEquals(expected, test);
828 }
829
830 //-----------------------------------------------------------------------
831 public void testToDateTime_LocalTime_Zone() {
832 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
833 LocalTime tod = new LocalTime(12, 13, 14, 15, COPTIC_TOKYO);
834
835 DateTime test = base.toDateTime(tod, TOKYO);
836 check(base, 2005, 6, 9);
837 DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_TOKYO);
838 assertEquals(expected, test);
839 }
840
841 public void testToDateTime_LocalTime_nullZone() {
842 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
843 LocalTime tod = new LocalTime(12, 13, 14, 15, COPTIC_TOKYO);
844
845 DateTime test = base.toDateTime(tod, null);
846 check(base, 2005, 6, 9);
847 DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_LONDON);
848 assertEquals(expected, test);
849 }
850
851 public void testToDateTime_nullLocalTime_Zone() {
852 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
853 long now = new DateTime(2004, 5, 8, 12, 13, 14, 15, COPTIC_TOKYO).getMillis();
854 DateTimeUtils.setCurrentMillisFixed(now);
855
856 DateTime test = base.toDateTime((LocalTime) null, TOKYO);
857 check(base, 2005, 6, 9);
858 DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_TOKYO);
859 assertEquals(expected, test);
860 }
861
862 public void testToDateTime_wrongChronoLocalTime_Zone() {
863 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
864 LocalTime tod = new LocalTime(12, 13, 14, 15, BUDDHIST_TOKYO);
865
866 try {
867 base.toDateTime(tod, LONDON);
868 fail();
869 } catch (IllegalArgumentException ex) {}
870 }
871
872 //-----------------------------------------------------------------------
873 public void testToDateMidnight() {
874 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
875
876 DateMidnight test = base.toDateMidnight();
877 check(base, 2005, 6, 9);
878 assertEquals(new DateMidnight(2005, 6, 9, COPTIC_LONDON), test);
879 }
880
881 //-----------------------------------------------------------------------
882 public void testToDateMidnight_Zone() {
883 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
884
885 DateMidnight test = base.toDateMidnight(TOKYO);
886 check(base, 2005, 6, 9);
887 assertEquals(new DateMidnight(2005, 6, 9, COPTIC_TOKYO), test);
888 }
889
890 public void testToDateMidnight_nullZone() {
891 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
892
893 DateMidnight test = base.toDateMidnight((DateTimeZone) null);
894 check(base, 2005, 6, 9);
895 assertEquals(new DateMidnight(2005, 6, 9, COPTIC_LONDON), test);
896 }
897
898 //-----------------------------------------------------------------------
899 public void testToDateTime_RI() {
900 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS);
901 DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7);
902
903 DateTime test = base.toDateTime(dt);
904 check(base, 2005, 6, 9);
905 DateTime expected = dt;
906 expected = expected.year().setCopy(2005);
907 expected = expected.monthOfYear().setCopy(6);
908 expected = expected.dayOfMonth().setCopy(9);
909 assertEquals(expected, test);
910 }
911
912 public void testToDateTime_nullRI() {
913 LocalDate base = new LocalDate(2005, 6, 9);
914 DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7);
915 DateTimeUtils.setCurrentMillisFixed(dt.getMillis());
916
917 DateTime test = base.toDateTime((ReadableInstant) null);
918 check(base, 2005, 6, 9);
919 DateTime expected = dt;
920 expected = expected.year().setCopy(2005);
921 expected = expected.monthOfYear().setCopy(6);
922 expected = expected.dayOfMonth().setCopy(9);
923 assertEquals(expected, test);
924 }
925
926 //-----------------------------------------------------------------------
927 public void testToInterval() {
928 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
929 Interval test = base.toInterval();
930 check(base, 2005, 6, 9);
931 DateTime start = base.toDateTimeAtStartOfDay();
932 DateTime end = start.plus(Period.days(1));
933 Interval expected = new Interval(start, end);
934 assertEquals(expected, test);
935 }
936
937 //-----------------------------------------------------------------------
938 public void testToInterval_Zone() {
939 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
940 Interval test = base.toInterval(TOKYO);
941 check(base, 2005, 6, 9);
942 DateTime start = base.toDateTimeAtStartOfDay(TOKYO);
943 DateTime end = start.plus(Period.days(1));
944 Interval expected = new Interval(start, end);
945 assertEquals(expected, test);
946 }
947
948 public void testToInterval_Zone_noMidnight() {
949 LocalDate base = new LocalDate(2006, 4, 1, ISO_LONDON); // LONDON irrelevant
950 DateTimeZone gaza = DateTimeZone.forID("Asia/Gaza");
951 Interval test = base.toInterval(gaza);
952 check(base, 2006, 4, 1);
953 DateTime start = new DateTime(2006, 4, 1, 1, 0, 0, 0, gaza);
954 DateTime end = new DateTime(2006, 4, 2, 0, 0, 0, 0, gaza);
955 Interval expected = new Interval(start, end);
956 assertEquals(expected, test);
957 }
958
959 public void testToInterval_nullZone() {
960 LocalDate base = new LocalDate(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant
961 Interval test = base.toInterval(null);
962 check(base, 2005, 6, 9);
963 DateTime start = base.toDateTimeAtStartOfDay(LONDON);
964 DateTime end = start.plus(Period.days(1));
965 Interval expected = new Interval(start, end);
966 assertEquals(expected, test);
967 }
968
969 //-----------------------------------------------------------------------
970 public void testToDate_summer() {
971 LocalDate base = new LocalDate(2005, 7, 9, COPTIC_PARIS);
972
973 Date test = base.toDate();
974 check(base, 2005, 7, 9);
975
976 GregorianCalendar gcal = new GregorianCalendar();
977 gcal.clear();
978 gcal.set(Calendar.YEAR, 2005);
979 gcal.set(Calendar.MONTH, Calendar.JULY);
980 gcal.set(Calendar.DAY_OF_MONTH, 9);
981 assertEquals(gcal.getTime(), test);
982 }
983
984 public void testToDate_winter() {
985 LocalDate base = new LocalDate(2005, 1, 9, COPTIC_PARIS);
986
987 Date test = base.toDate();
988 check(base, 2005, 1, 9);
989
990 GregorianCalendar gcal = new GregorianCalendar();
991 gcal.clear();
992 gcal.set(Calendar.YEAR, 2005);
993 gcal.set(Calendar.MONTH, Calendar.JANUARY);
994 gcal.set(Calendar.DAY_OF_MONTH, 9);
995 assertEquals(gcal.getTime(), test);
996 }
997
998 public void testToDate_springDST() {
999 LocalDate base = new LocalDate(2007, 4, 2);
1000
1001 SimpleTimeZone testZone = new SimpleTimeZone(3600000, "NoMidnight",
1002 Calendar.APRIL, 2, 0, 0, Calendar.OCTOBER, 2, 0, 3600000);
1003 TimeZone currentZone = TimeZone.getDefault();
1004 try {
1005 TimeZone.setDefault(testZone);
1006 Date test = base.toDate();
1007 check(base, 2007, 4, 2);
1008 assertEquals("Mon Apr 02 01:00:00 GMT+02:00 2007", test.toString());
1009 } finally {
1010 TimeZone.setDefault(currentZone);
1011 }
1012 }
1013
1014 public void testToDate_springDST_2Hour40Savings() {
1015 LocalDate base = new LocalDate(2007, 4, 2);
1016
1017 SimpleTimeZone testZone = new SimpleTimeZone(3600000, "NoMidnight",
1018 Calendar.APRIL, 2, 0, 0, Calendar.OCTOBER, 2, 0, 3600000, (3600000 / 6) * 16);
1019 TimeZone currentZone = TimeZone.getDefault();
1020 try {
1021 TimeZone.setDefault(testZone);
1022 Date test = base.toDate();
1023 check(base, 2007, 4, 2);
1024 assertEquals("Mon Apr 02 02:40:00 GMT+03:40 2007", test.toString());
1025 } finally {
1026 TimeZone.setDefault(currentZone);
1027 }
1028 }
1029
1030 public void testToDate_autumnDST() {
1031 LocalDate base = new LocalDate(2007, 10, 2);
1032
1033 SimpleTimeZone testZone = new SimpleTimeZone(3600000, "NoMidnight",
1034 Calendar.APRIL, 2, 0, 0, Calendar.OCTOBER, 2, 0, 3600000);
1035 TimeZone currentZone = TimeZone.getDefault();
1036 try {
1037 TimeZone.setDefault(testZone);
1038 Date test = base.toDate();
1039 check(base, 2007, 10, 2);
1040 assertEquals("Tue Oct 02 00:00:00 GMT+02:00 2007", test.toString());
1041 } finally {
1042 TimeZone.setDefault(currentZone);
1043 }
1044 }
1045
1046 //-----------------------------------------------------------------------
1047 public void testProperty() {
1048 LocalDate test = new LocalDate(2005, 6, 9, GJ_UTC);
1049 assertEquals(test.year(), test.property(DateTimeFieldType.year()));
1050 assertEquals(test.monthOfYear(), test.property(DateTimeFieldType.monthOfYear()));
1051 assertEquals(test.dayOfMonth(), test.property(DateTimeFieldType.dayOfMonth()));
1052 assertEquals(test.dayOfWeek(), test.property(DateTimeFieldType.dayOfWeek()));
1053 assertEquals(test.dayOfYear(), test.property(DateTimeFieldType.dayOfYear()));
1054 assertEquals(test.weekOfWeekyear(), test.property(DateTimeFieldType.weekOfWeekyear()));
1055 assertEquals(test.weekyear(), test.property(DateTimeFieldType.weekyear()));
1056 assertEquals(test.yearOfCentury(), test.property(DateTimeFieldType.yearOfCentury()));
1057 assertEquals(test.yearOfEra(), test.property(DateTimeFieldType.yearOfEra()));
1058 assertEquals(test.centuryOfEra(), test.property(DateTimeFieldType.centuryOfEra()));
1059 assertEquals(test.era(), test.property(DateTimeFieldType.era()));
1060 try {
1061 test.property(DateTimeFieldType.millisOfDay());
1062 fail();
1063 } catch (IllegalArgumentException ex) {}
1064 try {
1065 test.property(null);
1066 fail();
1067 } catch (IllegalArgumentException ex) {}
1068 }
1069
1070 //-----------------------------------------------------------------------
1071 public void testSerialization() throws Exception {
1072 LocalDate test = new LocalDate(1972, 6, 9, COPTIC_PARIS);
1073
1074 ByteArrayOutputStream baos = new ByteArrayOutputStream();
1075 ObjectOutputStream oos = new ObjectOutputStream(baos);
1076 oos.writeObject(test);
1077 byte[] bytes = baos.toByteArray();
1078 oos.close();
1079
1080 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
1081 ObjectInputStream ois = new ObjectInputStream(bais);
1082 LocalDate result = (LocalDate) ois.readObject();
1083 ois.close();
1084
1085 assertEquals(test, result);
1086 assertTrue(Arrays.equals(test.getValues(), result.getValues()));
1087 assertTrue(Arrays.equals(test.getFields(), result.getFields()));
1088 assertEquals(test.getChronology(), result.getChronology());
1089 }
1090
1091 //-----------------------------------------------------------------------
1092 public void testToString() {
1093 LocalDate test = new LocalDate(2002, 6, 9);
1094 assertEquals("2002-06-09", test.toString());
1095 }
1096
1097 //-----------------------------------------------------------------------
1098 public void testToString_String() {
1099 LocalDate test = new LocalDate(2002, 6, 9);
1100 assertEquals("2002 \ufffd\ufffd", test.toString("yyyy HH"));
1101 assertEquals("2002-06-09", test.toString((String) null));
1102 }
1103
1104 //-----------------------------------------------------------------------
1105 public void testToString_String_Locale() {
1106 LocalDate test = new LocalDate(1970, 6, 9);
1107 assertEquals("Tue 9/6", test.toString("EEE d/M", Locale.ENGLISH));
1108 assertEquals("mar. 9/6", test.toString("EEE d/M", Locale.FRENCH));
1109 assertEquals("1970-06-09", test.toString(null, Locale.ENGLISH));
1110 assertEquals("Tue 9/6", test.toString("EEE d/M", null));
1111 assertEquals("1970-06-09", test.toString(null, null));
1112 }
1113
1114 //-----------------------------------------------------------------------
1115 public void testToString_DTFormatter() {
1116 LocalDate test = new LocalDate(2002, 6, 9);
1117 assertEquals("2002 \ufffd\ufffd", test.toString(DateTimeFormat.forPattern("yyyy HH")));
1118 assertEquals("2002-06-09", test.toString((DateTimeFormatter) null));
1119 }
1120
1121 //-----------------------------------------------------------------------
1122 private void check(LocalDate test, int hour, int min, int sec) {
1123 assertEquals(hour, test.getYear());
1124 assertEquals(min, test.getMonthOfYear());
1125 assertEquals(sec, test.getDayOfMonth());
1126 }
1127 }