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;
017    
018    import java.io.ByteArrayInputStream;
019    import java.io.ByteArrayOutputStream;
020    import java.io.ObjectInputStream;
021    import java.io.ObjectOutputStream;
022    import java.lang.reflect.Constructor;
023    
024    import junit.framework.TestCase;
025    import junit.framework.TestSuite;
026    
027    import org.joda.time.chrono.CopticChronology;
028    
029    /**
030     * This class is a Junit unit test for Chronology.
031     *
032     * @author Stephen Colebourne
033     */
034    public class TestDateTimeFieldType extends TestCase {
035    
036        public static void main(String[] args) {
037            junit.textui.TestRunner.run(suite());
038        }
039    
040        public static TestSuite suite() {
041            return new TestSuite(TestDateTimeFieldType.class);
042        }
043    
044        public TestDateTimeFieldType(String name) {
045            super(name);
046        }
047    
048        protected void setUp() throws Exception {
049        }
050    
051        protected void tearDown() throws Exception {
052        }
053    
054        //-----------------------------------------------------------------------
055        public void test_era() throws Exception {
056            assertEquals(DateTimeFieldType.era(), DateTimeFieldType.era());
057            assertEquals("era", DateTimeFieldType.era().getName());
058            assertEquals(DurationFieldType.eras(), DateTimeFieldType.era().getDurationType());
059            assertEquals(null, DateTimeFieldType.era().getRangeDurationType());
060            assertEquals(CopticChronology.getInstanceUTC().era(), DateTimeFieldType.era().getField(CopticChronology.getInstanceUTC()));
061            assertEquals(CopticChronology.getInstanceUTC().era().isSupported(), DateTimeFieldType.era().isSupported(CopticChronology.getInstanceUTC()));
062            assertSerialization(DateTimeFieldType.era());
063        }
064    
065        public void test_centuryOfEra() throws Exception {
066            assertEquals(DateTimeFieldType.centuryOfEra(), DateTimeFieldType.centuryOfEra());
067            assertEquals("centuryOfEra", DateTimeFieldType.centuryOfEra().getName());
068            assertEquals(DurationFieldType.centuries(), DateTimeFieldType.centuryOfEra().getDurationType());
069            assertEquals(DurationFieldType.eras(), DateTimeFieldType.centuryOfEra().getRangeDurationType());
070            assertEquals(CopticChronology.getInstanceUTC().centuryOfEra(), DateTimeFieldType.centuryOfEra().getField(CopticChronology.getInstanceUTC()));
071            assertEquals(CopticChronology.getInstanceUTC().centuryOfEra().isSupported(), DateTimeFieldType.centuryOfEra().isSupported(CopticChronology.getInstanceUTC()));
072            assertSerialization(DateTimeFieldType.centuryOfEra());
073        }
074    
075        public void test_yearOfCentury() throws Exception {
076            assertEquals(DateTimeFieldType.yearOfCentury(), DateTimeFieldType.yearOfCentury());
077            assertEquals("yearOfCentury", DateTimeFieldType.yearOfCentury().getName());
078            assertEquals(DurationFieldType.years(), DateTimeFieldType.yearOfCentury().getDurationType());
079            assertEquals(DurationFieldType.centuries(), DateTimeFieldType.yearOfCentury().getRangeDurationType());
080            assertEquals(CopticChronology.getInstanceUTC().yearOfCentury(), DateTimeFieldType.yearOfCentury().getField(CopticChronology.getInstanceUTC()));
081            assertEquals(CopticChronology.getInstanceUTC().yearOfCentury().isSupported(), DateTimeFieldType.yearOfCentury().isSupported(CopticChronology.getInstanceUTC()));
082            assertSerialization(DateTimeFieldType.yearOfCentury());
083        }
084    
085        public void test_yearOfEra() throws Exception {
086            assertEquals(DateTimeFieldType.yearOfEra(), DateTimeFieldType.yearOfEra());
087            assertEquals("yearOfEra", DateTimeFieldType.yearOfEra().getName());
088            assertEquals(DurationFieldType.years(), DateTimeFieldType.yearOfEra().getDurationType());
089            assertEquals(DurationFieldType.eras(), DateTimeFieldType.yearOfEra().getRangeDurationType());
090            assertEquals(CopticChronology.getInstanceUTC().yearOfEra(), DateTimeFieldType.yearOfEra().getField(CopticChronology.getInstanceUTC()));
091            assertEquals(CopticChronology.getInstanceUTC().yearOfEra().isSupported(), DateTimeFieldType.yearOfEra().isSupported(CopticChronology.getInstanceUTC()));
092            assertSerialization(DateTimeFieldType.yearOfEra());
093        }
094    
095        public void test_year() throws Exception {
096            assertEquals(DateTimeFieldType.year(), DateTimeFieldType.year());
097            assertEquals("year", DateTimeFieldType.year().getName());
098            assertEquals(DurationFieldType.years(), DateTimeFieldType.year().getDurationType());
099            assertEquals(null, DateTimeFieldType.year().getRangeDurationType());
100            assertEquals(CopticChronology.getInstanceUTC().year(), DateTimeFieldType.year().getField(CopticChronology.getInstanceUTC()));
101            assertEquals(CopticChronology.getInstanceUTC().year().isSupported(), DateTimeFieldType.year().isSupported(CopticChronology.getInstanceUTC()));
102            assertSerialization(DateTimeFieldType.year());
103        }
104    
105        public void test_monthOfYear() throws Exception {
106            assertEquals(DateTimeFieldType.monthOfYear(), DateTimeFieldType.monthOfYear());
107            assertEquals("monthOfYear", DateTimeFieldType.monthOfYear().getName());
108            assertEquals(DurationFieldType.months(), DateTimeFieldType.monthOfYear().getDurationType());
109            assertEquals(DurationFieldType.years(), DateTimeFieldType.monthOfYear().getRangeDurationType());
110            assertEquals(CopticChronology.getInstanceUTC().monthOfYear(), DateTimeFieldType.monthOfYear().getField(CopticChronology.getInstanceUTC()));
111            assertEquals(CopticChronology.getInstanceUTC().monthOfYear().isSupported(), DateTimeFieldType.monthOfYear().isSupported(CopticChronology.getInstanceUTC()));
112            assertSerialization(DateTimeFieldType.monthOfYear());
113        }
114    
115        public void test_weekyearOfCentury() throws Exception {
116            assertEquals(DateTimeFieldType.weekyearOfCentury(), DateTimeFieldType.weekyearOfCentury());
117            assertEquals("weekyearOfCentury", DateTimeFieldType.weekyearOfCentury().getName());
118            assertEquals(DurationFieldType.weekyears(), DateTimeFieldType.weekyearOfCentury().getDurationType());
119            assertEquals(DurationFieldType.centuries(), DateTimeFieldType.weekyearOfCentury().getRangeDurationType());
120            assertEquals(CopticChronology.getInstanceUTC().weekyearOfCentury(), DateTimeFieldType.weekyearOfCentury().getField(CopticChronology.getInstanceUTC()));
121            assertEquals(CopticChronology.getInstanceUTC().weekyearOfCentury().isSupported(), DateTimeFieldType.weekyearOfCentury().isSupported(CopticChronology.getInstanceUTC()));
122            assertSerialization(DateTimeFieldType.weekyearOfCentury());
123        }
124    
125        public void test_weekyear() throws Exception {
126            assertEquals(DateTimeFieldType.weekyear(), DateTimeFieldType.weekyear());
127            assertEquals("weekyear", DateTimeFieldType.weekyear().getName());
128            assertEquals(DurationFieldType.weekyears(), DateTimeFieldType.weekyear().getDurationType());
129            assertEquals(null, DateTimeFieldType.weekyear().getRangeDurationType());
130            assertEquals(CopticChronology.getInstanceUTC().weekyear(), DateTimeFieldType.weekyear().getField(CopticChronology.getInstanceUTC()));
131            assertEquals(CopticChronology.getInstanceUTC().weekyear().isSupported(), DateTimeFieldType.weekyear().isSupported(CopticChronology.getInstanceUTC()));
132            assertSerialization(DateTimeFieldType.weekyear());
133        }
134    
135        public void test_weekOfWeekyear() throws Exception {
136            assertEquals(DateTimeFieldType.weekOfWeekyear(), DateTimeFieldType.weekOfWeekyear());
137            assertEquals("weekOfWeekyear", DateTimeFieldType.weekOfWeekyear().getName());
138            assertEquals(DurationFieldType.weeks(), DateTimeFieldType.weekOfWeekyear().getDurationType());
139            assertEquals(DurationFieldType.weekyears(), DateTimeFieldType.weekOfWeekyear().getRangeDurationType());
140            assertEquals(CopticChronology.getInstanceUTC().weekOfWeekyear(), DateTimeFieldType.weekOfWeekyear().getField(CopticChronology.getInstanceUTC()));
141            assertEquals(CopticChronology.getInstanceUTC().weekOfWeekyear().isSupported(), DateTimeFieldType.weekOfWeekyear().isSupported(CopticChronology.getInstanceUTC()));
142            assertSerialization(DateTimeFieldType.weekOfWeekyear());
143        }
144    
145        public void test_dayOfYear() throws Exception {
146            assertEquals(DateTimeFieldType.dayOfYear(), DateTimeFieldType.dayOfYear());
147            assertEquals("dayOfYear", DateTimeFieldType.dayOfYear().getName());
148            assertEquals(DurationFieldType.days(), DateTimeFieldType.dayOfYear().getDurationType());
149            assertEquals(DurationFieldType.years(), DateTimeFieldType.dayOfYear().getRangeDurationType());
150            assertEquals(CopticChronology.getInstanceUTC().dayOfYear(), DateTimeFieldType.dayOfYear().getField(CopticChronology.getInstanceUTC()));
151            assertEquals(CopticChronology.getInstanceUTC().dayOfYear().isSupported(), DateTimeFieldType.dayOfYear().isSupported(CopticChronology.getInstanceUTC()));
152            assertSerialization(DateTimeFieldType.dayOfYear());
153        }
154    
155        public void test_dayOfMonth() throws Exception {
156            assertEquals(DateTimeFieldType.dayOfMonth(), DateTimeFieldType.dayOfMonth());
157            assertEquals("dayOfMonth", DateTimeFieldType.dayOfMonth().getName());
158            assertEquals(DurationFieldType.days(), DateTimeFieldType.dayOfMonth().getDurationType());
159            assertEquals(DurationFieldType.months(), DateTimeFieldType.dayOfMonth().getRangeDurationType());
160            assertEquals(CopticChronology.getInstanceUTC().dayOfMonth(), DateTimeFieldType.dayOfMonth().getField(CopticChronology.getInstanceUTC()));
161            assertEquals(CopticChronology.getInstanceUTC().dayOfMonth().isSupported(), DateTimeFieldType.dayOfMonth().isSupported(CopticChronology.getInstanceUTC()));
162            assertSerialization(DateTimeFieldType.dayOfMonth());
163        }
164    
165        public void test_dayOfWeek() throws Exception {
166            assertEquals(DateTimeFieldType.dayOfWeek(), DateTimeFieldType.dayOfWeek());
167            assertEquals("dayOfWeek", DateTimeFieldType.dayOfWeek().getName());
168            assertEquals(DurationFieldType.days(), DateTimeFieldType.dayOfWeek().getDurationType());
169            assertEquals(DurationFieldType.weeks(), DateTimeFieldType.dayOfWeek().getRangeDurationType());
170            assertEquals(CopticChronology.getInstanceUTC().dayOfWeek(), DateTimeFieldType.dayOfWeek().getField(CopticChronology.getInstanceUTC()));
171            assertEquals(CopticChronology.getInstanceUTC().dayOfWeek().isSupported(), DateTimeFieldType.dayOfWeek().isSupported(CopticChronology.getInstanceUTC()));
172            assertSerialization(DateTimeFieldType.dayOfWeek());
173        }
174    
175        public void test_halfdayOfDay() throws Exception {
176            assertEquals(DateTimeFieldType.halfdayOfDay(), DateTimeFieldType.halfdayOfDay());
177            assertEquals("halfdayOfDay", DateTimeFieldType.halfdayOfDay().getName());
178            assertEquals(DurationFieldType.halfdays(), DateTimeFieldType.halfdayOfDay().getDurationType());
179            assertEquals(DurationFieldType.days(), DateTimeFieldType.halfdayOfDay().getRangeDurationType());
180            assertEquals(CopticChronology.getInstanceUTC().halfdayOfDay(), DateTimeFieldType.halfdayOfDay().getField(CopticChronology.getInstanceUTC()));
181            assertEquals(CopticChronology.getInstanceUTC().halfdayOfDay().isSupported(), DateTimeFieldType.halfdayOfDay().isSupported(CopticChronology.getInstanceUTC()));
182            assertSerialization(DateTimeFieldType.halfdayOfDay());
183        }
184    
185        public void test_clockhourOfDay() throws Exception {
186            assertEquals(DateTimeFieldType.clockhourOfDay(), DateTimeFieldType.clockhourOfDay());
187            assertEquals("clockhourOfDay", DateTimeFieldType.clockhourOfDay().getName());
188            assertEquals(DurationFieldType.hours(), DateTimeFieldType.clockhourOfDay().getDurationType());
189            assertEquals(DurationFieldType.days(), DateTimeFieldType.clockhourOfDay().getRangeDurationType());
190            assertEquals(CopticChronology.getInstanceUTC().clockhourOfDay(), DateTimeFieldType.clockhourOfDay().getField(CopticChronology.getInstanceUTC()));
191            assertEquals(CopticChronology.getInstanceUTC().clockhourOfDay().isSupported(), DateTimeFieldType.clockhourOfDay().isSupported(CopticChronology.getInstanceUTC()));
192            assertSerialization(DateTimeFieldType.clockhourOfDay());
193        }
194    
195        public void test_clockhourOfHalfday() throws Exception {
196            assertEquals(DateTimeFieldType.clockhourOfHalfday(), DateTimeFieldType.clockhourOfHalfday());
197            assertEquals("clockhourOfHalfday", DateTimeFieldType.clockhourOfHalfday().getName());
198            assertEquals(DurationFieldType.hours(), DateTimeFieldType.clockhourOfHalfday().getDurationType());
199            assertEquals(DurationFieldType.halfdays(), DateTimeFieldType.clockhourOfHalfday().getRangeDurationType());
200            assertEquals(CopticChronology.getInstanceUTC().clockhourOfHalfday(), DateTimeFieldType.clockhourOfHalfday().getField(CopticChronology.getInstanceUTC()));
201            assertEquals(CopticChronology.getInstanceUTC().clockhourOfHalfday().isSupported(), DateTimeFieldType.clockhourOfHalfday().isSupported(CopticChronology.getInstanceUTC()));
202            assertSerialization(DateTimeFieldType.clockhourOfHalfday());
203        }
204    
205        public void test_hourOfHalfday() throws Exception {
206            assertEquals(DateTimeFieldType.hourOfHalfday(), DateTimeFieldType.hourOfHalfday());
207            assertEquals("hourOfHalfday", DateTimeFieldType.hourOfHalfday().getName());
208            assertEquals(DurationFieldType.hours(), DateTimeFieldType.hourOfHalfday().getDurationType());
209            assertEquals(DurationFieldType.halfdays(), DateTimeFieldType.hourOfHalfday().getRangeDurationType());
210            assertEquals(CopticChronology.getInstanceUTC().hourOfHalfday(), DateTimeFieldType.hourOfHalfday().getField(CopticChronology.getInstanceUTC()));
211            assertEquals(CopticChronology.getInstanceUTC().hourOfHalfday().isSupported(), DateTimeFieldType.hourOfHalfday().isSupported(CopticChronology.getInstanceUTC()));
212            assertSerialization(DateTimeFieldType.hourOfHalfday());
213        }
214    
215        public void test_hourOfDay() throws Exception {
216            assertEquals(DateTimeFieldType.hourOfDay(), DateTimeFieldType.hourOfDay());
217            assertEquals("hourOfDay", DateTimeFieldType.hourOfDay().getName());
218            assertEquals(DurationFieldType.hours(), DateTimeFieldType.hourOfDay().getDurationType());
219            assertEquals(DurationFieldType.days(), DateTimeFieldType.hourOfDay().getRangeDurationType());
220            assertEquals(CopticChronology.getInstanceUTC().hourOfDay(), DateTimeFieldType.hourOfDay().getField(CopticChronology.getInstanceUTC()));
221            assertEquals(CopticChronology.getInstanceUTC().hourOfDay().isSupported(), DateTimeFieldType.hourOfDay().isSupported(CopticChronology.getInstanceUTC()));
222            assertSerialization(DateTimeFieldType.hourOfDay());
223        }
224    
225        public void test_minuteOfDay() throws Exception {
226            assertEquals(DateTimeFieldType.minuteOfDay(), DateTimeFieldType.minuteOfDay());
227            assertEquals("minuteOfDay", DateTimeFieldType.minuteOfDay().getName());
228            assertEquals(DurationFieldType.minutes(), DateTimeFieldType.minuteOfDay().getDurationType());
229            assertEquals(DurationFieldType.days(), DateTimeFieldType.minuteOfDay().getRangeDurationType());
230            assertEquals(CopticChronology.getInstanceUTC().minuteOfDay(), DateTimeFieldType.minuteOfDay().getField(CopticChronology.getInstanceUTC()));
231            assertEquals(CopticChronology.getInstanceUTC().minuteOfDay().isSupported(), DateTimeFieldType.minuteOfDay().isSupported(CopticChronology.getInstanceUTC()));
232            assertSerialization(DateTimeFieldType.minuteOfDay());
233        }
234    
235        public void test_minuteOfHour() throws Exception {
236            assertEquals(DateTimeFieldType.minuteOfHour(), DateTimeFieldType.minuteOfHour());
237            assertEquals("minuteOfHour", DateTimeFieldType.minuteOfHour().getName());
238            assertEquals(DurationFieldType.minutes(), DateTimeFieldType.minuteOfHour().getDurationType());
239            assertEquals(DurationFieldType.hours(), DateTimeFieldType.minuteOfHour().getRangeDurationType());
240            assertEquals(CopticChronology.getInstanceUTC().minuteOfHour(), DateTimeFieldType.minuteOfHour().getField(CopticChronology.getInstanceUTC()));
241            assertEquals(CopticChronology.getInstanceUTC().minuteOfHour().isSupported(), DateTimeFieldType.minuteOfHour().isSupported(CopticChronology.getInstanceUTC()));
242            assertSerialization(DateTimeFieldType.minuteOfHour());
243        }
244    
245        public void test_secondOfDay() throws Exception {
246            assertEquals(DateTimeFieldType.secondOfDay(), DateTimeFieldType.secondOfDay());
247            assertEquals("secondOfDay", DateTimeFieldType.secondOfDay().getName());
248            assertEquals(DurationFieldType.seconds(), DateTimeFieldType.secondOfDay().getDurationType());
249            assertEquals(DurationFieldType.days(), DateTimeFieldType.secondOfDay().getRangeDurationType());
250            assertEquals(CopticChronology.getInstanceUTC().secondOfDay(), DateTimeFieldType.secondOfDay().getField(CopticChronology.getInstanceUTC()));
251            assertEquals(CopticChronology.getInstanceUTC().secondOfDay().isSupported(), DateTimeFieldType.secondOfDay().isSupported(CopticChronology.getInstanceUTC()));
252            assertSerialization(DateTimeFieldType.secondOfDay());
253        }
254    
255        public void test_secondOfMinute() throws Exception {
256            assertEquals(DateTimeFieldType.secondOfMinute(), DateTimeFieldType.secondOfMinute());
257            assertEquals("secondOfMinute", DateTimeFieldType.secondOfMinute().getName());
258            assertEquals(DurationFieldType.seconds(), DateTimeFieldType.secondOfMinute().getDurationType());
259            assertEquals(DurationFieldType.minutes(), DateTimeFieldType.secondOfMinute().getRangeDurationType());
260            assertEquals(CopticChronology.getInstanceUTC().secondOfMinute(), DateTimeFieldType.secondOfMinute().getField(CopticChronology.getInstanceUTC()));
261            assertEquals(CopticChronology.getInstanceUTC().secondOfMinute().isSupported(), DateTimeFieldType.secondOfMinute().isSupported(CopticChronology.getInstanceUTC()));
262            assertSerialization(DateTimeFieldType.secondOfMinute());
263        }
264    
265        public void test_millisOfDay() throws Exception {
266            assertEquals(DateTimeFieldType.millisOfDay(), DateTimeFieldType.millisOfDay());
267            assertEquals("millisOfDay", DateTimeFieldType.millisOfDay().getName());
268            assertEquals(DurationFieldType.millis(), DateTimeFieldType.millisOfDay().getDurationType());
269            assertEquals(DurationFieldType.days(), DateTimeFieldType.millisOfDay().getRangeDurationType());
270            assertEquals(CopticChronology.getInstanceUTC().millisOfDay(), DateTimeFieldType.millisOfDay().getField(CopticChronology.getInstanceUTC()));
271            assertEquals(CopticChronology.getInstanceUTC().millisOfDay().isSupported(), DateTimeFieldType.millisOfDay().isSupported(CopticChronology.getInstanceUTC()));
272            assertSerialization(DateTimeFieldType.millisOfDay());
273        }
274    
275        public void test_millisOfSecond() throws Exception {
276            assertEquals(DateTimeFieldType.millisOfSecond(), DateTimeFieldType.millisOfSecond());
277            assertEquals("millisOfSecond", DateTimeFieldType.millisOfSecond().getName());
278            assertEquals(DurationFieldType.millis(), DateTimeFieldType.millisOfSecond().getDurationType());
279            assertEquals(DurationFieldType.seconds(), DateTimeFieldType.millisOfSecond().getRangeDurationType());
280            assertEquals(CopticChronology.getInstanceUTC().millisOfSecond(), DateTimeFieldType.millisOfSecond().getField(CopticChronology.getInstanceUTC()));
281            assertEquals(CopticChronology.getInstanceUTC().millisOfSecond().isSupported(), DateTimeFieldType.millisOfSecond().isSupported(CopticChronology.getInstanceUTC()));
282            assertSerialization(DateTimeFieldType.millisOfSecond());
283        }
284    
285        public void test_other() throws Exception {
286            assertEquals(1, DateTimeFieldType.class.getDeclaredClasses().length);
287            Class cls = DateTimeFieldType.class.getDeclaredClasses()[0];
288            assertEquals(1, cls.getDeclaredConstructors().length);
289            Constructor con = cls.getDeclaredConstructors()[0];
290            Object[] params = new Object[] {
291                "other", new Byte((byte) 128), DurationFieldType.hours(), DurationFieldType.months()};
292            con.setAccessible(true);  // for Apache Harmony JVM
293            DateTimeFieldType type = (DateTimeFieldType) con.newInstance(params);
294            
295            assertEquals("other", type.getName());
296            assertSame(DurationFieldType.hours(), type.getDurationType());
297            assertSame(DurationFieldType.months(), type.getRangeDurationType());
298            try {
299                type.getField(CopticChronology.getInstanceUTC());
300                fail();
301            } catch (InternalError ex) {}
302            DateTimeFieldType result = doSerialization(type);
303            assertEquals(type.getName(), result.getName());
304            assertNotSame(type, result);
305        }
306    
307        //-----------------------------------------------------------------------
308        private void assertSerialization(DateTimeFieldType type) throws Exception {
309            DateTimeFieldType result = doSerialization(type);
310            assertSame(type, result);
311        }
312    
313        private DateTimeFieldType doSerialization(DateTimeFieldType type) throws Exception {
314            ByteArrayOutputStream baos = new ByteArrayOutputStream();
315            ObjectOutputStream oos = new ObjectOutputStream(baos);
316            oos.writeObject(type);
317            byte[] bytes = baos.toByteArray();
318            oos.close();
319            
320            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
321            ObjectInputStream ois = new ObjectInputStream(bais);
322            DateTimeFieldType result = (DateTimeFieldType) ois.readObject();
323            ois.close();
324            return result;
325        }
326    
327    }