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.DurationFieldType; 031 import org.joda.time.DateTime.Property; 032 033 /** 034 * This class is a Junit unit test for IslamicChronology. 035 * 036 * @author Stephen Colebourne 037 */ 038 public class TestIslamicChronology extends TestCase { 039 040 private static long SKIP = 1 * DateTimeConstants.MILLIS_PER_DAY; 041 042 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris"); 043 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London"); 044 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo"); 045 private static final Chronology ISLAMIC_UTC = IslamicChronology.getInstanceUTC(); 046 private static final Chronology JULIAN_UTC = JulianChronology.getInstanceUTC(); 047 private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC(); 048 049 long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 050 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 051 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 052 366 + 365; 053 // 2002-06-09 054 private long TEST_TIME_NOW = 055 (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY; 056 057 private DateTimeZone originalDateTimeZone = null; 058 private TimeZone originalTimeZone = null; 059 private Locale originalLocale = null; 060 061 public static void main(String[] args) { 062 junit.textui.TestRunner.run(suite()); 063 } 064 065 public static TestSuite suite() { 066 SKIP = 1 * DateTimeConstants.MILLIS_PER_DAY; 067 return new TestSuite(TestIslamicChronology.class); 068 } 069 070 public TestIslamicChronology(String name) { 071 super(name); 072 } 073 074 protected void setUp() throws Exception { 075 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW); 076 originalDateTimeZone = DateTimeZone.getDefault(); 077 originalTimeZone = TimeZone.getDefault(); 078 originalLocale = Locale.getDefault(); 079 DateTimeZone.setDefault(LONDON); 080 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London")); 081 Locale.setDefault(Locale.UK); 082 } 083 084 protected void tearDown() throws Exception { 085 DateTimeUtils.setCurrentMillisSystem(); 086 DateTimeZone.setDefault(originalDateTimeZone); 087 TimeZone.setDefault(originalTimeZone); 088 Locale.setDefault(originalLocale); 089 originalDateTimeZone = null; 090 originalTimeZone = null; 091 originalLocale = null; 092 } 093 094 //----------------------------------------------------------------------- 095 public void testFactoryUTC() { 096 assertEquals(DateTimeZone.UTC, IslamicChronology.getInstanceUTC().getZone()); 097 assertSame(IslamicChronology.class, IslamicChronology.getInstanceUTC().getClass()); 098 } 099 100 public void testFactory() { 101 assertEquals(LONDON, IslamicChronology.getInstance().getZone()); 102 assertSame(IslamicChronology.class, IslamicChronology.getInstance().getClass()); 103 } 104 105 public void testFactory_Zone() { 106 assertEquals(TOKYO, IslamicChronology.getInstance(TOKYO).getZone()); 107 assertEquals(PARIS, IslamicChronology.getInstance(PARIS).getZone()); 108 assertEquals(LONDON, IslamicChronology.getInstance(null).getZone()); 109 assertSame(IslamicChronology.class, IslamicChronology.getInstance(TOKYO).getClass()); 110 } 111 112 //----------------------------------------------------------------------- 113 public void testEquality() { 114 assertSame(IslamicChronology.getInstance(TOKYO), IslamicChronology.getInstance(TOKYO)); 115 assertSame(IslamicChronology.getInstance(LONDON), IslamicChronology.getInstance(LONDON)); 116 assertSame(IslamicChronology.getInstance(PARIS), IslamicChronology.getInstance(PARIS)); 117 assertSame(IslamicChronology.getInstanceUTC(), IslamicChronology.getInstanceUTC()); 118 assertSame(IslamicChronology.getInstance(), IslamicChronology.getInstance(LONDON)); 119 } 120 121 public void testWithUTC() { 122 assertSame(IslamicChronology.getInstanceUTC(), IslamicChronology.getInstance(LONDON).withUTC()); 123 assertSame(IslamicChronology.getInstanceUTC(), IslamicChronology.getInstance(TOKYO).withUTC()); 124 assertSame(IslamicChronology.getInstanceUTC(), IslamicChronology.getInstanceUTC().withUTC()); 125 assertSame(IslamicChronology.getInstanceUTC(), IslamicChronology.getInstance().withUTC()); 126 } 127 128 public void testWithZone() { 129 assertSame(IslamicChronology.getInstance(TOKYO), IslamicChronology.getInstance(TOKYO).withZone(TOKYO)); 130 assertSame(IslamicChronology.getInstance(LONDON), IslamicChronology.getInstance(TOKYO).withZone(LONDON)); 131 assertSame(IslamicChronology.getInstance(PARIS), IslamicChronology.getInstance(TOKYO).withZone(PARIS)); 132 assertSame(IslamicChronology.getInstance(LONDON), IslamicChronology.getInstance(TOKYO).withZone(null)); 133 assertSame(IslamicChronology.getInstance(PARIS), IslamicChronology.getInstance().withZone(PARIS)); 134 assertSame(IslamicChronology.getInstance(PARIS), IslamicChronology.getInstanceUTC().withZone(PARIS)); 135 } 136 137 public void testToString() { 138 assertEquals("IslamicChronology[Europe/London]", IslamicChronology.getInstance(LONDON).toString()); 139 assertEquals("IslamicChronology[Asia/Tokyo]", IslamicChronology.getInstance(TOKYO).toString()); 140 assertEquals("IslamicChronology[Europe/London]", IslamicChronology.getInstance().toString()); 141 assertEquals("IslamicChronology[UTC]", IslamicChronology.getInstanceUTC().toString()); 142 } 143 144 //----------------------------------------------------------------------- 145 public void testDurationFields() { 146 assertEquals("eras", IslamicChronology.getInstance().eras().getName()); 147 assertEquals("centuries", IslamicChronology.getInstance().centuries().getName()); 148 assertEquals("years", IslamicChronology.getInstance().years().getName()); 149 assertEquals("weekyears", IslamicChronology.getInstance().weekyears().getName()); 150 assertEquals("months", IslamicChronology.getInstance().months().getName()); 151 assertEquals("weeks", IslamicChronology.getInstance().weeks().getName()); 152 assertEquals("days", IslamicChronology.getInstance().days().getName()); 153 assertEquals("halfdays", IslamicChronology.getInstance().halfdays().getName()); 154 assertEquals("hours", IslamicChronology.getInstance().hours().getName()); 155 assertEquals("minutes", IslamicChronology.getInstance().minutes().getName()); 156 assertEquals("seconds", IslamicChronology.getInstance().seconds().getName()); 157 assertEquals("millis", IslamicChronology.getInstance().millis().getName()); 158 159 assertEquals(false, IslamicChronology.getInstance().eras().isSupported()); 160 assertEquals(true, IslamicChronology.getInstance().centuries().isSupported()); 161 assertEquals(true, IslamicChronology.getInstance().years().isSupported()); 162 assertEquals(true, IslamicChronology.getInstance().weekyears().isSupported()); 163 assertEquals(true, IslamicChronology.getInstance().months().isSupported()); 164 assertEquals(true, IslamicChronology.getInstance().weeks().isSupported()); 165 assertEquals(true, IslamicChronology.getInstance().days().isSupported()); 166 assertEquals(true, IslamicChronology.getInstance().halfdays().isSupported()); 167 assertEquals(true, IslamicChronology.getInstance().hours().isSupported()); 168 assertEquals(true, IslamicChronology.getInstance().minutes().isSupported()); 169 assertEquals(true, IslamicChronology.getInstance().seconds().isSupported()); 170 assertEquals(true, IslamicChronology.getInstance().millis().isSupported()); 171 172 assertEquals(false, IslamicChronology.getInstance().centuries().isPrecise()); 173 assertEquals(false, IslamicChronology.getInstance().years().isPrecise()); 174 assertEquals(false, IslamicChronology.getInstance().weekyears().isPrecise()); 175 assertEquals(false, IslamicChronology.getInstance().months().isPrecise()); 176 assertEquals(false, IslamicChronology.getInstance().weeks().isPrecise()); 177 assertEquals(false, IslamicChronology.getInstance().days().isPrecise()); 178 assertEquals(false, IslamicChronology.getInstance().halfdays().isPrecise()); 179 assertEquals(true, IslamicChronology.getInstance().hours().isPrecise()); 180 assertEquals(true, IslamicChronology.getInstance().minutes().isPrecise()); 181 assertEquals(true, IslamicChronology.getInstance().seconds().isPrecise()); 182 assertEquals(true, IslamicChronology.getInstance().millis().isPrecise()); 183 184 assertEquals(false, IslamicChronology.getInstanceUTC().centuries().isPrecise()); 185 assertEquals(false, IslamicChronology.getInstanceUTC().years().isPrecise()); 186 assertEquals(false, IslamicChronology.getInstanceUTC().weekyears().isPrecise()); 187 assertEquals(false, IslamicChronology.getInstanceUTC().months().isPrecise()); 188 assertEquals(true, IslamicChronology.getInstanceUTC().weeks().isPrecise()); 189 assertEquals(true, IslamicChronology.getInstanceUTC().days().isPrecise()); 190 assertEquals(true, IslamicChronology.getInstanceUTC().halfdays().isPrecise()); 191 assertEquals(true, IslamicChronology.getInstanceUTC().hours().isPrecise()); 192 assertEquals(true, IslamicChronology.getInstanceUTC().minutes().isPrecise()); 193 assertEquals(true, IslamicChronology.getInstanceUTC().seconds().isPrecise()); 194 assertEquals(true, IslamicChronology.getInstanceUTC().millis().isPrecise()); 195 196 DateTimeZone gmt = DateTimeZone.forID("Etc/GMT"); 197 assertEquals(false, IslamicChronology.getInstance(gmt).centuries().isPrecise()); 198 assertEquals(false, IslamicChronology.getInstance(gmt).years().isPrecise()); 199 assertEquals(false, IslamicChronology.getInstance(gmt).weekyears().isPrecise()); 200 assertEquals(false, IslamicChronology.getInstance(gmt).months().isPrecise()); 201 assertEquals(true, IslamicChronology.getInstance(gmt).weeks().isPrecise()); 202 assertEquals(true, IslamicChronology.getInstance(gmt).days().isPrecise()); 203 assertEquals(true, IslamicChronology.getInstance(gmt).halfdays().isPrecise()); 204 assertEquals(true, IslamicChronology.getInstance(gmt).hours().isPrecise()); 205 assertEquals(true, IslamicChronology.getInstance(gmt).minutes().isPrecise()); 206 assertEquals(true, IslamicChronology.getInstance(gmt).seconds().isPrecise()); 207 assertEquals(true, IslamicChronology.getInstance(gmt).millis().isPrecise()); 208 } 209 210 public void testDateFields() { 211 assertEquals("era", IslamicChronology.getInstance().era().getName()); 212 assertEquals("centuryOfEra", IslamicChronology.getInstance().centuryOfEra().getName()); 213 assertEquals("yearOfCentury", IslamicChronology.getInstance().yearOfCentury().getName()); 214 assertEquals("yearOfEra", IslamicChronology.getInstance().yearOfEra().getName()); 215 assertEquals("year", IslamicChronology.getInstance().year().getName()); 216 assertEquals("monthOfYear", IslamicChronology.getInstance().monthOfYear().getName()); 217 assertEquals("weekyearOfCentury", IslamicChronology.getInstance().weekyearOfCentury().getName()); 218 assertEquals("weekyear", IslamicChronology.getInstance().weekyear().getName()); 219 assertEquals("weekOfWeekyear", IslamicChronology.getInstance().weekOfWeekyear().getName()); 220 assertEquals("dayOfYear", IslamicChronology.getInstance().dayOfYear().getName()); 221 assertEquals("dayOfMonth", IslamicChronology.getInstance().dayOfMonth().getName()); 222 assertEquals("dayOfWeek", IslamicChronology.getInstance().dayOfWeek().getName()); 223 224 assertEquals(true, IslamicChronology.getInstance().era().isSupported()); 225 assertEquals(true, IslamicChronology.getInstance().centuryOfEra().isSupported()); 226 assertEquals(true, IslamicChronology.getInstance().yearOfCentury().isSupported()); 227 assertEquals(true, IslamicChronology.getInstance().yearOfEra().isSupported()); 228 assertEquals(true, IslamicChronology.getInstance().year().isSupported()); 229 assertEquals(true, IslamicChronology.getInstance().monthOfYear().isSupported()); 230 assertEquals(true, IslamicChronology.getInstance().weekyearOfCentury().isSupported()); 231 assertEquals(true, IslamicChronology.getInstance().weekyear().isSupported()); 232 assertEquals(true, IslamicChronology.getInstance().weekOfWeekyear().isSupported()); 233 assertEquals(true, IslamicChronology.getInstance().dayOfYear().isSupported()); 234 assertEquals(true, IslamicChronology.getInstance().dayOfMonth().isSupported()); 235 assertEquals(true, IslamicChronology.getInstance().dayOfWeek().isSupported()); 236 } 237 238 public void testTimeFields() { 239 assertEquals("halfdayOfDay", IslamicChronology.getInstance().halfdayOfDay().getName()); 240 assertEquals("clockhourOfHalfday", IslamicChronology.getInstance().clockhourOfHalfday().getName()); 241 assertEquals("hourOfHalfday", IslamicChronology.getInstance().hourOfHalfday().getName()); 242 assertEquals("clockhourOfDay", IslamicChronology.getInstance().clockhourOfDay().getName()); 243 assertEquals("hourOfDay", IslamicChronology.getInstance().hourOfDay().getName()); 244 assertEquals("minuteOfDay", IslamicChronology.getInstance().minuteOfDay().getName()); 245 assertEquals("minuteOfHour", IslamicChronology.getInstance().minuteOfHour().getName()); 246 assertEquals("secondOfDay", IslamicChronology.getInstance().secondOfDay().getName()); 247 assertEquals("secondOfMinute", IslamicChronology.getInstance().secondOfMinute().getName()); 248 assertEquals("millisOfDay", IslamicChronology.getInstance().millisOfDay().getName()); 249 assertEquals("millisOfSecond", IslamicChronology.getInstance().millisOfSecond().getName()); 250 251 assertEquals(true, IslamicChronology.getInstance().halfdayOfDay().isSupported()); 252 assertEquals(true, IslamicChronology.getInstance().clockhourOfHalfday().isSupported()); 253 assertEquals(true, IslamicChronology.getInstance().hourOfHalfday().isSupported()); 254 assertEquals(true, IslamicChronology.getInstance().clockhourOfDay().isSupported()); 255 assertEquals(true, IslamicChronology.getInstance().hourOfDay().isSupported()); 256 assertEquals(true, IslamicChronology.getInstance().minuteOfDay().isSupported()); 257 assertEquals(true, IslamicChronology.getInstance().minuteOfHour().isSupported()); 258 assertEquals(true, IslamicChronology.getInstance().secondOfDay().isSupported()); 259 assertEquals(true, IslamicChronology.getInstance().secondOfMinute().isSupported()); 260 assertEquals(true, IslamicChronology.getInstance().millisOfDay().isSupported()); 261 assertEquals(true, IslamicChronology.getInstance().millisOfSecond().isSupported()); 262 } 263 264 //----------------------------------------------------------------------- 265 public void testEpoch() { 266 DateTime epoch = new DateTime(1, 1, 1, 0, 0, 0, 0, ISLAMIC_UTC); 267 DateTime expectedEpoch = new DateTime(622, 7, 16, 0, 0, 0, 0, JULIAN_UTC); 268 assertEquals(expectedEpoch.getMillis(), epoch.getMillis()); 269 } 270 271 public void testEra() { 272 assertEquals(1, IslamicChronology.AH); 273 try { 274 new DateTime(-1, 13, 5, 0, 0, 0, 0, ISLAMIC_UTC); 275 fail(); 276 } catch (IllegalArgumentException ex) {} 277 } 278 279 //----------------------------------------------------------------------- 280 public void testFieldConstructor() { 281 DateTime date = new DateTime(1364, 12, 6, 0, 0, 0, 0, ISLAMIC_UTC); 282 DateTime expectedDate = new DateTime(1945, 11, 12, 0, 0, 0, 0, ISO_UTC); 283 assertEquals(expectedDate.getMillis(), date.getMillis()); 284 } 285 286 //----------------------------------------------------------------------- 287 /** 288 * Tests era, year, monthOfYear, dayOfMonth and dayOfWeek. 289 */ 290 public void testCalendar() { 291 if (TestAll.FAST) { 292 return; 293 } 294 System.out.println("\nTestIslamicChronology.testCalendar"); 295 DateTime epoch = new DateTime(1, 1, 1, 0, 0, 0, 0, ISLAMIC_UTC); 296 long millis = epoch.getMillis(); 297 long end = new DateTime(3000, 1, 1, 0, 0, 0, 0, ISO_UTC).getMillis(); 298 DateTimeField dayOfWeek = ISLAMIC_UTC.dayOfWeek(); 299 DateTimeField dayOfYear = ISLAMIC_UTC.dayOfYear(); 300 DateTimeField dayOfMonth = ISLAMIC_UTC.dayOfMonth(); 301 DateTimeField monthOfYear = ISLAMIC_UTC.monthOfYear(); 302 DateTimeField year = ISLAMIC_UTC.year(); 303 DateTimeField yearOfEra = ISLAMIC_UTC.yearOfEra(); 304 DateTimeField era = ISLAMIC_UTC.era(); 305 int expectedDOW = new DateTime(622, 7, 16, 0, 0, 0, 0, JULIAN_UTC).getDayOfWeek(); 306 int expectedDOY = 1; 307 int expectedDay = 1; 308 int expectedMonth = 1; 309 int expectedYear = 1; 310 while (millis < end) { 311 int dowValue = dayOfWeek.get(millis); 312 int doyValue = dayOfYear.get(millis); 313 int dayValue = dayOfMonth.get(millis); 314 int monthValue = monthOfYear.get(millis); 315 int yearValue = year.get(millis); 316 int yearOfEraValue = yearOfEra.get(millis); 317 int dayOfYearLen = dayOfYear.getMaximumValue(millis); 318 int monthLen = dayOfMonth.getMaximumValue(millis); 319 if (monthValue < 1 || monthValue > 12) { 320 fail("Bad month: " + millis); 321 } 322 323 // test era 324 assertEquals(1, era.get(millis)); 325 assertEquals("AH", era.getAsText(millis)); 326 assertEquals("AH", era.getAsShortText(millis)); 327 328 // test date 329 assertEquals(expectedDOY, doyValue); 330 assertEquals(expectedMonth, monthValue); 331 assertEquals(expectedDay, dayValue); 332 assertEquals(expectedDOW, dowValue); 333 assertEquals(expectedYear, yearValue); 334 assertEquals(expectedYear, yearOfEraValue); 335 336 // test leap year 337 boolean leap = ((11 * yearValue + 14) % 30) < 11; 338 assertEquals(leap, year.isLeap(millis)); 339 340 // test month length 341 switch (monthValue) { 342 case 1: 343 case 3: 344 case 5: 345 case 7: 346 case 9: 347 case 11: 348 assertEquals(30, monthLen); 349 break; 350 case 2: 351 case 4: 352 case 6: 353 case 8: 354 case 10: 355 assertEquals(29, monthLen); 356 break; 357 case 12: 358 assertEquals((leap ? 30 : 29), monthLen); 359 break; 360 } 361 362 // test year length 363 assertEquals((leap ? 355 : 354), dayOfYearLen); 364 365 // recalculate date 366 expectedDOW = (((expectedDOW + 1) - 1) % 7) + 1; 367 expectedDay++; 368 expectedDOY++; 369 if (expectedDay > monthLen) { 370 expectedDay = 1; 371 expectedMonth++; 372 if (expectedMonth == 13) { 373 expectedMonth = 1; 374 expectedDOY = 1; 375 expectedYear++; 376 } 377 } 378 millis += SKIP; 379 } 380 } 381 382 public void testSampleDate1() { 383 DateTime dt = new DateTime(1945, 11, 12, 0, 0, 0, 0, ISO_UTC); 384 dt = dt.withChronology(ISLAMIC_UTC); 385 assertEquals(IslamicChronology.AH, dt.getEra()); 386 assertEquals(14, dt.getCenturyOfEra()); // TODO confirm 387 assertEquals(64, dt.getYearOfCentury()); 388 assertEquals(1364, dt.getYearOfEra()); 389 390 assertEquals(1364, dt.getYear()); 391 Property fld = dt.year(); 392 assertEquals(false, fld.isLeap()); 393 assertEquals(0, fld.getLeapAmount()); 394 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType()); 395 assertEquals(new DateTime(1365, 12, 6, 0, 0, 0, 0, ISLAMIC_UTC), fld.addToCopy(1)); 396 397 assertEquals(12, dt.getMonthOfYear()); 398 fld = dt.monthOfYear(); 399 assertEquals(false, fld.isLeap()); 400 assertEquals(0, fld.getLeapAmount()); 401 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType()); 402 assertEquals(1, fld.getMinimumValue()); 403 assertEquals(1, fld.getMinimumValueOverall()); 404 assertEquals(12, fld.getMaximumValue()); 405 assertEquals(12, fld.getMaximumValueOverall()); 406 assertEquals(new DateTime(1365, 1, 6, 0, 0, 0, 0, ISLAMIC_UTC), fld.addToCopy(1)); 407 assertEquals(new DateTime(1364, 1, 6, 0, 0, 0, 0, ISLAMIC_UTC), fld.addWrapFieldToCopy(1)); 408 409 assertEquals(6, dt.getDayOfMonth()); 410 fld = dt.dayOfMonth(); 411 assertEquals(false, fld.isLeap()); 412 assertEquals(0, fld.getLeapAmount()); 413 assertEquals(null, fld.getLeapDurationField()); 414 assertEquals(1, fld.getMinimumValue()); 415 assertEquals(1, fld.getMinimumValueOverall()); 416 assertEquals(29, fld.getMaximumValue()); 417 assertEquals(30, fld.getMaximumValueOverall()); 418 assertEquals(new DateTime(1364, 12, 7, 0, 0, 0, 0, ISLAMIC_UTC), fld.addToCopy(1)); 419 420 assertEquals(DateTimeConstants.MONDAY, dt.getDayOfWeek()); 421 fld = dt.dayOfWeek(); 422 assertEquals(false, fld.isLeap()); 423 assertEquals(0, fld.getLeapAmount()); 424 assertEquals(null, fld.getLeapDurationField()); 425 assertEquals(1, fld.getMinimumValue()); 426 assertEquals(1, fld.getMinimumValueOverall()); 427 assertEquals(7, fld.getMaximumValue()); 428 assertEquals(7, fld.getMaximumValueOverall()); 429 assertEquals(new DateTime(1364, 12, 7, 0, 0, 0, 0, ISLAMIC_UTC), fld.addToCopy(1)); 430 431 assertEquals(6 * 30 + 5 * 29 + 6, dt.getDayOfYear()); 432 fld = dt.dayOfYear(); 433 assertEquals(false, fld.isLeap()); 434 assertEquals(0, fld.getLeapAmount()); 435 assertEquals(null, fld.getLeapDurationField()); 436 assertEquals(1, fld.getMinimumValue()); 437 assertEquals(1, fld.getMinimumValueOverall()); 438 assertEquals(354, fld.getMaximumValue()); 439 assertEquals(355, fld.getMaximumValueOverall()); 440 assertEquals(new DateTime(1364, 12, 7, 0, 0, 0, 0, ISLAMIC_UTC), fld.addToCopy(1)); 441 442 assertEquals(0, dt.getHourOfDay()); 443 assertEquals(0, dt.getMinuteOfHour()); 444 assertEquals(0, dt.getSecondOfMinute()); 445 assertEquals(0, dt.getMillisOfSecond()); 446 } 447 448 public void testSampleDate2() { 449 DateTime dt = new DateTime(2005, 11, 26, 0, 0, 0, 0, ISO_UTC); 450 dt = dt.withChronology(ISLAMIC_UTC); 451 assertEquals(IslamicChronology.AH, dt.getEra()); 452 assertEquals(15, dt.getCenturyOfEra()); // TODO confirm 453 assertEquals(26, dt.getYearOfCentury()); 454 assertEquals(1426, dt.getYearOfEra()); 455 456 assertEquals(1426, dt.getYear()); 457 Property fld = dt.year(); 458 assertEquals(true, fld.isLeap()); 459 assertEquals(1, fld.getLeapAmount()); 460 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType()); 461 462 assertEquals(10, dt.getMonthOfYear()); 463 fld = dt.monthOfYear(); 464 assertEquals(false, fld.isLeap()); 465 assertEquals(0, fld.getLeapAmount()); 466 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType()); 467 assertEquals(1, fld.getMinimumValue()); 468 assertEquals(1, fld.getMinimumValueOverall()); 469 assertEquals(12, fld.getMaximumValue()); 470 assertEquals(12, fld.getMaximumValueOverall()); 471 472 assertEquals(24, dt.getDayOfMonth()); 473 fld = dt.dayOfMonth(); 474 assertEquals(false, fld.isLeap()); 475 assertEquals(0, fld.getLeapAmount()); 476 assertEquals(null, fld.getLeapDurationField()); 477 assertEquals(1, fld.getMinimumValue()); 478 assertEquals(1, fld.getMinimumValueOverall()); 479 assertEquals(29, fld.getMaximumValue()); 480 assertEquals(30, fld.getMaximumValueOverall()); 481 482 assertEquals(DateTimeConstants.SATURDAY, dt.getDayOfWeek()); 483 fld = dt.dayOfWeek(); 484 assertEquals(false, fld.isLeap()); 485 assertEquals(0, fld.getLeapAmount()); 486 assertEquals(null, fld.getLeapDurationField()); 487 assertEquals(1, fld.getMinimumValue()); 488 assertEquals(1, fld.getMinimumValueOverall()); 489 assertEquals(7, fld.getMaximumValue()); 490 assertEquals(7, fld.getMaximumValueOverall()); 491 492 assertEquals(5 * 30 + 4 * 29 + 24, dt.getDayOfYear()); 493 fld = dt.dayOfYear(); 494 assertEquals(false, fld.isLeap()); 495 assertEquals(0, fld.getLeapAmount()); 496 assertEquals(null, fld.getLeapDurationField()); 497 assertEquals(1, fld.getMinimumValue()); 498 assertEquals(1, fld.getMinimumValueOverall()); 499 assertEquals(355, fld.getMaximumValue()); 500 assertEquals(355, fld.getMaximumValueOverall()); 501 502 assertEquals(0, dt.getHourOfDay()); 503 assertEquals(0, dt.getMinuteOfHour()); 504 assertEquals(0, dt.getSecondOfMinute()); 505 assertEquals(0, dt.getMillisOfSecond()); 506 } 507 508 public void testSampleDate3() { 509 DateTime dt = new DateTime(1426, 12, 24, 0, 0, 0, 0, ISLAMIC_UTC); 510 assertEquals(IslamicChronology.AH, dt.getEra()); 511 512 assertEquals(1426, dt.getYear()); 513 Property fld = dt.year(); 514 assertEquals(true, fld.isLeap()); 515 assertEquals(1, fld.getLeapAmount()); 516 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType()); 517 518 assertEquals(12, dt.getMonthOfYear()); 519 fld = dt.monthOfYear(); 520 assertEquals(true, fld.isLeap()); 521 assertEquals(1, fld.getLeapAmount()); 522 assertEquals(DurationFieldType.days(), fld.getLeapDurationField().getType()); 523 assertEquals(1, fld.getMinimumValue()); 524 assertEquals(1, fld.getMinimumValueOverall()); 525 assertEquals(12, fld.getMaximumValue()); 526 assertEquals(12, fld.getMaximumValueOverall()); 527 528 assertEquals(24, dt.getDayOfMonth()); 529 fld = dt.dayOfMonth(); 530 assertEquals(false, fld.isLeap()); 531 assertEquals(0, fld.getLeapAmount()); 532 assertEquals(null, fld.getLeapDurationField()); 533 assertEquals(1, fld.getMinimumValue()); 534 assertEquals(1, fld.getMinimumValueOverall()); 535 assertEquals(30, fld.getMaximumValue()); 536 assertEquals(30, fld.getMaximumValueOverall()); 537 538 assertEquals(DateTimeConstants.TUESDAY, dt.getDayOfWeek()); 539 fld = dt.dayOfWeek(); 540 assertEquals(false, fld.isLeap()); 541 assertEquals(0, fld.getLeapAmount()); 542 assertEquals(null, fld.getLeapDurationField()); 543 assertEquals(1, fld.getMinimumValue()); 544 assertEquals(1, fld.getMinimumValueOverall()); 545 assertEquals(7, fld.getMaximumValue()); 546 assertEquals(7, fld.getMaximumValueOverall()); 547 548 assertEquals(6 * 30 + 5 * 29 + 24, dt.getDayOfYear()); 549 fld = dt.dayOfYear(); 550 assertEquals(false, fld.isLeap()); 551 assertEquals(0, fld.getLeapAmount()); 552 assertEquals(null, fld.getLeapDurationField()); 553 assertEquals(1, fld.getMinimumValue()); 554 assertEquals(1, fld.getMinimumValueOverall()); 555 assertEquals(355, fld.getMaximumValue()); 556 assertEquals(355, fld.getMaximumValueOverall()); 557 558 assertEquals(0, dt.getHourOfDay()); 559 assertEquals(0, dt.getMinuteOfHour()); 560 assertEquals(0, dt.getSecondOfMinute()); 561 assertEquals(0, dt.getMillisOfSecond()); 562 } 563 564 public void testSampleDateWithZone() { 565 DateTime dt = new DateTime(2005, 11, 26, 12, 0, 0, 0, PARIS).withChronology(ISLAMIC_UTC); 566 assertEquals(IslamicChronology.AH, dt.getEra()); 567 assertEquals(1426, dt.getYear()); 568 assertEquals(10, dt.getMonthOfYear()); 569 assertEquals(24, dt.getDayOfMonth()); 570 assertEquals(11, dt.getHourOfDay()); // PARIS is UTC+1 in summer (12-1=11) 571 assertEquals(0, dt.getMinuteOfHour()); 572 assertEquals(0, dt.getSecondOfMinute()); 573 assertEquals(0, dt.getMillisOfSecond()); 574 } 575 576 public void test15BasedLeapYear() { 577 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(1)); 578 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(2)); 579 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(3)); 580 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(4)); 581 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(5)); 582 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(6)); 583 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(7)); 584 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(8)); 585 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(9)); 586 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(10)); 587 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(11)); 588 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(12)); 589 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(13)); 590 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(14)); 591 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(15)); 592 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(16)); 593 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(17)); 594 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(18)); 595 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(19)); 596 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(20)); 597 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(21)); 598 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(22)); 599 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(23)); 600 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(24)); 601 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(25)); 602 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(26)); 603 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(27)); 604 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(28)); 605 assertEquals(true, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(29)); 606 assertEquals(false, IslamicChronology.LEAP_YEAR_15_BASED.isLeapYear(30)); 607 } 608 609 public void test16BasedLeapYear() { 610 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(1)); 611 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(2)); 612 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(3)); 613 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(4)); 614 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(5)); 615 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(6)); 616 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(7)); 617 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(8)); 618 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(9)); 619 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(10)); 620 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(11)); 621 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(12)); 622 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(13)); 623 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(14)); 624 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(15)); 625 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(16)); 626 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(17)); 627 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(18)); 628 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(19)); 629 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(20)); 630 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(21)); 631 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(22)); 632 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(23)); 633 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(24)); 634 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(25)); 635 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(26)); 636 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(27)); 637 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(28)); 638 assertEquals(true, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(29)); 639 assertEquals(false, IslamicChronology.LEAP_YEAR_16_BASED.isLeapYear(30)); 640 } 641 642 public void testIndianBasedLeapYear() { 643 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(1)); 644 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(2)); 645 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(3)); 646 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(4)); 647 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(5)); 648 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(6)); 649 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(7)); 650 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(8)); 651 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(9)); 652 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(10)); 653 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(11)); 654 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(12)); 655 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(13)); 656 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(14)); 657 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(15)); 658 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(16)); 659 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(17)); 660 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(18)); 661 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(19)); 662 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(20)); 663 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(21)); 664 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(22)); 665 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(23)); 666 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(24)); 667 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(25)); 668 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(26)); 669 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(27)); 670 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(28)); 671 assertEquals(true, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(29)); 672 assertEquals(false, IslamicChronology.LEAP_YEAR_INDIAN.isLeapYear(30)); 673 } 674 675 public void testHabashAlHasibBasedLeapYear() { 676 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(1)); 677 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(2)); 678 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(3)); 679 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(4)); 680 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(5)); 681 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(6)); 682 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(7)); 683 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(8)); 684 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(9)); 685 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(10)); 686 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(11)); 687 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(12)); 688 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(13)); 689 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(14)); 690 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(15)); 691 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(16)); 692 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(17)); 693 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(18)); 694 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(19)); 695 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(20)); 696 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(21)); 697 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(22)); 698 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(23)); 699 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(24)); 700 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(25)); 701 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(26)); 702 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(27)); 703 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(28)); 704 assertEquals(false, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(29)); 705 assertEquals(true, IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB.isLeapYear(30)); 706 } 707 708 }