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 }