/* * Copyright 2001-2007 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.chrono; import junit.framework.TestCase; import junit.framework.TestSuite; import org.joda.time.Chronology; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.MockZone; /** * * @author Brian S O'Neill * @author Blair Martin */ public class TestLenientChronology extends TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static TestSuite suite() { return new TestSuite(TestLenientChronology.class); } public TestLenientChronology(String name) { super(name); } protected void setUp() throws Exception { } protected void tearDown() throws Exception { } //----------------------------------------------------------------------- public void test_setYear() { Chronology zone = LenientChronology.getInstance(ISOChronology.getInstanceUTC()); DateTime dt = new DateTime(2007, 1, 1, 0, 0 ,0, 0, zone); assertEquals("2007-01-01T00:00:00.000Z", dt.toString()); dt = dt.withYear(2008); assertEquals("2008-01-01T00:00:00.000Z", dt.toString()); } //----------------------------------------------------------------------- public void test_setMonthOfYear() { Chronology zone = LenientChronology.getInstance(ISOChronology.getInstanceUTC()); DateTime dt = new DateTime(2007, 1, 1, 0, 0 ,0, 0, zone); assertEquals("2007-01-01T00:00:00.000Z", dt.toString()); dt = dt.withMonthOfYear(13); assertEquals("2008-01-01T00:00:00.000Z", dt.toString()); dt = dt.withMonthOfYear(0); assertEquals("2007-12-01T00:00:00.000Z", dt.toString()); } //----------------------------------------------------------------------- public void test_setDayOfMonth() { Chronology zone = LenientChronology.getInstance(ISOChronology.getInstanceUTC()); DateTime dt = new DateTime(2007, 1, 1, 0, 0 ,0, 0, zone); assertEquals("2007-01-01T00:00:00.000Z", dt.toString()); dt = dt.withDayOfMonth(32); assertEquals("2007-02-01T00:00:00.000Z", dt.toString()); dt = dt.withDayOfMonth(0); assertEquals("2007-01-31T00:00:00.000Z", dt.toString()); } //----------------------------------------------------------------------- public void test_setHourOfDay() { Chronology zone = LenientChronology.getInstance(ISOChronology.getInstanceUTC()); DateTime dt = new DateTime(2007, 1, 1, 0, 0 ,0, 0, zone); assertEquals("2007-01-01T00:00:00.000Z", dt.toString()); dt = dt.withHourOfDay(24); assertEquals("2007-01-02T00:00:00.000Z", dt.toString()); dt = dt.withHourOfDay(-1); assertEquals("2007-01-01T23:00:00.000Z", dt.toString()); } //----------------------------------------------------------------------- //------------------------ Bug ------------------------------------------ //----------------------------------------------------------------------- public void testNearDstTransition() { // This is just a regression test. Test case provided by Blair Martin. int hour = 23; DateTime dt; dt = new DateTime(2006, 10, 29, hour, 0, 0, 0, ISOChronology.getInstance(DateTimeZone.forID("America/Los_Angeles"))); assertEquals(hour, dt.getHourOfDay()); // OK - no LenientChronology dt = new DateTime(2006, 10, 29, hour, 0, 0, 0, LenientChronology.getInstance (ISOChronology.getInstance(DateTimeZone.forOffsetHours(-8)))); assertEquals(hour, dt.getHourOfDay()); // OK - no TZ ID dt = new DateTime(2006, 10, 29, hour, 0, 0, 0, LenientChronology.getInstance (ISOChronology.getInstance(DateTimeZone.forID("America/Los_Angeles")))); assertEquals(hour, dt.getHourOfDay()); // Used to fail - hour was 22 } //----------------------------------------------------------------------- //------------------------ Bug [1755161] -------------------------------- //----------------------------------------------------------------------- /** Mock zone simulating America/Grand_Turk cutover at midnight 2007-04-01 */ private static long CUTOVER_TURK = 1175403600000L; private static int OFFSET_TURK = -18000000; // -05:00 private static final DateTimeZone MOCK_TURK = new MockZone(CUTOVER_TURK, OFFSET_TURK, 3600); //----------------------------------------------------------------------- public void test_MockTurkIsCorrect() { DateTime pre = new DateTime(CUTOVER_TURK - 1L, MOCK_TURK); assertEquals("2007-03-31T23:59:59.999-05:00", pre.toString()); DateTime at = new DateTime(CUTOVER_TURK, MOCK_TURK); assertEquals("2007-04-01T01:00:00.000-04:00", at.toString()); DateTime post = new DateTime(CUTOVER_TURK + 1L, MOCK_TURK); assertEquals("2007-04-01T01:00:00.001-04:00", post.toString()); } public void test_lenientChrononolgy_Chicago() { DateTimeZone zone = DateTimeZone.forID("America/Chicago"); Chronology lenient = LenientChronology.getInstance(ISOChronology.getInstance(zone)); DateTime dt = new DateTime(2007, 3, 11, 2, 30, 0, 0, lenient); assertEquals("2007-03-11T03:30:00.000-05:00", dt.toString()); } public void test_lenientChrononolgy_Turk() { Chronology lenient = LenientChronology.getInstance(ISOChronology.getInstance(MOCK_TURK)); DateTime dt = new DateTime(2007, 4, 1, 0, 30, 0, 0, lenient); assertEquals("2007-04-01T01:30:00.000-04:00", dt.toString()); } public void test_strictChrononolgy_Chicago() { DateTimeZone zone = DateTimeZone.forID("America/Chicago"); Chronology lenient = StrictChronology.getInstance(ISOChronology.getInstance(zone)); try { new DateTime(2007, 3, 11, 2, 30, 0, 0, lenient); fail(); } catch (IllegalArgumentException ex) { // expected } } public void test_isoChrononolgy_Chicago() { DateTimeZone zone = DateTimeZone.forID("America/Chicago"); Chronology lenient = ISOChronology.getInstance(zone); try { new DateTime(2007, 3, 11, 2, 30, 0, 0, lenient); fail(); } catch (IllegalArgumentException ex) { // expected } } }