/* * Copyright 2001-2009 Stephen Colebourne * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.joda.time; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Arrays; import java.util.Locale; import junit.framework.TestCase; import junit.framework.TestSuite; import org.joda.time.chrono.BuddhistChronology; import org.joda.time.chrono.CopticChronology; import org.joda.time.chrono.GregorianChronology; import org.joda.time.chrono.ISOChronology; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; /** * This class is a Junit unit test for YearMonthDay. * * @author Stephen Colebourne */ public class TestYearMonthDay_Basics extends TestCase { private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris"); private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London"); private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo"); private static final int OFFSET = 1; private static final Chronology COPTIC_PARIS = CopticChronology.getInstance(PARIS); private static final Chronology COPTIC_LONDON = CopticChronology.getInstance(LONDON); private static final Chronology COPTIC_TOKYO = CopticChronology.getInstance(TOKYO); private static final Chronology COPTIC_UTC = CopticChronology.getInstanceUTC(); private static final Chronology ISO_PARIS = ISOChronology.getInstance(PARIS); private static final Chronology ISO_LONDON = ISOChronology.getInstance(LONDON); private static final Chronology ISO_TOKYO = ISOChronology.getInstance(TOKYO); private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC(); private static final Chronology BUDDHIST_PARIS = BuddhistChronology.getInstance(PARIS); private static final Chronology BUDDHIST_LONDON = BuddhistChronology.getInstance(LONDON); private static final Chronology BUDDHIST_TOKYO = BuddhistChronology.getInstance(TOKYO); private static final Chronology BUDDHIST_UTC = BuddhistChronology.getInstanceUTC(); private long TEST_TIME_NOW = (31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY; private long TEST_TIME1 = (31L + 28L + 31L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY + 12L * DateTimeConstants.MILLIS_PER_HOUR + 24L * DateTimeConstants.MILLIS_PER_MINUTE; private long TEST_TIME2 = (365L + 31L + 28L + 31L + 30L + 7L -1L) * DateTimeConstants.MILLIS_PER_DAY + 14L * DateTimeConstants.MILLIS_PER_HOUR + 28L * DateTimeConstants.MILLIS_PER_MINUTE; private DateTimeZone zone = null; public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static TestSuite suite() { return new TestSuite(TestYearMonthDay_Basics.class); } public TestYearMonthDay_Basics(String name) { super(name); } protected void setUp() throws Exception { DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW); zone = DateTimeZone.getDefault(); DateTimeZone.setDefault(LONDON); } protected void tearDown() throws Exception { DateTimeUtils.setCurrentMillisSystem(); DateTimeZone.setDefault(zone); zone = null; } //----------------------------------------------------------------------- public void testGet() { YearMonthDay test = new YearMonthDay(); assertEquals(1970, test.get(DateTimeFieldType.year())); assertEquals(6, test.get(DateTimeFieldType.monthOfYear())); assertEquals(9, test.get(DateTimeFieldType.dayOfMonth())); try { test.get(null); fail(); } catch (IllegalArgumentException ex) {} try { test.get(DateTimeFieldType.hourOfDay()); fail(); } catch (IllegalArgumentException ex) {} } public void testSize() { YearMonthDay test = new YearMonthDay(); assertEquals(3, test.size()); } public void testGetFieldType() { YearMonthDay test = new YearMonthDay(COPTIC_PARIS); assertSame(DateTimeFieldType.year(), test.getFieldType(0)); assertSame(DateTimeFieldType.monthOfYear(), test.getFieldType(1)); assertSame(DateTimeFieldType.dayOfMonth(), test.getFieldType(2)); try { test.getFieldType(-1); } catch (IndexOutOfBoundsException ex) {} try { test.getFieldType(3); } catch (IndexOutOfBoundsException ex) {} } public void testGetFieldTypes() { YearMonthDay test = new YearMonthDay(COPTIC_PARIS); DateTimeFieldType[] fields = test.getFieldTypes(); assertSame(DateTimeFieldType.year(), fields[0]); assertSame(DateTimeFieldType.monthOfYear(), fields[1]); assertSame(DateTimeFieldType.dayOfMonth(), fields[2]); assertNotSame(test.getFieldTypes(), test.getFieldTypes()); } public void testGetField() { YearMonthDay test = new YearMonthDay(COPTIC_PARIS); assertSame(COPTIC_UTC.year(), test.getField(0)); assertSame(COPTIC_UTC.monthOfYear(), test.getField(1)); assertSame(COPTIC_UTC.dayOfMonth(), test.getField(2)); try { test.getField(-1); } catch (IndexOutOfBoundsException ex) {} try { test.getField(3); } catch (IndexOutOfBoundsException ex) {} } public void testGetFields() { YearMonthDay test = new YearMonthDay(COPTIC_PARIS); DateTimeField[] fields = test.getFields(); assertSame(COPTIC_UTC.year(), fields[0]); assertSame(COPTIC_UTC.monthOfYear(), fields[1]); assertSame(COPTIC_UTC.dayOfMonth(), fields[2]); assertNotSame(test.getFields(), test.getFields()); } public void testGetValue() { YearMonthDay test = new YearMonthDay(); assertEquals(1970, test.getValue(0)); assertEquals(6, test.getValue(1)); assertEquals(9, test.getValue(2)); try { test.getValue(-1); } catch (IndexOutOfBoundsException ex) {} try { test.getValue(3); } catch (IndexOutOfBoundsException ex) {} } public void testGetValues() { YearMonthDay test = new YearMonthDay(); int[] values = test.getValues(); assertEquals(1970, values[0]); assertEquals(6, values[1]); assertEquals(9, values[2]); assertNotSame(test.getValues(), test.getValues()); } public void testIsSupported() { YearMonthDay test = new YearMonthDay(COPTIC_PARIS); assertEquals(true, test.isSupported(DateTimeFieldType.year())); assertEquals(true, test.isSupported(DateTimeFieldType.monthOfYear())); assertEquals(true, test.isSupported(DateTimeFieldType.dayOfMonth())); assertEquals(false, test.isSupported(DateTimeFieldType.hourOfDay())); } public void testEqualsHashCode() { YearMonthDay test1 = new YearMonthDay(1970, 6, 9, COPTIC_PARIS); YearMonthDay test2 = new YearMonthDay(1970, 6, 9, COPTIC_PARIS); assertEquals(true, test1.equals(test2)); assertEquals(true, test2.equals(test1)); assertEquals(true, test1.equals(test1)); assertEquals(true, test2.equals(test2)); assertEquals(true, test1.hashCode() == test2.hashCode()); assertEquals(true, test1.hashCode() == test1.hashCode()); assertEquals(true, test2.hashCode() == test2.hashCode()); YearMonthDay test3 = new YearMonthDay(1971, 6, 9); assertEquals(false, test1.equals(test3)); assertEquals(false, test2.equals(test3)); assertEquals(false, test3.equals(test1)); assertEquals(false, test3.equals(test2)); assertEquals(false, test1.hashCode() == test3.hashCode()); assertEquals(false, test2.hashCode() == test3.hashCode()); assertEquals(false, test1.equals("Hello")); assertEquals(true, test1.equals(new MockInstant())); assertEquals(false, test1.equals(MockPartial.EMPTY_INSTANCE)); } class MockInstant extends MockPartial { public Chronology getChronology() { return COPTIC_UTC; } public DateTimeField[] getFields() { return new DateTimeField[] { COPTIC_UTC.year(), COPTIC_UTC.monthOfYear(), COPTIC_UTC.dayOfMonth(), }; } public int[] getValues() { return new int[] {1970, 6, 9}; } } //----------------------------------------------------------------------- public void testCompareTo() { YearMonthDay test1 = new YearMonthDay(2005, 6, 2); YearMonthDay test1a = new YearMonthDay(2005, 6, 2); assertEquals(0, test1.compareTo(test1a)); assertEquals(0, test1a.compareTo(test1)); assertEquals(0, test1.compareTo(test1)); assertEquals(0, test1a.compareTo(test1a)); YearMonthDay test2 = new YearMonthDay(2005, 7, 2); assertEquals(-1, test1.compareTo(test2)); assertEquals(+1, test2.compareTo(test1)); YearMonthDay test3 = new YearMonthDay(2005, 7, 2, GregorianChronology.getInstanceUTC()); assertEquals(-1, test1.compareTo(test3)); assertEquals(+1, test3.compareTo(test1)); assertEquals(0, test3.compareTo(test2)); DateTimeFieldType[] types = new DateTimeFieldType[] { DateTimeFieldType.year(), DateTimeFieldType.monthOfYear(), DateTimeFieldType.dayOfMonth(), }; int[] values = new int[] {2005, 6, 2}; Partial p = new Partial(types, values); assertEquals(0, test1.compareTo(p)); try { test1.compareTo(null); fail(); } catch (NullPointerException ex) {} // try { // test1.compareTo(new Date()); // fail(); // } catch (ClassCastException ex) {} try { test1.compareTo(new TimeOfDay()); fail(); } catch (ClassCastException ex) {} Partial partial = new Partial() .with(DateTimeFieldType.centuryOfEra(), 1) .with(DateTimeFieldType.halfdayOfDay(), 0) .with(DateTimeFieldType.dayOfMonth(), 9); try { new YearMonthDay(1970, 6, 9).compareTo(partial); fail(); } catch (ClassCastException ex) {} } //----------------------------------------------------------------------- public void testIsEqual_YMD() { YearMonthDay test1 = new YearMonthDay(2005, 6, 2); YearMonthDay test1a = new YearMonthDay(2005, 6, 2); assertEquals(true, test1.isEqual(test1a)); assertEquals(true, test1a.isEqual(test1)); assertEquals(true, test1.isEqual(test1)); assertEquals(true, test1a.isEqual(test1a)); YearMonthDay test2 = new YearMonthDay(2005, 7, 2); assertEquals(false, test1.isEqual(test2)); assertEquals(false, test2.isEqual(test1)); YearMonthDay test3 = new YearMonthDay(2005, 7, 2, GregorianChronology.getInstanceUTC()); assertEquals(false, test1.isEqual(test3)); assertEquals(false, test3.isEqual(test1)); assertEquals(true, test3.isEqual(test2)); try { new YearMonthDay(2005, 7, 2).isEqual(null); fail(); } catch (IllegalArgumentException ex) {} } //----------------------------------------------------------------------- public void testIsBefore_YMD() { YearMonthDay test1 = new YearMonthDay(2005, 6, 2); YearMonthDay test1a = new YearMonthDay(2005, 6, 2); assertEquals(false, test1.isBefore(test1a)); assertEquals(false, test1a.isBefore(test1)); assertEquals(false, test1.isBefore(test1)); assertEquals(false, test1a.isBefore(test1a)); YearMonthDay test2 = new YearMonthDay(2005, 7, 2); assertEquals(true, test1.isBefore(test2)); assertEquals(false, test2.isBefore(test1)); YearMonthDay test3 = new YearMonthDay(2005, 7, 2, GregorianChronology.getInstanceUTC()); assertEquals(true, test1.isBefore(test3)); assertEquals(false, test3.isBefore(test1)); assertEquals(false, test3.isBefore(test2)); try { new YearMonthDay(2005, 7, 2).isBefore(null); fail(); } catch (IllegalArgumentException ex) {} } //----------------------------------------------------------------------- public void testIsAfter_YMD() { YearMonthDay test1 = new YearMonthDay(2005, 6, 2); YearMonthDay test1a = new YearMonthDay(2005, 6, 2); assertEquals(false, test1.isAfter(test1a)); assertEquals(false, test1a.isAfter(test1)); assertEquals(false, test1.isAfter(test1)); assertEquals(false, test1a.isAfter(test1a)); YearMonthDay test2 = new YearMonthDay(2005, 7, 2); assertEquals(false, test1.isAfter(test2)); assertEquals(true, test2.isAfter(test1)); YearMonthDay test3 = new YearMonthDay(2005, 7, 2, GregorianChronology.getInstanceUTC()); assertEquals(false, test1.isAfter(test3)); assertEquals(true, test3.isAfter(test1)); assertEquals(false, test3.isAfter(test2)); try { new YearMonthDay(2005, 7, 2).isAfter(null); fail(); } catch (IllegalArgumentException ex) {} } //----------------------------------------------------------------------- public void testWithChronologyRetainFields_Chrono() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); YearMonthDay test = base.withChronologyRetainFields(BUDDHIST_TOKYO); check(base, 2005, 6, 9); assertEquals(COPTIC_UTC, base.getChronology()); check(test, 2005, 6, 9); assertEquals(BUDDHIST_UTC, test.getChronology()); } public void testWithChronologyRetainFields_sameChrono() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); YearMonthDay test = base.withChronologyRetainFields(COPTIC_TOKYO); assertSame(base, test); } public void testWithChronologyRetainFields_nullChrono() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); YearMonthDay test = base.withChronologyRetainFields(null); check(base, 2005, 6, 9); assertEquals(COPTIC_UTC, base.getChronology()); check(test, 2005, 6, 9); assertEquals(ISO_UTC, test.getChronology()); } public void testWithChronologyRetainFields_invalidInNewChrono() { YearMonthDay base = new YearMonthDay(2005, 1, 31, ISO_UTC); try { base.withChronologyRetainFields(COPTIC_UTC); fail(); } catch (IllegalArgumentException ex) { // expected } } //----------------------------------------------------------------------- public void testWithField1() { YearMonthDay test = new YearMonthDay(2004, 6, 9); YearMonthDay result = test.withField(DateTimeFieldType.year(), 2006); assertEquals(new YearMonthDay(2004, 6, 9), test); assertEquals(new YearMonthDay(2006, 6, 9), result); } public void testWithField2() { YearMonthDay test = new YearMonthDay(2004, 6, 9); try { test.withField(null, 6); fail(); } catch (IllegalArgumentException ex) {} } public void testWithField3() { YearMonthDay test = new YearMonthDay(2004, 6, 9); try { test.withField(DateTimeFieldType.hourOfDay(), 6); fail(); } catch (IllegalArgumentException ex) {} } public void testWithField4() { YearMonthDay test = new YearMonthDay(2004, 6, 9); YearMonthDay result = test.withField(DateTimeFieldType.year(), 2004); assertEquals(new YearMonthDay(2004, 6, 9), test); assertSame(test, result); } //----------------------------------------------------------------------- public void testWithFieldAdded1() { YearMonthDay test = new YearMonthDay(2004, 6, 9); YearMonthDay result = test.withFieldAdded(DurationFieldType.years(), 6); assertEquals(new YearMonthDay(2004, 6, 9), test); assertEquals(new YearMonthDay(2010, 6, 9), result); } public void testWithFieldAdded2() { YearMonthDay test = new YearMonthDay(2004, 6, 9); try { test.withFieldAdded(null, 0); fail(); } catch (IllegalArgumentException ex) {} } public void testWithFieldAdded3() { YearMonthDay test = new YearMonthDay(2004, 6, 9); try { test.withFieldAdded(null, 6); fail(); } catch (IllegalArgumentException ex) {} } public void testWithFieldAdded4() { YearMonthDay test = new YearMonthDay(2004, 6, 9); YearMonthDay result = test.withFieldAdded(DurationFieldType.years(), 0); assertSame(test, result); } public void testWithFieldAdded5() { YearMonthDay test = new YearMonthDay(2004, 6, 9); try { test.withFieldAdded(DurationFieldType.hours(), 6); fail(); } catch (IllegalArgumentException ex) {} } //----------------------------------------------------------------------- public void testPlus_RP() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.plus(new Period(1, 2, 3, 4, 5, 6, 7, 8)); YearMonthDay expected = new YearMonthDay(2003, 7, 7, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.plus((ReadablePeriod) null); assertSame(test, result); } public void testPlusYears_int() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.plusYears(1); YearMonthDay expected = new YearMonthDay(2003, 5, 3, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.plusYears(0); assertSame(test, result); } public void testPlusMonths_int() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.plusMonths(1); YearMonthDay expected = new YearMonthDay(2002, 6, 3, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.plusMonths(0); assertSame(test, result); } public void testPlusDays_int() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.plusDays(1); YearMonthDay expected = new YearMonthDay(2002, 5, 4, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.plusDays(0); assertSame(test, result); } //----------------------------------------------------------------------- public void testMinus_RP() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.minus(new Period(1, 1, 1, 1, 1, 1, 1, 1)); YearMonthDay expected = new YearMonthDay(2001, 4, 2, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.minus((ReadablePeriod) null); assertSame(test, result); } public void testMinusYears_int() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.minusYears(1); YearMonthDay expected = new YearMonthDay(2001, 5, 3, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.minusYears(0); assertSame(test, result); } public void testMinusMonths_int() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.minusMonths(1); YearMonthDay expected = new YearMonthDay(2002, 4, 3, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.minusMonths(0); assertSame(test, result); } public void testMinusDays_int() { YearMonthDay test = new YearMonthDay(2002, 5, 3, BuddhistChronology.getInstance()); YearMonthDay result = test.minusDays(1); YearMonthDay expected = new YearMonthDay(2002, 5, 2, BuddhistChronology.getInstance()); assertEquals(expected, result); result = test.minusDays(0); assertSame(test, result); } //----------------------------------------------------------------------- public void testToLocalDate() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_UTC); LocalDate test = base.toLocalDate(); assertEquals(new LocalDate(2005, 6, 9, COPTIC_UTC), test); } //----------------------------------------------------------------------- public void testToDateTimeAtMidnight() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateTime test = base.toDateTimeAtMidnight(); check(base, 2005, 6, 9); assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_LONDON), test); } //----------------------------------------------------------------------- public void testToDateTimeAtMidnight_Zone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateTime test = base.toDateTimeAtMidnight(TOKYO); check(base, 2005, 6, 9); assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_TOKYO), test); } public void testToDateTimeAtMidnight_nullZone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateTime test = base.toDateTimeAtMidnight((DateTimeZone) null); check(base, 2005, 6, 9); assertEquals(new DateTime(2005, 6, 9, 0, 0, 0, 0, COPTIC_LONDON), test); } //----------------------------------------------------------------------- public void testToDateTimeAtCurrentTime() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant DateTime dt = new DateTime(2004, 6, 9, 6, 7, 8, 9); DateTimeUtils.setCurrentMillisFixed(dt.getMillis()); DateTime test = base.toDateTimeAtCurrentTime(); check(base, 2005, 6, 9); DateTime expected = new DateTime(dt.getMillis(), COPTIC_LONDON); expected = expected.year().setCopy(2005); expected = expected.monthOfYear().setCopy(6); expected = expected.dayOfMonth().setCopy(9); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testToDateTimeAtCurrentTime_Zone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant DateTime dt = new DateTime(2004, 6, 9, 6, 7, 8, 9); DateTimeUtils.setCurrentMillisFixed(dt.getMillis()); DateTime test = base.toDateTimeAtCurrentTime(TOKYO); check(base, 2005, 6, 9); DateTime expected = new DateTime(dt.getMillis(), COPTIC_TOKYO); expected = expected.year().setCopy(2005); expected = expected.monthOfYear().setCopy(6); expected = expected.dayOfMonth().setCopy(9); assertEquals(expected, test); } public void testToDateTimeAtCurrentTime_nullZone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant DateTime dt = new DateTime(2004, 6, 9, 6, 7, 8, 9); DateTimeUtils.setCurrentMillisFixed(dt.getMillis()); DateTime test = base.toDateTimeAtCurrentTime((DateTimeZone) null); check(base, 2005, 6, 9); DateTime expected = new DateTime(dt.getMillis(), COPTIC_LONDON); expected = expected.year().setCopy(2005); expected = expected.monthOfYear().setCopy(6); expected = expected.dayOfMonth().setCopy(9); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testToDateTime_TOD() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant TimeOfDay tod = new TimeOfDay(12, 13, 14, 15, BUDDHIST_TOKYO); DateTime test = base.toDateTime(tod); check(base, 2005, 6, 9); DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_LONDON); assertEquals(expected, test); } public void testToDateTime_nullTOD() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant long now = new DateTime(2004, 5, 8, 12, 13, 14, 15, COPTIC_LONDON).getMillis(); DateTimeUtils.setCurrentMillisFixed(now); DateTime test = base.toDateTime((TimeOfDay) null); check(base, 2005, 6, 9); DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_LONDON); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testToDateTime_TOD_Zone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant TimeOfDay tod = new TimeOfDay(12, 13, 14, 15, BUDDHIST_TOKYO); DateTime test = base.toDateTime(tod, TOKYO); check(base, 2005, 6, 9); DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_TOKYO); assertEquals(expected, test); } public void testToDateTime_TOD_nullZone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant TimeOfDay tod = new TimeOfDay(12, 13, 14, 15, BUDDHIST_TOKYO); DateTime test = base.toDateTime(tod, null); check(base, 2005, 6, 9); DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_LONDON); assertEquals(expected, test); } public void testToDateTime_nullTOD_Zone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant long now = new DateTime(2004, 5, 8, 12, 13, 14, 15, COPTIC_TOKYO).getMillis(); DateTimeUtils.setCurrentMillisFixed(now); DateTime test = base.toDateTime((TimeOfDay) null, TOKYO); check(base, 2005, 6, 9); DateTime expected = new DateTime(2005, 6, 9, 12, 13, 14, 15, COPTIC_TOKYO); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testToDateMidnight() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateMidnight test = base.toDateMidnight(); check(base, 2005, 6, 9); assertEquals(new DateMidnight(2005, 6, 9, COPTIC_LONDON), test); } //----------------------------------------------------------------------- public void testToDateMidnight_Zone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateMidnight test = base.toDateMidnight(TOKYO); check(base, 2005, 6, 9); assertEquals(new DateMidnight(2005, 6, 9, COPTIC_TOKYO), test); } public void testToDateMidnight_nullZone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateMidnight test = base.toDateMidnight((DateTimeZone) null); check(base, 2005, 6, 9); assertEquals(new DateMidnight(2005, 6, 9, COPTIC_LONDON), test); } //----------------------------------------------------------------------- public void testToDateTime_RI() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7); DateTime test = base.toDateTime(dt); check(base, 2005, 6, 9); DateTime expected = dt; expected = expected.year().setCopy(2005); expected = expected.monthOfYear().setCopy(6); expected = expected.dayOfMonth().setCopy(9); assertEquals(expected, test); } public void testToDateTime_nullRI() { YearMonthDay base = new YearMonthDay(2005, 6, 9); DateTime dt = new DateTime(2002, 1, 3, 4, 5, 6, 7); DateTimeUtils.setCurrentMillisFixed(dt.getMillis()); DateTime test = base.toDateTime((ReadableInstant) null); check(base, 2005, 6, 9); DateTime expected = dt; expected = expected.year().setCopy(2005); expected = expected.monthOfYear().setCopy(6); expected = expected.dayOfMonth().setCopy(9); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testToInterval() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant Interval test = base.toInterval(); check(base, 2005, 6, 9); DateTime start = base.toDateTime(TimeOfDay.MIDNIGHT); DateTime end = start.plus(Period.days(1)); Interval expected = new Interval(start, end); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testToInterval_Zone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant Interval test = base.toInterval(TOKYO); check(base, 2005, 6, 9); DateTime start = base.toDateTime(TimeOfDay.MIDNIGHT, TOKYO); DateTime end = start.plus(Period.days(1)); Interval expected = new Interval(start, end); assertEquals(expected, test); } public void testToInterval_nullZone() { YearMonthDay base = new YearMonthDay(2005, 6, 9, COPTIC_PARIS); // PARIS irrelevant Interval test = base.toInterval(null); check(base, 2005, 6, 9); DateTime start = base.toDateTime(TimeOfDay.MIDNIGHT, LONDON); DateTime end = start.plus(Period.days(1)); Interval expected = new Interval(start, end); assertEquals(expected, test); } //----------------------------------------------------------------------- public void testWithers() { YearMonthDay test = new YearMonthDay(1970, 6, 9); check(test.withYear(2000), 2000, 6, 9); check(test.withMonthOfYear(2), 1970, 2, 9); check(test.withDayOfMonth(2), 1970, 6, 2); try { test.withMonthOfYear(0); fail(); } catch (IllegalArgumentException ex) {} try { test.withMonthOfYear(13); fail(); } catch (IllegalArgumentException ex) {} } //----------------------------------------------------------------------- public void testProperty() { YearMonthDay test = new YearMonthDay(2005, 6, 9); assertEquals(test.year(), test.property(DateTimeFieldType.year())); assertEquals(test.monthOfYear(), test.property(DateTimeFieldType.monthOfYear())); assertEquals(test.dayOfMonth(), test.property(DateTimeFieldType.dayOfMonth())); try { test.property(DateTimeFieldType.millisOfDay()); fail(); } catch (IllegalArgumentException ex) {} try { test.property(null); fail(); } catch (IllegalArgumentException ex) {} } //----------------------------------------------------------------------- public void testSerialization() throws Exception { YearMonthDay test = new YearMonthDay(1972, 6, 9, COPTIC_PARIS); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(test); byte[] bytes = baos.toByteArray(); oos.close(); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); YearMonthDay result = (YearMonthDay) ois.readObject(); ois.close(); assertEquals(test, result); assertTrue(Arrays.equals(test.getValues(), result.getValues())); assertTrue(Arrays.equals(test.getFields(), result.getFields())); assertEquals(test.getChronology(), result.getChronology()); } //----------------------------------------------------------------------- public void testToString() { YearMonthDay test = new YearMonthDay(2002, 6, 9); assertEquals("2002-06-09", test.toString()); } //----------------------------------------------------------------------- public void testToString_String() { YearMonthDay test = new YearMonthDay(2002, 6, 9); assertEquals("2002 \ufffd\ufffd", test.toString("yyyy HH")); assertEquals("2002-06-09", test.toString((String) null)); } //----------------------------------------------------------------------- public void testToString_String_Locale() { YearMonthDay test = new YearMonthDay(2002, 6, 9); assertEquals("\ufffd 9/6", test.toString("EEE d/M", Locale.ENGLISH)); assertEquals("\ufffd 9/6", test.toString("EEE d/M", Locale.FRENCH)); assertEquals("2002-06-09", test.toString(null, Locale.ENGLISH)); assertEquals("\ufffd 9/6", test.toString("EEE d/M", null)); assertEquals("2002-06-09", test.toString(null, null)); } //----------------------------------------------------------------------- public void testToString_DTFormatter() { YearMonthDay test = new YearMonthDay(2002, 6, 9); assertEquals("2002 \ufffd\ufffd", test.toString(DateTimeFormat.forPattern("yyyy HH"))); assertEquals("2002-06-09", test.toString((DateTimeFormatter) null)); } //----------------------------------------------------------------------- private void check(YearMonthDay test, int hour, int min, int sec) { assertEquals(hour, test.getYear()); assertEquals(min, test.getMonthOfYear()); assertEquals(sec, test.getDayOfMonth()); } }