001    /*
002     *  Copyright 2001-2005 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.chrono;
017    
018    import java.util.Locale;
019    import java.util.TimeZone;
020    
021    import junit.framework.TestCase;
022    import junit.framework.TestSuite;
023    
024    import org.joda.time.DateTimeConstants;
025    import org.joda.time.DateTimeUtils;
026    import org.joda.time.DateTimeZone;
027    
028    /**
029     * This class is a Junit unit test for JulianChronology.
030     *
031     * @author Stephen Colebourne
032     */
033    public class TestJulianChronology extends TestCase {
034    
035        private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
036        private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
037        private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
038    
039        long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 
040                         366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 
041                         365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
042                         366 + 365;
043        // 2002-06-09
044        private long TEST_TIME_NOW =
045                (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
046    
047        private DateTimeZone originalDateTimeZone = null;
048        private TimeZone originalTimeZone = null;
049        private Locale originalLocale = null;
050    
051        public static void main(String[] args) {
052            junit.textui.TestRunner.run(suite());
053        }
054    
055        public static TestSuite suite() {
056            return new TestSuite(TestJulianChronology.class);
057        }
058    
059        public TestJulianChronology(String name) {
060            super(name);
061        }
062    
063        protected void setUp() throws Exception {
064            DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
065            originalDateTimeZone = DateTimeZone.getDefault();
066            originalTimeZone = TimeZone.getDefault();
067            originalLocale = Locale.getDefault();
068            DateTimeZone.setDefault(LONDON);
069            TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
070            Locale.setDefault(Locale.UK);
071        }
072    
073        protected void tearDown() throws Exception {
074            DateTimeUtils.setCurrentMillisSystem();
075            DateTimeZone.setDefault(originalDateTimeZone);
076            TimeZone.setDefault(originalTimeZone);
077            Locale.setDefault(originalLocale);
078            originalDateTimeZone = null;
079            originalTimeZone = null;
080            originalLocale = null;
081        }
082    
083        //-----------------------------------------------------------------------
084        public void testFactoryUTC() {
085            assertEquals(DateTimeZone.UTC, JulianChronology.getInstanceUTC().getZone());
086            assertSame(JulianChronology.class, JulianChronology.getInstanceUTC().getClass());
087        }
088    
089        public void testFactory() {
090            assertEquals(LONDON, JulianChronology.getInstance().getZone());
091            assertSame(JulianChronology.class, JulianChronology.getInstance().getClass());
092        }
093    
094        public void testFactory_Zone() {
095            assertEquals(TOKYO, JulianChronology.getInstance(TOKYO).getZone());
096            assertEquals(PARIS, JulianChronology.getInstance(PARIS).getZone());
097            assertEquals(LONDON, JulianChronology.getInstance(null).getZone());
098            assertSame(JulianChronology.class, JulianChronology.getInstance(TOKYO).getClass());
099        }
100    
101        public void testFactory_Zone_int() {
102            JulianChronology chrono = JulianChronology.getInstance(TOKYO, 2);
103            assertEquals(TOKYO, chrono.getZone());
104            assertEquals(2, chrono.getMinimumDaysInFirstWeek());
105            
106            try {
107                JulianChronology.getInstance(TOKYO, 0);
108                fail();
109            } catch (IllegalArgumentException ex) {}
110            try {
111                JulianChronology.getInstance(TOKYO, 8);
112                fail();
113            } catch (IllegalArgumentException ex) {}
114        }
115    
116        //-----------------------------------------------------------------------
117        public void testEquality() {
118            assertSame(JulianChronology.getInstance(TOKYO), JulianChronology.getInstance(TOKYO));
119            assertSame(JulianChronology.getInstance(LONDON), JulianChronology.getInstance(LONDON));
120            assertSame(JulianChronology.getInstance(PARIS), JulianChronology.getInstance(PARIS));
121            assertSame(JulianChronology.getInstanceUTC(), JulianChronology.getInstanceUTC());
122            assertSame(JulianChronology.getInstance(), JulianChronology.getInstance(LONDON));
123        }
124    
125        public void testWithUTC() {
126            assertSame(JulianChronology.getInstanceUTC(), JulianChronology.getInstance(LONDON).withUTC());
127            assertSame(JulianChronology.getInstanceUTC(), JulianChronology.getInstance(TOKYO).withUTC());
128            assertSame(JulianChronology.getInstanceUTC(), JulianChronology.getInstanceUTC().withUTC());
129            assertSame(JulianChronology.getInstanceUTC(), JulianChronology.getInstance().withUTC());
130        }
131    
132        public void testWithZone() {
133            assertSame(JulianChronology.getInstance(TOKYO), JulianChronology.getInstance(TOKYO).withZone(TOKYO));
134            assertSame(JulianChronology.getInstance(LONDON), JulianChronology.getInstance(TOKYO).withZone(LONDON));
135            assertSame(JulianChronology.getInstance(PARIS), JulianChronology.getInstance(TOKYO).withZone(PARIS));
136            assertSame(JulianChronology.getInstance(LONDON), JulianChronology.getInstance(TOKYO).withZone(null));
137            assertSame(JulianChronology.getInstance(PARIS), JulianChronology.getInstance().withZone(PARIS));
138            assertSame(JulianChronology.getInstance(PARIS), JulianChronology.getInstanceUTC().withZone(PARIS));
139        }
140    
141        public void testToString() {
142            assertEquals("JulianChronology[Europe/London]", JulianChronology.getInstance(LONDON).toString());
143            assertEquals("JulianChronology[Asia/Tokyo]", JulianChronology.getInstance(TOKYO).toString());
144            assertEquals("JulianChronology[Europe/London]", JulianChronology.getInstance().toString());
145            assertEquals("JulianChronology[UTC]", JulianChronology.getInstanceUTC().toString());
146            assertEquals("JulianChronology[UTC,mdfw=2]", JulianChronology.getInstance(DateTimeZone.UTC, 2).toString());
147        }
148    
149        //-----------------------------------------------------------------------
150        public void testDurationFields() {
151            assertEquals("eras", JulianChronology.getInstance().eras().getName());
152            assertEquals("centuries", JulianChronology.getInstance().centuries().getName());
153            assertEquals("years", JulianChronology.getInstance().years().getName());
154            assertEquals("weekyears", JulianChronology.getInstance().weekyears().getName());
155            assertEquals("months", JulianChronology.getInstance().months().getName());
156            assertEquals("weeks", JulianChronology.getInstance().weeks().getName());
157            assertEquals("days", JulianChronology.getInstance().days().getName());
158            assertEquals("halfdays", JulianChronology.getInstance().halfdays().getName());
159            assertEquals("hours", JulianChronology.getInstance().hours().getName());
160            assertEquals("minutes", JulianChronology.getInstance().minutes().getName());
161            assertEquals("seconds", JulianChronology.getInstance().seconds().getName());
162            assertEquals("millis", JulianChronology.getInstance().millis().getName());
163            
164            assertEquals(false, JulianChronology.getInstance().eras().isSupported());
165            assertEquals(true, JulianChronology.getInstance().centuries().isSupported());
166            assertEquals(true, JulianChronology.getInstance().years().isSupported());
167            assertEquals(true, JulianChronology.getInstance().weekyears().isSupported());
168            assertEquals(true, JulianChronology.getInstance().months().isSupported());
169            assertEquals(true, JulianChronology.getInstance().weeks().isSupported());
170            assertEquals(true, JulianChronology.getInstance().days().isSupported());
171            assertEquals(true, JulianChronology.getInstance().halfdays().isSupported());
172            assertEquals(true, JulianChronology.getInstance().hours().isSupported());
173            assertEquals(true, JulianChronology.getInstance().minutes().isSupported());
174            assertEquals(true, JulianChronology.getInstance().seconds().isSupported());
175            assertEquals(true, JulianChronology.getInstance().millis().isSupported());
176            
177            assertEquals(false, JulianChronology.getInstance().centuries().isPrecise());
178            assertEquals(false, JulianChronology.getInstance().years().isPrecise());
179            assertEquals(false, JulianChronology.getInstance().weekyears().isPrecise());
180            assertEquals(false, JulianChronology.getInstance().months().isPrecise());
181            assertEquals(false, JulianChronology.getInstance().weeks().isPrecise());
182            assertEquals(false, JulianChronology.getInstance().days().isPrecise());
183            assertEquals(false, JulianChronology.getInstance().halfdays().isPrecise());
184            assertEquals(true, JulianChronology.getInstance().hours().isPrecise());
185            assertEquals(true, JulianChronology.getInstance().minutes().isPrecise());
186            assertEquals(true, JulianChronology.getInstance().seconds().isPrecise());
187            assertEquals(true, JulianChronology.getInstance().millis().isPrecise());
188            
189            assertEquals(false, JulianChronology.getInstanceUTC().centuries().isPrecise());
190            assertEquals(false, JulianChronology.getInstanceUTC().years().isPrecise());
191            assertEquals(false, JulianChronology.getInstanceUTC().weekyears().isPrecise());
192            assertEquals(false, JulianChronology.getInstanceUTC().months().isPrecise());
193            assertEquals(true, JulianChronology.getInstanceUTC().weeks().isPrecise());
194            assertEquals(true, JulianChronology.getInstanceUTC().days().isPrecise());
195            assertEquals(true, JulianChronology.getInstanceUTC().halfdays().isPrecise());
196            assertEquals(true, JulianChronology.getInstanceUTC().hours().isPrecise());
197            assertEquals(true, JulianChronology.getInstanceUTC().minutes().isPrecise());
198            assertEquals(true, JulianChronology.getInstanceUTC().seconds().isPrecise());
199            assertEquals(true, JulianChronology.getInstanceUTC().millis().isPrecise());
200            
201            DateTimeZone gmt = DateTimeZone.forID("Etc/GMT");
202            assertEquals(false, JulianChronology.getInstance(gmt).centuries().isPrecise());
203            assertEquals(false, JulianChronology.getInstance(gmt).years().isPrecise());
204            assertEquals(false, JulianChronology.getInstance(gmt).weekyears().isPrecise());
205            assertEquals(false, JulianChronology.getInstance(gmt).months().isPrecise());
206            assertEquals(true, JulianChronology.getInstance(gmt).weeks().isPrecise());
207            assertEquals(true, JulianChronology.getInstance(gmt).days().isPrecise());
208            assertEquals(true, JulianChronology.getInstance(gmt).halfdays().isPrecise());
209            assertEquals(true, JulianChronology.getInstance(gmt).hours().isPrecise());
210            assertEquals(true, JulianChronology.getInstance(gmt).minutes().isPrecise());
211            assertEquals(true, JulianChronology.getInstance(gmt).seconds().isPrecise());
212            assertEquals(true, JulianChronology.getInstance(gmt).millis().isPrecise());
213        }
214    
215        public void testDateFields() {
216            assertEquals("era", JulianChronology.getInstance().era().getName());
217            assertEquals("centuryOfEra", JulianChronology.getInstance().centuryOfEra().getName());
218            assertEquals("yearOfCentury", JulianChronology.getInstance().yearOfCentury().getName());
219            assertEquals("yearOfEra", JulianChronology.getInstance().yearOfEra().getName());
220            assertEquals("year", JulianChronology.getInstance().year().getName());
221            assertEquals("monthOfYear", JulianChronology.getInstance().monthOfYear().getName());
222            assertEquals("weekyearOfCentury", JulianChronology.getInstance().weekyearOfCentury().getName());
223            assertEquals("weekyear", JulianChronology.getInstance().weekyear().getName());
224            assertEquals("weekOfWeekyear", JulianChronology.getInstance().weekOfWeekyear().getName());
225            assertEquals("dayOfYear", JulianChronology.getInstance().dayOfYear().getName());
226            assertEquals("dayOfMonth", JulianChronology.getInstance().dayOfMonth().getName());
227            assertEquals("dayOfWeek", JulianChronology.getInstance().dayOfWeek().getName());
228            
229            assertEquals(true, JulianChronology.getInstance().era().isSupported());
230            assertEquals(true, JulianChronology.getInstance().centuryOfEra().isSupported());
231            assertEquals(true, JulianChronology.getInstance().yearOfCentury().isSupported());
232            assertEquals(true, JulianChronology.getInstance().yearOfEra().isSupported());
233            assertEquals(true, JulianChronology.getInstance().year().isSupported());
234            assertEquals(true, JulianChronology.getInstance().monthOfYear().isSupported());
235            assertEquals(true, JulianChronology.getInstance().weekyearOfCentury().isSupported());
236            assertEquals(true, JulianChronology.getInstance().weekyear().isSupported());
237            assertEquals(true, JulianChronology.getInstance().weekOfWeekyear().isSupported());
238            assertEquals(true, JulianChronology.getInstance().dayOfYear().isSupported());
239            assertEquals(true, JulianChronology.getInstance().dayOfMonth().isSupported());
240            assertEquals(true, JulianChronology.getInstance().dayOfWeek().isSupported());
241        }
242    
243        public void testTimeFields() {
244            assertEquals("halfdayOfDay", JulianChronology.getInstance().halfdayOfDay().getName());
245            assertEquals("clockhourOfHalfday", JulianChronology.getInstance().clockhourOfHalfday().getName());
246            assertEquals("hourOfHalfday", JulianChronology.getInstance().hourOfHalfday().getName());
247            assertEquals("clockhourOfDay", JulianChronology.getInstance().clockhourOfDay().getName());
248            assertEquals("hourOfDay", JulianChronology.getInstance().hourOfDay().getName());
249            assertEquals("minuteOfDay", JulianChronology.getInstance().minuteOfDay().getName());
250            assertEquals("minuteOfHour", JulianChronology.getInstance().minuteOfHour().getName());
251            assertEquals("secondOfDay", JulianChronology.getInstance().secondOfDay().getName());
252            assertEquals("secondOfMinute", JulianChronology.getInstance().secondOfMinute().getName());
253            assertEquals("millisOfDay", JulianChronology.getInstance().millisOfDay().getName());
254            assertEquals("millisOfSecond", JulianChronology.getInstance().millisOfSecond().getName());
255            
256            assertEquals(true, JulianChronology.getInstance().halfdayOfDay().isSupported());
257            assertEquals(true, JulianChronology.getInstance().clockhourOfHalfday().isSupported());
258            assertEquals(true, JulianChronology.getInstance().hourOfHalfday().isSupported());
259            assertEquals(true, JulianChronology.getInstance().clockhourOfDay().isSupported());
260            assertEquals(true, JulianChronology.getInstance().hourOfDay().isSupported());
261            assertEquals(true, JulianChronology.getInstance().minuteOfDay().isSupported());
262            assertEquals(true, JulianChronology.getInstance().minuteOfHour().isSupported());
263            assertEquals(true, JulianChronology.getInstance().secondOfDay().isSupported());
264            assertEquals(true, JulianChronology.getInstance().secondOfMinute().isSupported());
265            assertEquals(true, JulianChronology.getInstance().millisOfDay().isSupported());
266            assertEquals(true, JulianChronology.getInstance().millisOfSecond().isSupported());
267        }
268    
269    }