1   /*
2    *  Copyright 2001-2006 Stephen Colebourne
3    *
4    *  Licensed under the Apache License, Version 2.0 (the "License");
5    *  you may not use this file except in compliance with the License.
6    *  You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *  Unless required by applicable law or agreed to in writing, software
11   *  distributed under the License is distributed on an "AS IS" BASIS,
12   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *  See the License for the specific language governing permissions and
14   *  limitations under the License.
15   */
16  package org.joda.time;
17  
18  import java.util.Calendar;
19  import java.util.Date;
20  import java.util.GregorianCalendar;
21  
22  import junit.framework.TestCase;
23  import junit.framework.TestSuite;
24  
25  import org.joda.time.chrono.BuddhistChronology;
26  import org.joda.time.chrono.GregorianChronology;
27  import org.joda.time.chrono.ISOChronology;
28  
29  /***
30   * This class is a Junit unit test for LocalDateTime.
31   *
32   * @author Stephen Colebourne
33   */
34  public class TestLocalDateTime_Constructors extends TestCase {
35  
36      private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
37      private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
38      private static final DateTimeZone MOSCOW = DateTimeZone.forID("Europe/Moscow");
39      private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC();
40      private static final Chronology GREGORIAN_UTC = GregorianChronology.getInstanceUTC();
41      private static final Chronology GREGORIAN_PARIS = GregorianChronology.getInstance(PARIS);
42      private static final Chronology GREGORIAN_MOSCOW = GregorianChronology.getInstance(MOSCOW);
43      private static final Chronology BUDDHIST_UTC = BuddhistChronology.getInstanceUTC();
44      private static final int OFFSET_PARIS = PARIS.getOffset(0L) / DateTimeConstants.MILLIS_PER_HOUR;
45      private static final int OFFSET_MOSCOW = MOSCOW.getOffset(0L) / DateTimeConstants.MILLIS_PER_HOUR;
46      
47      private long MILLIS_OF_DAY =
48          10L * DateTimeConstants.MILLIS_PER_HOUR
49          + 20L * DateTimeConstants.MILLIS_PER_MINUTE
50          + 30L * DateTimeConstants.MILLIS_PER_SECOND
51          + 40L;
52      private long TEST_TIME_NOW =
53          (31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY
54          + MILLIS_OF_DAY;
55  
56      private long TEST_TIME1 =
57          (31L + 28L + 31L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY
58          + 12L * DateTimeConstants.MILLIS_PER_HOUR
59          + 24L * DateTimeConstants.MILLIS_PER_MINUTE;
60      private long TEST_TIME2 =
61          (365L + 31L + 28L + 31L + 30L + 7L -1L) * DateTimeConstants.MILLIS_PER_DAY
62          + 14L * DateTimeConstants.MILLIS_PER_HOUR
63          + 28L * DateTimeConstants.MILLIS_PER_MINUTE;
64  
65      private DateTimeZone zone = null;
66  
67      public static void main(String[] args) {
68          junit.textui.TestRunner.run(suite());
69      }
70  
71      public static TestSuite suite() {
72          return new TestSuite(TestLocalDateTime_Constructors.class);
73      }
74  
75      public TestLocalDateTime_Constructors(String name) {
76          super(name);
77      }
78  
79      protected void setUp() throws Exception {
80          DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
81          zone = DateTimeZone.getDefault();
82          DateTimeZone.setDefault(MOSCOW);
83      }
84  
85      protected void tearDown() throws Exception {
86          DateTimeUtils.setCurrentMillisSystem();
87          DateTimeZone.setDefault(zone);
88          zone = null;
89      }
90  
91      //-----------------------------------------------------------------------
92      public void testFactory_FromCalendarFields() throws Exception {
93          GregorianCalendar cal = new GregorianCalendar(1970, 1, 3, 4, 5, 6);
94          cal.set(Calendar.MILLISECOND, 7);
95          LocalDateTime expected = new LocalDateTime(1970, 2, 3, 4, 5, 6, 7);
96          assertEquals(expected, LocalDateTime.fromCalendarFields(cal));
97          try {
98              LocalDateTime.fromCalendarFields((Calendar) null);
99              fail();
100         } catch (IllegalArgumentException ex) {}
101     }
102 
103     //-----------------------------------------------------------------------
104     public void testFactory_FromDateFields() throws Exception {
105         GregorianCalendar cal = new GregorianCalendar(1970, 1, 3, 4, 5, 6);
106         cal.set(Calendar.MILLISECOND, 7);
107         LocalDateTime expected = new LocalDateTime(1970, 2, 3, 4, 5 ,6, 7);
108         assertEquals(expected, LocalDateTime.fromDateFields(cal.getTime()));
109         try {
110             LocalDateTime.fromDateFields((Date) null);
111             fail();
112         } catch (IllegalArgumentException ex) {}
113     }
114 
115     //-----------------------------------------------------------------------
116     public void testConstructor() throws Throwable {
117         LocalDateTime test = new LocalDateTime();
118         assertEquals(ISO_UTC, test.getChronology());
119         assertEquals(1970, test.getYear());
120         assertEquals(6, test.getMonthOfYear());
121         assertEquals(9, test.getDayOfMonth());
122         assertEquals(10 + OFFSET_MOSCOW, test.getHourOfDay());
123         assertEquals(20, test.getMinuteOfHour());
124         assertEquals(30, test.getSecondOfMinute());
125         assertEquals(40, test.getMillisOfSecond());
126     }
127 
128     //-----------------------------------------------------------------------
129     public void testConstructor_DateTimeZone() throws Throwable {
130         DateTime dt = new DateTime(2005, 6, 8, 23, 59, 0, 0, LONDON);
131         DateTimeUtils.setCurrentMillisFixed(dt.getMillis());
132         // 23:59 in London is 00:59 the following day in Paris
133         
134         LocalDateTime test = new LocalDateTime(LONDON);
135         assertEquals(ISO_UTC, test.getChronology());
136         assertEquals(2005, test.getYear());
137         assertEquals(6, test.getMonthOfYear());
138         assertEquals(8, test.getDayOfMonth());
139         assertEquals(23, test.getHourOfDay());
140         assertEquals(59, test.getMinuteOfHour());
141         assertEquals(0, test.getSecondOfMinute());
142         assertEquals(0, test.getMillisOfSecond());
143         
144         test = new LocalDateTime(PARIS);
145         assertEquals(ISO_UTC, test.getChronology());
146         assertEquals(2005, test.getYear());
147         assertEquals(6, test.getMonthOfYear());
148         assertEquals(9, test.getDayOfMonth());
149         assertEquals(0, test.getHourOfDay());
150         assertEquals(59, test.getMinuteOfHour());
151         assertEquals(0, test.getSecondOfMinute());
152         assertEquals(0, test.getMillisOfSecond());
153     }
154 
155     public void testConstructor_nullDateTimeZone() throws Throwable {
156         LocalDateTime test = new LocalDateTime((DateTimeZone) null);
157         assertEquals(ISO_UTC, test.getChronology());
158         assertEquals(1970, test.getYear());
159         assertEquals(6, test.getMonthOfYear());
160         assertEquals(9, test.getDayOfMonth());
161         assertEquals(10 + OFFSET_MOSCOW, test.getHourOfDay());
162         assertEquals(20, test.getMinuteOfHour());
163         assertEquals(30, test.getSecondOfMinute());
164         assertEquals(40, test.getMillisOfSecond());
165     }
166 
167     //-----------------------------------------------------------------------
168     public void testConstructor_Chronology() throws Throwable {
169         LocalDateTime test = new LocalDateTime(GREGORIAN_PARIS);
170         assertEquals(GREGORIAN_UTC, test.getChronology());
171         assertEquals(1970, test.getYear());
172         assertEquals(6, test.getMonthOfYear());
173         assertEquals(9, test.getDayOfMonth());
174         assertEquals(10 + OFFSET_PARIS, test.getHourOfDay());
175         assertEquals(20, test.getMinuteOfHour());
176         assertEquals(30, test.getSecondOfMinute());
177         assertEquals(40, test.getMillisOfSecond());
178     }
179 
180     public void testConstructor_nullChronology() throws Throwable {
181         LocalDateTime test = new LocalDateTime((Chronology) null);
182         assertEquals(ISO_UTC, test.getChronology());
183         assertEquals(1970, test.getYear());
184         assertEquals(6, test.getMonthOfYear());
185         assertEquals(9, test.getDayOfMonth());
186         assertEquals(10 + OFFSET_MOSCOW, test.getHourOfDay());
187         assertEquals(20, test.getMinuteOfHour());
188         assertEquals(30, test.getSecondOfMinute());
189         assertEquals(40, test.getMillisOfSecond());
190     }
191 
192     //-----------------------------------------------------------------------
193     public void testConstructor_long1() throws Throwable {
194         LocalDateTime test = new LocalDateTime(TEST_TIME1);
195         assertEquals(ISO_UTC, test.getChronology());
196         assertEquals(1970, test.getYear());
197         assertEquals(4, test.getMonthOfYear());
198         assertEquals(6, test.getDayOfMonth());
199         assertEquals(12 + OFFSET_MOSCOW, test.getHourOfDay());
200         assertEquals(24, test.getMinuteOfHour());
201         assertEquals(0, test.getSecondOfMinute());
202         assertEquals(0, test.getMillisOfSecond());
203     }
204 
205     public void testConstructor_long2() throws Throwable {
206         LocalDateTime test = new LocalDateTime(TEST_TIME2);
207         assertEquals(ISO_UTC, test.getChronology());
208         assertEquals(1971, test.getYear());
209         assertEquals(5, test.getMonthOfYear());
210         assertEquals(7, test.getDayOfMonth());
211         assertEquals(14 + OFFSET_MOSCOW, test.getHourOfDay());
212         assertEquals(28, test.getMinuteOfHour());
213         assertEquals(0, test.getSecondOfMinute());
214         assertEquals(0, test.getMillisOfSecond());
215     }
216 
217     //-----------------------------------------------------------------------
218     public void testConstructor_long1_DateTimeZone() throws Throwable {
219         LocalDateTime test = new LocalDateTime(TEST_TIME1, PARIS);
220         assertEquals(ISO_UTC, test.getChronology());
221         assertEquals(1970, test.getYear());
222         assertEquals(4, test.getMonthOfYear());
223         assertEquals(6, test.getDayOfMonth());
224         assertEquals(12 + OFFSET_PARIS, test.getHourOfDay());
225         assertEquals(24, test.getMinuteOfHour());
226         assertEquals(0, test.getSecondOfMinute());
227         assertEquals(0, test.getMillisOfSecond());
228     }
229 
230     public void testConstructor_long2_DateTimeZone() throws Throwable {
231         LocalDateTime test = new LocalDateTime(TEST_TIME2, PARIS);
232         assertEquals(ISO_UTC, test.getChronology());
233         assertEquals(1971, test.getYear());
234         assertEquals(5, test.getMonthOfYear());
235         assertEquals(7, test.getDayOfMonth());
236         assertEquals(14 + OFFSET_PARIS, test.getHourOfDay());
237         assertEquals(28, test.getMinuteOfHour());
238         assertEquals(0, test.getSecondOfMinute());
239         assertEquals(0, test.getMillisOfSecond());
240     }
241 
242     public void testConstructor_long_nullDateTimeZone() throws Throwable {
243         LocalDateTime test = new LocalDateTime(TEST_TIME1, (DateTimeZone) null);
244         assertEquals(ISO_UTC, test.getChronology());
245         assertEquals(1970, test.getYear());
246         assertEquals(4, test.getMonthOfYear());
247         assertEquals(6, test.getDayOfMonth());
248         assertEquals(12 + OFFSET_MOSCOW, test.getHourOfDay());
249         assertEquals(24, test.getMinuteOfHour());
250         assertEquals(0, test.getSecondOfMinute());
251         assertEquals(0, test.getMillisOfSecond());
252     }
253 
254     //-----------------------------------------------------------------------
255     public void testConstructor_long1_Chronology() throws Throwable {
256         LocalDateTime test = new LocalDateTime(TEST_TIME1, GREGORIAN_PARIS);
257         assertEquals(GREGORIAN_UTC, test.getChronology());
258         assertEquals(1970, test.getYear());
259         assertEquals(4, test.getMonthOfYear());
260         assertEquals(6, test.getDayOfMonth());
261         assertEquals(12 + OFFSET_PARIS, test.getHourOfDay());
262         assertEquals(24, test.getMinuteOfHour());
263         assertEquals(0, test.getSecondOfMinute());
264         assertEquals(0, test.getMillisOfSecond());
265     }
266 
267     public void testConstructor_long2_Chronology() throws Throwable {
268         LocalDateTime test = new LocalDateTime(TEST_TIME2, GREGORIAN_PARIS);
269         assertEquals(GREGORIAN_UTC, test.getChronology());
270         assertEquals(1971, test.getYear());
271         assertEquals(5, test.getMonthOfYear());
272         assertEquals(7, test.getDayOfMonth());
273         assertEquals(14 + OFFSET_PARIS, test.getHourOfDay());
274         assertEquals(28, test.getMinuteOfHour());
275         assertEquals(0, test.getSecondOfMinute());
276         assertEquals(0, test.getMillisOfSecond());
277     }
278 
279     public void testConstructor_long_nullChronology() throws Throwable {
280         LocalDateTime test = new LocalDateTime(TEST_TIME1, (Chronology) null);
281         assertEquals(ISO_UTC, test.getChronology());
282         assertEquals(1970, test.getYear());
283         assertEquals(4, test.getMonthOfYear());
284         assertEquals(6, test.getDayOfMonth());
285         assertEquals(12 + OFFSET_MOSCOW, test.getHourOfDay());
286         assertEquals(24, test.getMinuteOfHour());
287         assertEquals(0, test.getSecondOfMinute());
288         assertEquals(0, test.getMillisOfSecond());
289     }
290 
291     //-----------------------------------------------------------------------
292     public void testConstructor_Object1() throws Throwable {
293         Date date = new Date(TEST_TIME1);
294         LocalDateTime test = new LocalDateTime(date);
295         assertEquals(ISO_UTC, test.getChronology());
296         assertEquals(1970, test.getYear());
297         assertEquals(4, test.getMonthOfYear());
298         assertEquals(6, test.getDayOfMonth());
299         assertEquals(12 + OFFSET_MOSCOW, test.getHourOfDay());
300         assertEquals(24, test.getMinuteOfHour());
301         assertEquals(0, test.getSecondOfMinute());
302         assertEquals(0, test.getMillisOfSecond());
303     }
304 
305     public void testConstructor_nullObject() throws Throwable {
306         LocalDateTime test = new LocalDateTime((Object) null);
307         assertEquals(ISO_UTC, test.getChronology());
308         assertEquals(1970, test.getYear());
309         assertEquals(6, test.getMonthOfYear());
310         assertEquals(9, test.getDayOfMonth());
311         assertEquals(10 + OFFSET_MOSCOW, test.getHourOfDay());
312         assertEquals(20, test.getMinuteOfHour());
313         assertEquals(30, test.getSecondOfMinute());
314         assertEquals(40, test.getMillisOfSecond());
315     }
316 
317     public void testConstructor_ObjectString1() throws Throwable {
318         LocalDateTime test = new LocalDateTime("1972-04-06");
319         assertEquals(ISO_UTC, test.getChronology());
320         assertEquals(1972, test.getYear());
321         assertEquals(4, test.getMonthOfYear());
322         assertEquals(6, test.getDayOfMonth());
323         assertEquals(0, test.getHourOfDay());
324         assertEquals(0, test.getMinuteOfHour());
325         assertEquals(0, test.getSecondOfMinute());
326         assertEquals(0, test.getMillisOfSecond());
327     }
328 
329     public void testConstructor_ObjectString2() throws Throwable {
330         LocalDateTime test = new LocalDateTime("1972-037");
331         assertEquals(ISO_UTC, test.getChronology());
332         assertEquals(1972, test.getYear());
333         assertEquals(2, test.getMonthOfYear());
334         assertEquals(6, test.getDayOfMonth());
335         assertEquals(0, test.getHourOfDay());
336         assertEquals(0, test.getMinuteOfHour());
337         assertEquals(0, test.getSecondOfMinute());
338         assertEquals(0, test.getMillisOfSecond());
339     }
340 
341     public void testConstructor_ObjectString3() throws Throwable {
342         LocalDateTime test = new LocalDateTime("1972-04-06T10:20:30.040");
343         assertEquals(ISO_UTC, test.getChronology());
344         assertEquals(1972, test.getYear());
345         assertEquals(4, test.getMonthOfYear());
346         assertEquals(6, test.getDayOfMonth());
347         assertEquals(10, test.getHourOfDay());
348         assertEquals(20, test.getMinuteOfHour());
349         assertEquals(30, test.getSecondOfMinute());
350         assertEquals(40, test.getMillisOfSecond());
351     }
352 
353     public void testConstructor_ObjectString4() throws Throwable {
354         LocalDateTime test = new LocalDateTime("1972-04-06T10:20");
355         assertEquals(ISO_UTC, test.getChronology());
356         assertEquals(1972, test.getYear());
357         assertEquals(4, test.getMonthOfYear());
358         assertEquals(6, test.getDayOfMonth());
359         assertEquals(10, test.getHourOfDay());
360         assertEquals(20, test.getMinuteOfHour());
361         assertEquals(0, test.getSecondOfMinute());
362         assertEquals(0, test.getMillisOfSecond());
363     }
364 
365     public void testConstructor_ObjectStringEx1() throws Throwable {
366         try {
367             new LocalDateTime("1970-04-06T+14:00");
368             fail();
369         } catch (IllegalArgumentException ex) {}
370     }
371 
372     public void testConstructor_ObjectStringEx2() throws Throwable {
373         try {
374             new LocalDateTime("1970-04-06T10:20:30.040+14:00");
375             fail();
376         } catch (IllegalArgumentException ex) {}
377     }
378 
379     public void testConstructor_ObjectStringEx3() throws Throwable {
380         try {
381             new LocalDateTime("T10:20:30.040");
382             fail();
383         } catch (IllegalArgumentException ex) {}
384     }
385 
386     public void testConstructor_ObjectStringEx4() throws Throwable {
387         try {
388             new LocalDateTime("T10:20:30.040+14:00");
389             fail();
390         } catch (IllegalArgumentException ex) {}
391     }
392 
393     public void testConstructor_ObjectStringEx5() throws Throwable {
394         try {
395             new LocalDateTime("10:20:30.040");
396             fail();
397         } catch (IllegalArgumentException ex) {}
398     }
399 
400     public void testConstructor_ObjectStringEx6() throws Throwable {
401         try {
402             new LocalDateTime("10:20:30.040+14:00");
403             fail();
404         } catch (IllegalArgumentException ex) {}
405     }
406 
407     public void testConstructor_ObjectLocalDateTime() throws Throwable {
408         LocalDateTime dt = new LocalDateTime(1970, 5, 6, 10, 20, 30, 40, BUDDHIST_UTC);
409         LocalDateTime test = new LocalDateTime(dt);
410         assertEquals(BUDDHIST_UTC, test.getChronology());
411         assertEquals(1970, test.getYear());
412         assertEquals(5, test.getMonthOfYear());
413         assertEquals(6, test.getDayOfMonth());
414         assertEquals(10, test.getHourOfDay());
415         assertEquals(20, test.getMinuteOfHour());
416         assertEquals(30, test.getSecondOfMinute());
417         assertEquals(40, test.getMillisOfSecond());
418     }
419 
420     public void testConstructor_ObjectLocalDate() throws Throwable {
421         LocalDate date = new LocalDate(1970, 5, 6);
422         try {
423             new LocalDateTime(date);
424             fail();
425         } catch (IllegalArgumentException ex) {}
426     }
427 
428     public void testConstructor_ObjectLocalTime() throws Throwable {
429         LocalTime time = new LocalTime(10, 20, 30, 40);
430         try {
431             new LocalDateTime(time);
432             fail();
433         } catch (IllegalArgumentException ex) {}
434     }
435 
436     //-----------------------------------------------------------------------
437     public void testConstructor_Object_DateTimeZone() throws Throwable {
438         Date date = new Date(TEST_TIME1);
439         LocalDateTime test = new LocalDateTime(date, PARIS);
440         assertEquals(ISO_UTC, test.getChronology());
441         assertEquals(1970, test.getYear());
442         assertEquals(4, test.getMonthOfYear());
443         assertEquals(6, test.getDayOfMonth());
444         assertEquals(12 + OFFSET_PARIS, test.getHourOfDay());
445         assertEquals(24, test.getMinuteOfHour());
446         assertEquals(0, test.getSecondOfMinute());
447         assertEquals(0, test.getMillisOfSecond());
448     }
449 
450     public void testConstructor_Object_DateTimeZoneMoscow() throws Throwable {
451         LocalDateTime test = new LocalDateTime("1970-04-06T12:24:00", MOSCOW);
452         assertEquals(ISO_UTC, test.getChronology());
453         assertEquals(1970, test.getYear());
454         assertEquals(4, test.getMonthOfYear());
455         assertEquals(6, test.getDayOfMonth());
456         assertEquals(12, test.getHourOfDay());
457         assertEquals(24, test.getMinuteOfHour());
458         assertEquals(0, test.getSecondOfMinute());
459         assertEquals(0, test.getMillisOfSecond());
460     }
461 
462     public void testConstructor_Object_DateTimeZoneMoscowBadDateTime() throws Throwable {
463         // 1981-03-31T23:59:59.999+03:00 followed by 1981-04-01T01:00:00.000+04:00
464         // 1981-09-30T23:59:59.999+04:00 followed by 1981-09-30T23:00:00.000+03:00
465         
466         // when a DST non-existing time is passed in, it should still work (ie. zone ignored)
467         LocalDateTime test = new LocalDateTime("1981-04-01T00:30:00", MOSCOW);  // doesnt exist
468         assertEquals(ISO_UTC, test.getChronology());
469         assertEquals(1981, test.getYear());
470         assertEquals(4, test.getMonthOfYear());
471         assertEquals(1, test.getDayOfMonth());
472         assertEquals(0, test.getHourOfDay());
473         assertEquals(30, test.getMinuteOfHour());
474         assertEquals(0, test.getSecondOfMinute());
475         assertEquals(0, test.getMillisOfSecond());
476     }
477 
478     public void testConstructor_nullObject_DateTimeZone() throws Throwable {
479         LocalDateTime test = new LocalDateTime((Object) null, PARIS);
480         assertEquals(ISO_UTC, test.getChronology());
481         assertEquals(1970, test.getYear());
482         assertEquals(6, test.getMonthOfYear());
483         assertEquals(9, test.getDayOfMonth());
484         assertEquals(10 + OFFSET_PARIS, test.getHourOfDay());
485         assertEquals(20, test.getMinuteOfHour());
486         assertEquals(30, test.getSecondOfMinute());
487         assertEquals(40, test.getMillisOfSecond());
488     }
489 
490     public void testConstructor_Object_nullDateTimeZone() throws Throwable {
491         Date date = new Date(TEST_TIME1);
492         LocalDateTime test = new LocalDateTime(date, (DateTimeZone) null);
493         assertEquals(ISO_UTC, test.getChronology());
494         assertEquals(1970, test.getYear());
495         assertEquals(4, test.getMonthOfYear());
496         assertEquals(6, test.getDayOfMonth());
497         assertEquals(12 + OFFSET_MOSCOW, test.getHourOfDay());
498         assertEquals(24, test.getMinuteOfHour());
499         assertEquals(0, test.getSecondOfMinute());
500         assertEquals(0, test.getMillisOfSecond());
501     }
502 
503     public void testConstructor_nullObject_nullDateTimeZone() throws Throwable {
504         LocalDateTime test = new LocalDateTime((Object) null, (DateTimeZone) null);
505         assertEquals(ISO_UTC, test.getChronology());
506         assertEquals(1970, test.getYear());
507         assertEquals(6, test.getMonthOfYear());
508         assertEquals(9, test.getDayOfMonth());
509         assertEquals(10 + OFFSET_MOSCOW, test.getHourOfDay());
510         assertEquals(20, test.getMinuteOfHour());
511         assertEquals(30, test.getSecondOfMinute());
512         assertEquals(40, test.getMillisOfSecond());
513     }
514 
515     //-----------------------------------------------------------------------
516     public void testConstructor_Object_Chronology() throws Throwable {
517         Date date = new Date(TEST_TIME1);
518         LocalDateTime test = new LocalDateTime(date, GREGORIAN_PARIS);
519         assertEquals(GREGORIAN_UTC, test.getChronology());
520         assertEquals(1970, test.getYear());
521         assertEquals(4, test.getMonthOfYear());
522         assertEquals(6, test.getDayOfMonth());
523         assertEquals(12 + OFFSET_PARIS, test.getHourOfDay());
524         assertEquals(24, test.getMinuteOfHour());
525         assertEquals(0, test.getSecondOfMinute());
526         assertEquals(0, test.getMillisOfSecond());
527     }
528 
529     public void testConstructor_Object_ChronologyMoscow() throws Throwable {
530         LocalDateTime test = new LocalDateTime("1970-04-06T12:24:00", GREGORIAN_MOSCOW);
531         assertEquals(GREGORIAN_UTC, test.getChronology());
532         assertEquals(1970, test.getYear());
533         assertEquals(4, test.getMonthOfYear());
534         assertEquals(6, test.getDayOfMonth());
535         assertEquals(12, test.getHourOfDay());
536         assertEquals(24, test.getMinuteOfHour());
537         assertEquals(0, test.getSecondOfMinute());
538         assertEquals(0, test.getMillisOfSecond());
539     }
540 
541     public void testConstructor_Object_ChronologyMoscowBadDateTime() throws Throwable {
542         // 1981-03-31T23:59:59.999+03:00 followed by 1981-04-01T01:00:00.000+04:00
543         // 1981-09-30T23:59:59.999+04:00 followed by 1981-09-30T23:00:00.000+03:00
544         
545         // when a DST non-existing time is passed in, it should still work (ie. zone ignored)
546         LocalDateTime test = new LocalDateTime("1981-04-01T00:30:00", GREGORIAN_MOSCOW);  // doesnt exist
547         assertEquals(GREGORIAN_UTC, test.getChronology());
548         assertEquals(1981, test.getYear());
549         assertEquals(4, test.getMonthOfYear());
550         assertEquals(1, test.getDayOfMonth());
551         assertEquals(0, test.getHourOfDay());
552         assertEquals(30, test.getMinuteOfHour());
553         assertEquals(0, test.getSecondOfMinute());
554         assertEquals(0, test.getMillisOfSecond());
555     }
556 
557     public void testConstructor_nullObject_Chronology() throws Throwable {
558         LocalDateTime test = new LocalDateTime((Object) null, GREGORIAN_PARIS);
559         assertEquals(GREGORIAN_UTC, test.getChronology());
560         assertEquals(1970, test.getYear());
561         assertEquals(6, test.getMonthOfYear());
562         assertEquals(9, test.getDayOfMonth());
563         assertEquals(10 + OFFSET_PARIS, test.getHourOfDay());
564         assertEquals(20, test.getMinuteOfHour());
565         assertEquals(30, test.getSecondOfMinute());
566         assertEquals(40, test.getMillisOfSecond());
567     }
568 
569     public void testConstructor_Object_nullChronology() throws Throwable {
570         Date date = new Date(TEST_TIME1);
571         LocalDateTime test = new LocalDateTime(date, (Chronology) null);
572         assertEquals(ISO_UTC, test.getChronology());
573         assertEquals(1970, test.getYear());
574         assertEquals(4, test.getMonthOfYear());
575         assertEquals(6, test.getDayOfMonth());
576         assertEquals(12 + OFFSET_MOSCOW, test.getHourOfDay());
577         assertEquals(24, test.getMinuteOfHour());
578         assertEquals(0, test.getSecondOfMinute());
579         assertEquals(0, test.getMillisOfSecond());
580     }
581 
582     public void testConstructor_nullObject_nullChronology() throws Throwable {
583         LocalDateTime test = new LocalDateTime((Object) null, (Chronology) null);
584         assertEquals(ISO_UTC, test.getChronology());
585         assertEquals(1970, test.getYear());
586         assertEquals(6, test.getMonthOfYear());
587         assertEquals(9, test.getDayOfMonth());
588         assertEquals(10 + OFFSET_MOSCOW, test.getHourOfDay());
589         assertEquals(20, test.getMinuteOfHour());
590         assertEquals(30, test.getSecondOfMinute());
591         assertEquals(40, test.getMillisOfSecond());
592     }
593 
594     //-----------------------------------------------------------------------
595     public void testConstructor_int_int_int_int_int() throws Throwable {
596         LocalDateTime test = new LocalDateTime(2005, 6, 9, 10, 20);
597         assertEquals(ISO_UTC, test.getChronology());
598         assertEquals(2005, test.getYear());
599         assertEquals(6, test.getMonthOfYear());
600         assertEquals(9, test.getDayOfMonth());
601         assertEquals(10, test.getHourOfDay());
602         assertEquals(20, test.getMinuteOfHour());
603         assertEquals(0, test.getSecondOfMinute());
604         assertEquals(0, test.getMillisOfSecond());
605     }
606 
607     //-----------------------------------------------------------------------
608     public void testConstructor_int_int_int_int_int_int() throws Throwable {
609         LocalDateTime test = new LocalDateTime(2005, 6, 9, 10, 20, 30);
610         assertEquals(ISO_UTC, test.getChronology());
611         assertEquals(2005, test.getYear());
612         assertEquals(6, test.getMonthOfYear());
613         assertEquals(9, test.getDayOfMonth());
614         assertEquals(10, test.getHourOfDay());
615         assertEquals(20, test.getMinuteOfHour());
616         assertEquals(30, test.getSecondOfMinute());
617         assertEquals(0, test.getMillisOfSecond());
618     }
619 
620     //-----------------------------------------------------------------------
621     public void testConstructor_int_int_int_int_int_int_int() throws Throwable {
622         LocalDateTime test = new LocalDateTime(2005, 6, 9, 10, 20, 30, 40);
623         assertEquals(ISO_UTC, test.getChronology());
624         assertEquals(2005, test.getYear());
625         assertEquals(6, test.getMonthOfYear());
626         assertEquals(9, test.getDayOfMonth());
627         assertEquals(10, test.getHourOfDay());
628         assertEquals(20, test.getMinuteOfHour());
629         assertEquals(30, test.getSecondOfMinute());
630         assertEquals(40, test.getMillisOfSecond());
631         try {
632             new LocalDateTime(Integer.MIN_VALUE, 6, 9, 10, 20, 30, 40);
633             fail();
634         } catch (IllegalArgumentException ex) {}
635         try {
636             new LocalDateTime(Integer.MAX_VALUE, 6, 9, 10, 20, 30, 40);
637             fail();
638         } catch (IllegalArgumentException ex) {}
639         try {
640             new LocalDateTime(2005, 0, 9, 10, 20, 30, 40);
641             fail();
642         } catch (IllegalArgumentException ex) {}
643         try {
644             new LocalDateTime(2005, 13, 9, 10, 20, 30, 40);
645             fail();
646         } catch (IllegalArgumentException ex) {}
647         try {
648             new LocalDateTime(2005, 6, 0, 10, 20, 30, 40);
649             fail();
650         } catch (IllegalArgumentException ex) {}
651         try {
652             new LocalDateTime(2005, 6, 31, 10, 20, 30, 40);
653             fail();
654         } catch (IllegalArgumentException ex) {}
655         new LocalDateTime(2005, 7, 31, 10, 20, 30, 40);
656         try {
657             new LocalDateTime(2005, 7, 32, 10, 20, 30, 40);
658             fail();
659         } catch (IllegalArgumentException ex) {}
660     }
661 
662     public void testConstructor_int_int_int_Chronology() throws Throwable {
663         LocalDateTime test = new LocalDateTime(2005, 6, 9, 10, 20, 30, 40, GREGORIAN_PARIS);
664         assertEquals(GREGORIAN_UTC, test.getChronology());
665         assertEquals(2005, test.getYear());
666         assertEquals(6, test.getMonthOfYear());
667         assertEquals(9, test.getDayOfMonth());
668         assertEquals(10, test.getHourOfDay());  // PARIS has no effect
669         assertEquals(20, test.getMinuteOfHour());
670         assertEquals(30, test.getSecondOfMinute());
671         assertEquals(40, test.getMillisOfSecond());
672         try {
673             new LocalDateTime(Integer.MIN_VALUE, 6, 9, 10, 20, 30, 40, GREGORIAN_PARIS);
674             fail();
675         } catch (IllegalArgumentException ex) {}
676         try {
677             new LocalDateTime(Integer.MAX_VALUE, 6, 9, 10, 20, 30, 40, GREGORIAN_PARIS);
678             fail();
679         } catch (IllegalArgumentException ex) {}
680         try {
681             new LocalDateTime(2005, 0, 9, 10, 20, 30, 40, GREGORIAN_PARIS);
682             fail();
683         } catch (IllegalArgumentException ex) {}
684         try {
685             new LocalDateTime(2005, 13, 9, 10, 20, 30, 40, GREGORIAN_PARIS);
686             fail();
687         } catch (IllegalArgumentException ex) {}
688         try {
689             new LocalDateTime(2005, 6, 0, 10, 20, 30, 40, GREGORIAN_PARIS);
690             fail();
691         } catch (IllegalArgumentException ex) {}
692         try {
693             new LocalDateTime(2005, 6, 31, 10, 20, 30, 40, GREGORIAN_PARIS);
694             fail();
695         } catch (IllegalArgumentException ex) {}
696         new LocalDateTime(2005, 7, 31, 10, 20, 30, 40, GREGORIAN_PARIS);
697         try {
698             new LocalDateTime(2005, 7, 32, 10, 20, 30, 40, GREGORIAN_PARIS);
699             fail();
700         } catch (IllegalArgumentException ex) {}
701     }
702 
703     public void testConstructor_int_int_int_nullChronology() throws Throwable {
704         LocalDateTime test = new LocalDateTime(2005, 6, 9, 10, 20, 30, 40, null);
705         assertEquals(ISO_UTC, test.getChronology());
706         assertEquals(2005, test.getYear());
707         assertEquals(6, test.getMonthOfYear());
708         assertEquals(9, test.getDayOfMonth());
709     }
710 
711 }