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.Chronology;
025 import org.joda.time.DateTime;
026 import org.joda.time.DateTimeConstants;
027 import org.joda.time.DateTimeField;
028 import org.joda.time.DateTimeUtils;
029 import org.joda.time.DateTimeZone;
030 import org.joda.time.DurationField;
031 import org.joda.time.DurationFieldType;
032 import org.joda.time.DateTime.Property;
033
034 /**
035 * This class is a Junit unit test for EthiopicChronology.
036 *
037 * @author Stephen Colebourne
038 */
039 public class TestEthiopicChronology extends TestCase {
040
041 private static final int MILLIS_PER_DAY = DateTimeConstants.MILLIS_PER_DAY;
042
043 private static long SKIP = 1 * MILLIS_PER_DAY;
044
045 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
046 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
047 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
048 private static final Chronology ETHIOPIC_UTC = EthiopicChronology.getInstanceUTC();
049 private static final Chronology JULIAN_UTC = JulianChronology.getInstanceUTC();
050 private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC();
051
052 long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
053 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 +
054 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
055 366 + 365;
056 // 2002-06-09
057 private long TEST_TIME_NOW =
058 (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * MILLIS_PER_DAY;
059
060 private DateTimeZone originalDateTimeZone = null;
061 private TimeZone originalTimeZone = null;
062 private Locale originalLocale = null;
063
064 public static void main(String[] args) {
065 junit.textui.TestRunner.run(suite());
066 }
067
068 public static TestSuite suite() {
069 SKIP = 1 * MILLIS_PER_DAY;
070 return new TestSuite(TestEthiopicChronology.class);
071 }
072
073 public TestEthiopicChronology(String name) {
074 super(name);
075 }
076
077 protected void setUp() throws Exception {
078 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
079 originalDateTimeZone = DateTimeZone.getDefault();
080 originalTimeZone = TimeZone.getDefault();
081 originalLocale = Locale.getDefault();
082 DateTimeZone.setDefault(LONDON);
083 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
084 Locale.setDefault(Locale.UK);
085 }
086
087 protected void tearDown() throws Exception {
088 DateTimeUtils.setCurrentMillisSystem();
089 DateTimeZone.setDefault(originalDateTimeZone);
090 TimeZone.setDefault(originalTimeZone);
091 Locale.setDefault(originalLocale);
092 originalDateTimeZone = null;
093 originalTimeZone = null;
094 originalLocale = null;
095 }
096
097 //-----------------------------------------------------------------------
098 public void testFactoryUTC() {
099 assertEquals(DateTimeZone.UTC, EthiopicChronology.getInstanceUTC().getZone());
100 assertSame(EthiopicChronology.class, EthiopicChronology.getInstanceUTC().getClass());
101 }
102
103 public void testFactory() {
104 assertEquals(LONDON, EthiopicChronology.getInstance().getZone());
105 assertSame(EthiopicChronology.class, EthiopicChronology.getInstance().getClass());
106 }
107
108 public void testFactory_Zone() {
109 assertEquals(TOKYO, EthiopicChronology.getInstance(TOKYO).getZone());
110 assertEquals(PARIS, EthiopicChronology.getInstance(PARIS).getZone());
111 assertEquals(LONDON, EthiopicChronology.getInstance(null).getZone());
112 assertSame(EthiopicChronology.class, EthiopicChronology.getInstance(TOKYO).getClass());
113 }
114
115 //-----------------------------------------------------------------------
116 public void testEquality() {
117 assertSame(EthiopicChronology.getInstance(TOKYO), EthiopicChronology.getInstance(TOKYO));
118 assertSame(EthiopicChronology.getInstance(LONDON), EthiopicChronology.getInstance(LONDON));
119 assertSame(EthiopicChronology.getInstance(PARIS), EthiopicChronology.getInstance(PARIS));
120 assertSame(EthiopicChronology.getInstanceUTC(), EthiopicChronology.getInstanceUTC());
121 assertSame(EthiopicChronology.getInstance(), EthiopicChronology.getInstance(LONDON));
122 }
123
124 public void testWithUTC() {
125 assertSame(EthiopicChronology.getInstanceUTC(), EthiopicChronology.getInstance(LONDON).withUTC());
126 assertSame(EthiopicChronology.getInstanceUTC(), EthiopicChronology.getInstance(TOKYO).withUTC());
127 assertSame(EthiopicChronology.getInstanceUTC(), EthiopicChronology.getInstanceUTC().withUTC());
128 assertSame(EthiopicChronology.getInstanceUTC(), EthiopicChronology.getInstance().withUTC());
129 }
130
131 public void testWithZone() {
132 assertSame(EthiopicChronology.getInstance(TOKYO), EthiopicChronology.getInstance(TOKYO).withZone(TOKYO));
133 assertSame(EthiopicChronology.getInstance(LONDON), EthiopicChronology.getInstance(TOKYO).withZone(LONDON));
134 assertSame(EthiopicChronology.getInstance(PARIS), EthiopicChronology.getInstance(TOKYO).withZone(PARIS));
135 assertSame(EthiopicChronology.getInstance(LONDON), EthiopicChronology.getInstance(TOKYO).withZone(null));
136 assertSame(EthiopicChronology.getInstance(PARIS), EthiopicChronology.getInstance().withZone(PARIS));
137 assertSame(EthiopicChronology.getInstance(PARIS), EthiopicChronology.getInstanceUTC().withZone(PARIS));
138 }
139
140 public void testToString() {
141 assertEquals("EthiopicChronology[Europe/London]", EthiopicChronology.getInstance(LONDON).toString());
142 assertEquals("EthiopicChronology[Asia/Tokyo]", EthiopicChronology.getInstance(TOKYO).toString());
143 assertEquals("EthiopicChronology[Europe/London]", EthiopicChronology.getInstance().toString());
144 assertEquals("EthiopicChronology[UTC]", EthiopicChronology.getInstanceUTC().toString());
145 }
146
147 //-----------------------------------------------------------------------
148 public void testDurationFields() {
149 assertEquals("eras", EthiopicChronology.getInstance().eras().getName());
150 assertEquals("centuries", EthiopicChronology.getInstance().centuries().getName());
151 assertEquals("years", EthiopicChronology.getInstance().years().getName());
152 assertEquals("weekyears", EthiopicChronology.getInstance().weekyears().getName());
153 assertEquals("months", EthiopicChronology.getInstance().months().getName());
154 assertEquals("weeks", EthiopicChronology.getInstance().weeks().getName());
155 assertEquals("days", EthiopicChronology.getInstance().days().getName());
156 assertEquals("halfdays", EthiopicChronology.getInstance().halfdays().getName());
157 assertEquals("hours", EthiopicChronology.getInstance().hours().getName());
158 assertEquals("minutes", EthiopicChronology.getInstance().minutes().getName());
159 assertEquals("seconds", EthiopicChronology.getInstance().seconds().getName());
160 assertEquals("millis", EthiopicChronology.getInstance().millis().getName());
161
162 assertEquals(false, EthiopicChronology.getInstance().eras().isSupported());
163 assertEquals(true, EthiopicChronology.getInstance().centuries().isSupported());
164 assertEquals(true, EthiopicChronology.getInstance().years().isSupported());
165 assertEquals(true, EthiopicChronology.getInstance().weekyears().isSupported());
166 assertEquals(true, EthiopicChronology.getInstance().months().isSupported());
167 assertEquals(true, EthiopicChronology.getInstance().weeks().isSupported());
168 assertEquals(true, EthiopicChronology.getInstance().days().isSupported());
169 assertEquals(true, EthiopicChronology.getInstance().halfdays().isSupported());
170 assertEquals(true, EthiopicChronology.getInstance().hours().isSupported());
171 assertEquals(true, EthiopicChronology.getInstance().minutes().isSupported());
172 assertEquals(true, EthiopicChronology.getInstance().seconds().isSupported());
173 assertEquals(true, EthiopicChronology.getInstance().millis().isSupported());
174
175 assertEquals(false, EthiopicChronology.getInstance().centuries().isPrecise());
176 assertEquals(false, EthiopicChronology.getInstance().years().isPrecise());
177 assertEquals(false, EthiopicChronology.getInstance().weekyears().isPrecise());
178 assertEquals(false, EthiopicChronology.getInstance().months().isPrecise());
179 assertEquals(false, EthiopicChronology.getInstance().weeks().isPrecise());
180 assertEquals(false, EthiopicChronology.getInstance().days().isPrecise());
181 assertEquals(false, EthiopicChronology.getInstance().halfdays().isPrecise());
182 assertEquals(true, EthiopicChronology.getInstance().hours().isPrecise());
183 assertEquals(true, EthiopicChronology.getInstance().minutes().isPrecise());
184 assertEquals(true, EthiopicChronology.getInstance().seconds().isPrecise());
185 assertEquals(true, EthiopicChronology.getInstance().millis().isPrecise());
186
187 assertEquals(false, EthiopicChronology.getInstanceUTC().centuries().isPrecise());
188 assertEquals(false, EthiopicChronology.getInstanceUTC().years().isPrecise());
189 assertEquals(false, EthiopicChronology.getInstanceUTC().weekyears().isPrecise());
190 assertEquals(false, EthiopicChronology.getInstanceUTC().months().isPrecise());
191 assertEquals(true, EthiopicChronology.getInstanceUTC().weeks().isPrecise());
192 assertEquals(true, EthiopicChronology.getInstanceUTC().days().isPrecise());
193 assertEquals(true, EthiopicChronology.getInstanceUTC().halfdays().isPrecise());
194 assertEquals(true, EthiopicChronology.getInstanceUTC().hours().isPrecise());
195 assertEquals(true, EthiopicChronology.getInstanceUTC().minutes().isPrecise());
196 assertEquals(true, EthiopicChronology.getInstanceUTC().seconds().isPrecise());
197 assertEquals(true, EthiopicChronology.getInstanceUTC().millis().isPrecise());
198
199 DateTimeZone gmt = DateTimeZone.forID("Etc/GMT");
200 assertEquals(false, EthiopicChronology.getInstance(gmt).centuries().isPrecise());
201 assertEquals(false, EthiopicChronology.getInstance(gmt).years().isPrecise());
202 assertEquals(false, EthiopicChronology.getInstance(gmt).weekyears().isPrecise());
203 assertEquals(false, EthiopicChronology.getInstance(gmt).months().isPrecise());
204 assertEquals(true, EthiopicChronology.getInstance(gmt).weeks().isPrecise());
205 assertEquals(true, EthiopicChronology.getInstance(gmt).days().isPrecise());
206 assertEquals(true, EthiopicChronology.getInstance(gmt).halfdays().isPrecise());
207 assertEquals(true, EthiopicChronology.getInstance(gmt).hours().isPrecise());
208 assertEquals(true, EthiopicChronology.getInstance(gmt).minutes().isPrecise());
209 assertEquals(true, EthiopicChronology.getInstance(gmt).seconds().isPrecise());
210 assertEquals(true, EthiopicChronology.getInstance(gmt).millis().isPrecise());
211 }
212
213 public void testDateFields() {
214 assertEquals("era", EthiopicChronology.getInstance().era().getName());
215 assertEquals("centuryOfEra", EthiopicChronology.getInstance().centuryOfEra().getName());
216 assertEquals("yearOfCentury", EthiopicChronology.getInstance().yearOfCentury().getName());
217 assertEquals("yearOfEra", EthiopicChronology.getInstance().yearOfEra().getName());
218 assertEquals("year", EthiopicChronology.getInstance().year().getName());
219 assertEquals("monthOfYear", EthiopicChronology.getInstance().monthOfYear().getName());
220 assertEquals("weekyearOfCentury", EthiopicChronology.getInstance().weekyearOfCentury().getName());
221 assertEquals("weekyear", EthiopicChronology.getInstance().weekyear().getName());
222 assertEquals("weekOfWeekyear", EthiopicChronology.getInstance().weekOfWeekyear().getName());
223 assertEquals("dayOfYear", EthiopicChronology.getInstance().dayOfYear().getName());
224 assertEquals("dayOfMonth", EthiopicChronology.getInstance().dayOfMonth().getName());
225 assertEquals("dayOfWeek", EthiopicChronology.getInstance().dayOfWeek().getName());
226
227 assertEquals(true, EthiopicChronology.getInstance().era().isSupported());
228 assertEquals(true, EthiopicChronology.getInstance().centuryOfEra().isSupported());
229 assertEquals(true, EthiopicChronology.getInstance().yearOfCentury().isSupported());
230 assertEquals(true, EthiopicChronology.getInstance().yearOfEra().isSupported());
231 assertEquals(true, EthiopicChronology.getInstance().year().isSupported());
232 assertEquals(true, EthiopicChronology.getInstance().monthOfYear().isSupported());
233 assertEquals(true, EthiopicChronology.getInstance().weekyearOfCentury().isSupported());
234 assertEquals(true, EthiopicChronology.getInstance().weekyear().isSupported());
235 assertEquals(true, EthiopicChronology.getInstance().weekOfWeekyear().isSupported());
236 assertEquals(true, EthiopicChronology.getInstance().dayOfYear().isSupported());
237 assertEquals(true, EthiopicChronology.getInstance().dayOfMonth().isSupported());
238 assertEquals(true, EthiopicChronology.getInstance().dayOfWeek().isSupported());
239 }
240
241 public void testTimeFields() {
242 assertEquals("halfdayOfDay", EthiopicChronology.getInstance().halfdayOfDay().getName());
243 assertEquals("clockhourOfHalfday", EthiopicChronology.getInstance().clockhourOfHalfday().getName());
244 assertEquals("hourOfHalfday", EthiopicChronology.getInstance().hourOfHalfday().getName());
245 assertEquals("clockhourOfDay", EthiopicChronology.getInstance().clockhourOfDay().getName());
246 assertEquals("hourOfDay", EthiopicChronology.getInstance().hourOfDay().getName());
247 assertEquals("minuteOfDay", EthiopicChronology.getInstance().minuteOfDay().getName());
248 assertEquals("minuteOfHour", EthiopicChronology.getInstance().minuteOfHour().getName());
249 assertEquals("secondOfDay", EthiopicChronology.getInstance().secondOfDay().getName());
250 assertEquals("secondOfMinute", EthiopicChronology.getInstance().secondOfMinute().getName());
251 assertEquals("millisOfDay", EthiopicChronology.getInstance().millisOfDay().getName());
252 assertEquals("millisOfSecond", EthiopicChronology.getInstance().millisOfSecond().getName());
253
254 assertEquals(true, EthiopicChronology.getInstance().halfdayOfDay().isSupported());
255 assertEquals(true, EthiopicChronology.getInstance().clockhourOfHalfday().isSupported());
256 assertEquals(true, EthiopicChronology.getInstance().hourOfHalfday().isSupported());
257 assertEquals(true, EthiopicChronology.getInstance().clockhourOfDay().isSupported());
258 assertEquals(true, EthiopicChronology.getInstance().hourOfDay().isSupported());
259 assertEquals(true, EthiopicChronology.getInstance().minuteOfDay().isSupported());
260 assertEquals(true, EthiopicChronology.getInstance().minuteOfHour().isSupported());
261 assertEquals(true, EthiopicChronology.getInstance().secondOfDay().isSupported());
262 assertEquals(true, EthiopicChronology.getInstance().secondOfMinute().isSupported());
263 assertEquals(true, EthiopicChronology.getInstance().millisOfDay().isSupported());
264 assertEquals(true, EthiopicChronology.getInstance().millisOfSecond().isSupported());
265 }
266
267 //-----------------------------------------------------------------------
268 public void testEpoch() {
269 DateTime epoch = new DateTime(1, 1, 1, 0, 0, 0, 0, ETHIOPIC_UTC);
270 assertEquals(new DateTime(8, 8, 29, 0, 0, 0, 0, JULIAN_UTC), epoch.withChronology(JULIAN_UTC));
271 }
272
273 public void testEra() {
274 assertEquals(1, EthiopicChronology.EE);
275 try {
276 new DateTime(-1, 13, 5, 0, 0, 0, 0, ETHIOPIC_UTC);
277 fail();
278 } catch (IllegalArgumentException ex) {}
279 }
280
281 //-----------------------------------------------------------------------
282 /**
283 * Tests era, year, monthOfYear, dayOfMonth and dayOfWeek.
284 */
285 public void testCalendar() {
286 if (TestAll.FAST) {
287 return;
288 }
289 System.out.println("\nTestEthiopicChronology.testCalendar");
290 DateTime epoch = new DateTime(1, 1, 1, 0, 0, 0, 0, ETHIOPIC_UTC);
291 long millis = epoch.getMillis();
292 long end = new DateTime(3000, 1, 1, 0, 0, 0, 0, ISO_UTC).getMillis();
293 DateTimeField dayOfWeek = ETHIOPIC_UTC.dayOfWeek();
294 DateTimeField dayOfYear = ETHIOPIC_UTC.dayOfYear();
295 DateTimeField dayOfMonth = ETHIOPIC_UTC.dayOfMonth();
296 DateTimeField monthOfYear = ETHIOPIC_UTC.monthOfYear();
297 DateTimeField year = ETHIOPIC_UTC.year();
298 DateTimeField yearOfEra = ETHIOPIC_UTC.yearOfEra();
299 DateTimeField era = ETHIOPIC_UTC.era();
300 int expectedDOW = new DateTime(8, 8, 29, 0, 0, 0, 0, JULIAN_UTC).getDayOfWeek();
301 int expectedDOY = 1;
302 int expectedDay = 1;
303 int expectedMonth = 1;
304 int expectedYear = 1;
305 while (millis < end) {
306 int dowValue = dayOfWeek.get(millis);
307 int doyValue = dayOfYear.get(millis);
308 int dayValue = dayOfMonth.get(millis);
309 int monthValue = monthOfYear.get(millis);
310 int yearValue = year.get(millis);
311 int yearOfEraValue = yearOfEra.get(millis);
312 int monthLen = dayOfMonth.getMaximumValue(millis);
313 if (monthValue < 1 || monthValue > 13) {
314 fail("Bad month: " + millis);
315 }
316
317 // test era
318 assertEquals(1, era.get(millis));
319 assertEquals("EE", era.getAsText(millis));
320 assertEquals("EE", era.getAsShortText(millis));
321
322 // test date
323 assertEquals(expectedYear, yearValue);
324 assertEquals(expectedYear, yearOfEraValue);
325 assertEquals(expectedMonth, monthValue);
326 assertEquals(expectedDay, dayValue);
327 assertEquals(expectedDOW, dowValue);
328 assertEquals(expectedDOY, doyValue);
329
330 // test leap year
331 assertEquals(yearValue % 4 == 3, year.isLeap(millis));
332
333 // test month length
334 if (monthValue == 13) {
335 assertEquals(yearValue % 4 == 3, monthOfYear.isLeap(millis));
336 if (yearValue % 4 == 3) {
337 assertEquals(6, monthLen);
338 } else {
339 assertEquals(5, monthLen);
340 }
341 } else {
342 assertEquals(30, monthLen);
343 }
344
345 // recalculate date
346 expectedDOW = (((expectedDOW + 1) - 1) % 7) + 1;
347 expectedDay++;
348 expectedDOY++;
349 if (expectedDay == 31 && expectedMonth < 13) {
350 expectedDay = 1;
351 expectedMonth++;
352 } else if (expectedMonth == 13) {
353 if (expectedYear % 4 == 3 && expectedDay == 7) {
354 expectedDay = 1;
355 expectedMonth = 1;
356 expectedYear++;
357 expectedDOY = 1;
358 } else if (expectedYear % 4 != 3 && expectedDay == 6) {
359 expectedDay = 1;
360 expectedMonth = 1;
361 expectedYear++;
362 expectedDOY = 1;
363 }
364 }
365 millis += SKIP;
366 }
367 }
368
369 public void testSampleDate() {
370 DateTime dt = new DateTime(2004, 6, 9, 0, 0, 0, 0, ISO_UTC).withChronology(ETHIOPIC_UTC);
371 assertEquals(EthiopicChronology.EE, dt.getEra());
372 assertEquals(20, dt.getCenturyOfEra()); // TODO confirm
373 assertEquals(96, dt.getYearOfCentury());
374 assertEquals(1996, dt.getYearOfEra());
375
376 assertEquals(1996, dt.getYear());
377 Property fld = dt.year();
378 assertEquals(false, fld.isLeap());
379 assertEquals(0, fld.getLeapAmount());
380 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType());
381 assertEquals(new DateTime(1997, 10, 2, 0, 0, 0, 0, ETHIOPIC_UTC), fld.addToCopy(1));
382
383 assertEquals(10, dt.getMonthOfYear());
384 fld = dt.monthOfYear();
385 assertEquals(false, fld.isLeap());
386 assertEquals(0, fld.getLeapAmount());
387 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType());
388 assertEquals(1, fld.getMinimumValue());
389 assertEquals(1, fld.getMinimumValueOverall());
390 assertEquals(13, fld.getMaximumValue());
391 assertEquals(13, fld.getMaximumValueOverall());
392 assertEquals(new DateTime(1997, 1, 2, 0, 0, 0, 0, ETHIOPIC_UTC), fld.addToCopy(4));
393 assertEquals(new DateTime(1996, 1, 2, 0, 0, 0, 0, ETHIOPIC_UTC), fld.addWrapFieldToCopy(4));
394
395 assertEquals(2, dt.getDayOfMonth());
396 fld = dt.dayOfMonth();
397 assertEquals(false, fld.isLeap());
398 assertEquals(0, fld.getLeapAmount());
399 assertEquals(null, fld.getLeapDurationField());
400 assertEquals(1, fld.getMinimumValue());
401 assertEquals(1, fld.getMinimumValueOverall());
402 assertEquals(30, fld.getMaximumValue());
403 assertEquals(30, fld.getMaximumValueOverall());
404 assertEquals(new DateTime(1996, 10, 3, 0, 0, 0, 0, ETHIOPIC_UTC), fld.addToCopy(1));
405
406 assertEquals(DateTimeConstants.WEDNESDAY, dt.getDayOfWeek());
407 fld = dt.dayOfWeek();
408 assertEquals(false, fld.isLeap());
409 assertEquals(0, fld.getLeapAmount());
410 assertEquals(null, fld.getLeapDurationField());
411 assertEquals(1, fld.getMinimumValue());
412 assertEquals(1, fld.getMinimumValueOverall());
413 assertEquals(7, fld.getMaximumValue());
414 assertEquals(7, fld.getMaximumValueOverall());
415 assertEquals(new DateTime(1996, 10, 3, 0, 0, 0, 0, ETHIOPIC_UTC), fld.addToCopy(1));
416
417 assertEquals(9 * 30 + 2, dt.getDayOfYear());
418 fld = dt.dayOfYear();
419 assertEquals(false, fld.isLeap());
420 assertEquals(0, fld.getLeapAmount());
421 assertEquals(null, fld.getLeapDurationField());
422 assertEquals(1, fld.getMinimumValue());
423 assertEquals(1, fld.getMinimumValueOverall());
424 assertEquals(365, fld.getMaximumValue());
425 assertEquals(366, fld.getMaximumValueOverall());
426 assertEquals(new DateTime(1996, 10, 3, 0, 0, 0, 0, ETHIOPIC_UTC), fld.addToCopy(1));
427
428 assertEquals(0, dt.getHourOfDay());
429 assertEquals(0, dt.getMinuteOfHour());
430 assertEquals(0, dt.getSecondOfMinute());
431 assertEquals(0, dt.getMillisOfSecond());
432 }
433
434 public void testSampleDateWithZone() {
435 DateTime dt = new DateTime(2004, 6, 9, 12, 0, 0, 0, PARIS).withChronology(ETHIOPIC_UTC);
436 assertEquals(EthiopicChronology.EE, dt.getEra());
437 assertEquals(1996, dt.getYear());
438 assertEquals(1996, dt.getYearOfEra());
439 assertEquals(10, dt.getMonthOfYear());
440 assertEquals(2, dt.getDayOfMonth());
441 assertEquals(10, dt.getHourOfDay()); // PARIS is UTC+2 in summer (12-2=10)
442 assertEquals(0, dt.getMinuteOfHour());
443 assertEquals(0, dt.getSecondOfMinute());
444 assertEquals(0, dt.getMillisOfSecond());
445 }
446
447 public void testDurationYear() {
448 // Leap 1999, NotLeap 1996,97,98
449 DateTime dt96 = new DateTime(1996, 10, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
450 DateTime dt97 = new DateTime(1997, 10, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
451 DateTime dt98 = new DateTime(1998, 10, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
452 DateTime dt99 = new DateTime(1999, 10, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
453 DateTime dt00 = new DateTime(2000, 10, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
454
455 DurationField fld = dt96.year().getDurationField();
456 assertEquals(ETHIOPIC_UTC.years(), fld);
457 assertEquals(1L * 365L * MILLIS_PER_DAY, fld.getMillis(1, dt96.getMillis()));
458 assertEquals(2L * 365L * MILLIS_PER_DAY, fld.getMillis(2, dt96.getMillis()));
459 assertEquals(3L * 365L * MILLIS_PER_DAY, fld.getMillis(3, dt96.getMillis()));
460 assertEquals((4L * 365L + 1L) * MILLIS_PER_DAY, fld.getMillis(4, dt96.getMillis()));
461
462 assertEquals(((4L * 365L + 1L) * MILLIS_PER_DAY) / 4, fld.getMillis(1));
463 assertEquals(((4L * 365L + 1L) * MILLIS_PER_DAY) / 2, fld.getMillis(2));
464
465 assertEquals(1L * 365L * MILLIS_PER_DAY, fld.getMillis(1L, dt96.getMillis()));
466 assertEquals(2L * 365L * MILLIS_PER_DAY, fld.getMillis(2L, dt96.getMillis()));
467 assertEquals(3L * 365L * MILLIS_PER_DAY, fld.getMillis(3L, dt96.getMillis()));
468 assertEquals((4L * 365L + 1L) * MILLIS_PER_DAY, fld.getMillis(4L, dt96.getMillis()));
469
470 assertEquals(((4L * 365L + 1L) * MILLIS_PER_DAY) / 4, fld.getMillis(1L));
471 assertEquals(((4L * 365L + 1L) * MILLIS_PER_DAY) / 2, fld.getMillis(2L));
472
473 assertEquals(((4L * 365L + 1L) * MILLIS_PER_DAY) / 4, fld.getUnitMillis());
474
475 assertEquals(0, fld.getValue(1L * 365L * MILLIS_PER_DAY - 1L, dt96.getMillis()));
476 assertEquals(1, fld.getValue(1L * 365L * MILLIS_PER_DAY, dt96.getMillis()));
477 assertEquals(1, fld.getValue(1L * 365L * MILLIS_PER_DAY + 1L, dt96.getMillis()));
478 assertEquals(1, fld.getValue(2L * 365L * MILLIS_PER_DAY - 1L, dt96.getMillis()));
479 assertEquals(2, fld.getValue(2L * 365L * MILLIS_PER_DAY, dt96.getMillis()));
480 assertEquals(2, fld.getValue(2L * 365L * MILLIS_PER_DAY + 1L, dt96.getMillis()));
481 assertEquals(2, fld.getValue(3L * 365L * MILLIS_PER_DAY - 1L, dt96.getMillis()));
482 assertEquals(3, fld.getValue(3L * 365L * MILLIS_PER_DAY, dt96.getMillis()));
483 assertEquals(3, fld.getValue(3L * 365L * MILLIS_PER_DAY + 1L, dt96.getMillis()));
484 assertEquals(3, fld.getValue((4L * 365L + 1L) * MILLIS_PER_DAY - 1L, dt96.getMillis()));
485 assertEquals(4, fld.getValue((4L * 365L + 1L) * MILLIS_PER_DAY, dt96.getMillis()));
486 assertEquals(4, fld.getValue((4L * 365L + 1L) * MILLIS_PER_DAY + 1L, dt96.getMillis()));
487
488 assertEquals(dt97.getMillis(), fld.add(dt96.getMillis(), 1));
489 assertEquals(dt98.getMillis(), fld.add(dt96.getMillis(), 2));
490 assertEquals(dt99.getMillis(), fld.add(dt96.getMillis(), 3));
491 assertEquals(dt00.getMillis(), fld.add(dt96.getMillis(), 4));
492
493 assertEquals(dt97.getMillis(), fld.add(dt96.getMillis(), 1L));
494 assertEquals(dt98.getMillis(), fld.add(dt96.getMillis(), 2L));
495 assertEquals(dt99.getMillis(), fld.add(dt96.getMillis(), 3L));
496 assertEquals(dt00.getMillis(), fld.add(dt96.getMillis(), 4L));
497 }
498
499 public void testDurationMonth() {
500 // Leap 1999, NotLeap 1996,97,98
501 DateTime dt11 = new DateTime(1999, 11, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
502 DateTime dt12 = new DateTime(1999, 12, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
503 DateTime dt13 = new DateTime(1999, 13, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
504 DateTime dt01 = new DateTime(2000, 1, 2, 0, 0, 0, 0, ETHIOPIC_UTC);
505
506 DurationField fld = dt11.monthOfYear().getDurationField();
507 assertEquals(ETHIOPIC_UTC.months(), fld);
508 assertEquals(1L * 30L * MILLIS_PER_DAY, fld.getMillis(1, dt11.getMillis()));
509 assertEquals(2L * 30L * MILLIS_PER_DAY, fld.getMillis(2, dt11.getMillis()));
510 assertEquals((2L * 30L + 6L) * MILLIS_PER_DAY, fld.getMillis(3, dt11.getMillis()));
511 assertEquals((3L * 30L + 6L) * MILLIS_PER_DAY, fld.getMillis(4, dt11.getMillis()));
512
513 assertEquals(1L * 30L * MILLIS_PER_DAY, fld.getMillis(1));
514 assertEquals(2L * 30L * MILLIS_PER_DAY, fld.getMillis(2));
515 assertEquals(13L * 30L * MILLIS_PER_DAY, fld.getMillis(13));
516
517 assertEquals(1L * 30L * MILLIS_PER_DAY, fld.getMillis(1L, dt11.getMillis()));
518 assertEquals(2L * 30L * MILLIS_PER_DAY, fld.getMillis(2L, dt11.getMillis()));
519 assertEquals((2L * 30L + 6L) * MILLIS_PER_DAY, fld.getMillis(3L, dt11.getMillis()));
520 assertEquals((3L * 30L + 6L) * MILLIS_PER_DAY, fld.getMillis(4L, dt11.getMillis()));
521
522 assertEquals(1L * 30L * MILLIS_PER_DAY, fld.getMillis(1L));
523 assertEquals(2L * 30L * MILLIS_PER_DAY, fld.getMillis(2L));
524 assertEquals(13L * 30L * MILLIS_PER_DAY, fld.getMillis(13L));
525
526 assertEquals(0, fld.getValue(1L * 30L * MILLIS_PER_DAY - 1L, dt11.getMillis()));
527 assertEquals(1, fld.getValue(1L * 30L * MILLIS_PER_DAY, dt11.getMillis()));
528 assertEquals(1, fld.getValue(1L * 30L * MILLIS_PER_DAY + 1L, dt11.getMillis()));
529 assertEquals(1, fld.getValue(2L * 30L * MILLIS_PER_DAY - 1L, dt11.getMillis()));
530 assertEquals(2, fld.getValue(2L * 30L * MILLIS_PER_DAY, dt11.getMillis()));
531 assertEquals(2, fld.getValue(2L * 30L * MILLIS_PER_DAY + 1L, dt11.getMillis()));
532 assertEquals(2, fld.getValue((2L * 30L + 6L) * MILLIS_PER_DAY - 1L, dt11.getMillis()));
533 assertEquals(3, fld.getValue((2L * 30L + 6L) * MILLIS_PER_DAY, dt11.getMillis()));
534 assertEquals(3, fld.getValue((2L * 30L + 6L) * MILLIS_PER_DAY + 1L, dt11.getMillis()));
535 assertEquals(3, fld.getValue((3L * 30L + 6L) * MILLIS_PER_DAY - 1L, dt11.getMillis()));
536 assertEquals(4, fld.getValue((3L * 30L + 6L) * MILLIS_PER_DAY, dt11.getMillis()));
537 assertEquals(4, fld.getValue((3L * 30L + 6L) * MILLIS_PER_DAY + 1L, dt11.getMillis()));
538
539 assertEquals(dt12.getMillis(), fld.add(dt11.getMillis(), 1));
540 assertEquals(dt13.getMillis(), fld.add(dt11.getMillis(), 2));
541 assertEquals(dt01.getMillis(), fld.add(dt11.getMillis(), 3));
542
543 assertEquals(dt12.getMillis(), fld.add(dt11.getMillis(), 1L));
544 assertEquals(dt13.getMillis(), fld.add(dt11.getMillis(), 2L));
545 assertEquals(dt01.getMillis(), fld.add(dt11.getMillis(), 3L));
546 }
547
548 }