1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * This file is available under and governed by the GNU General Public 26 * License version 2 only, as published by the Free Software Foundation. 27 * However, the following notice accompanied the original version of this 28 * file: 29 * 30 * Copyright (c) 2007-2012, Stephen Colebourne & Michael Nascimento Santos 31 * 32 * All rights reserved. 33 * 34 * Redistribution and use in source and binary forms, with or without 35 * modification, are permitted provided that the following conditions are met: 36 * 37 * * Redistributions of source code must retain the above copyright notice, 38 * this list of conditions and the following disclaimer. 39 * 40 * * Redistributions in binary form must reproduce the above copyright notice, 41 * this list of conditions and the following disclaimer in the documentation 42 * and/or other materials provided with the distribution. 43 * 44 * * Neither the name of JSR-310 nor the names of its contributors 45 * may be used to endorse or promote products derived from this software 46 * without specific prior written permission. 47 * 48 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 49 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 50 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 51 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 52 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 53 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 54 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 55 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 56 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 57 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 58 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 59 */ 60 package tck.java.time; 61 62 import static java.time.temporal.ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH; 63 import static java.time.temporal.ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR; 64 import static java.time.temporal.ChronoField.ALIGNED_WEEK_OF_MONTH; 65 import static java.time.temporal.ChronoField.ALIGNED_WEEK_OF_YEAR; 66 import static java.time.temporal.ChronoField.DAY_OF_MONTH; 67 import static java.time.temporal.ChronoField.DAY_OF_WEEK; 68 import static java.time.temporal.ChronoField.DAY_OF_YEAR; 69 import static java.time.temporal.ChronoField.EPOCH_DAY; 70 import static java.time.temporal.ChronoField.EPOCH_MONTH; 71 import static java.time.temporal.ChronoField.ERA; 72 import static java.time.temporal.ChronoField.MONTH_OF_YEAR; 73 import static java.time.temporal.ChronoField.YEAR; 74 import static java.time.temporal.ChronoField.YEAR_OF_ERA; 75 import static org.testng.Assert.assertEquals; 76 import static org.testng.Assert.assertFalse; 77 import static org.testng.Assert.assertNotNull; 78 import static org.testng.Assert.assertSame; 79 import static org.testng.Assert.assertTrue; 80 81 import java.io.ByteArrayOutputStream; 82 import java.io.DataOutputStream; 83 import java.io.IOException; 84 import java.util.ArrayList; 85 import java.util.Arrays; 86 import java.util.List; 87 88 import java.time.Clock; 89 import java.time.DateTimeException; 90 import java.time.DayOfWeek; 91 import java.time.Instant; 92 import java.time.LocalDate; 93 import java.time.LocalDateTime; 94 import java.time.LocalTime; 95 import java.time.Month; 96 import java.time.ZoneId; 97 import java.time.ZoneOffset; 98 import java.time.ZonedDateTime; 99 import java.time.format.DateTimeFormatter; 100 import java.time.format.DateTimeFormatters; 101 import java.time.format.DateTimeParseException; 102 import java.time.temporal.ChronoField; 103 import java.time.temporal.ChronoUnit; 104 import java.time.temporal.ISOChrono; 105 import java.time.temporal.JulianFields; 106 import java.time.temporal.OffsetDate; 107 import java.time.temporal.Queries; 108 import java.time.temporal.Temporal; 109 import java.time.temporal.TemporalAccessor; 110 import java.time.temporal.TemporalAdjuster; 111 import java.time.temporal.TemporalField; 112 import java.time.temporal.TemporalUnit; 113 import java.time.temporal.Year; 114 115 import org.testng.annotations.BeforeMethod; 116 import org.testng.annotations.DataProvider; 117 import org.testng.annotations.Test; 118 import test.java.time.MockSimplePeriod; 119 import test.java.time.temporal.MockFieldNoValue; 120 121 /** 122 * Test LocalDate. 123 */ 124 @Test 125 public class TCKLocalDate extends AbstractDateTimeTest { 126 127 private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1); 128 private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2); 129 private static final ZoneId ZONE_PARIS = ZoneId.of("Europe/Paris"); 130 private static final ZoneId ZONE_GAZA = ZoneId.of("Asia/Gaza"); 131 132 private LocalDate TEST_2007_07_15; 133 private long MAX_VALID_EPOCHDAYS; 134 private long MIN_VALID_EPOCHDAYS; 135 private LocalDate MAX_DATE; 136 private LocalDate MIN_DATE; 137 private Instant MAX_INSTANT; 138 private Instant MIN_INSTANT; 139 140 @BeforeMethod(groups={"tck", "implementation"}) 141 public void setUp() { 142 TEST_2007_07_15 = LocalDate.of(2007, 7, 15); 143 144 LocalDate max = LocalDate.MAX; 145 LocalDate min = LocalDate.MIN; 146 MAX_VALID_EPOCHDAYS = max.toEpochDay(); 147 MIN_VALID_EPOCHDAYS = min.toEpochDay(); 148 MAX_DATE = max; 149 MIN_DATE = min; 150 MAX_INSTANT = max.atStartOfDay(ZoneOffset.UTC).toInstant(); 151 MIN_INSTANT = min.atStartOfDay(ZoneOffset.UTC).toInstant(); 152 } 153 154 //----------------------------------------------------------------------- 155 @Override 156 protected List<TemporalAccessor> samples() { 157 TemporalAccessor[] array = {TEST_2007_07_15, LocalDate.MAX, LocalDate.MIN, }; 158 return Arrays.asList(array); 159 } 160 161 @Override 162 protected List<TemporalField> validFields() { 163 TemporalField[] array = { 164 DAY_OF_WEEK, 165 ALIGNED_DAY_OF_WEEK_IN_MONTH, 166 ALIGNED_DAY_OF_WEEK_IN_YEAR, 167 DAY_OF_MONTH, 168 DAY_OF_YEAR, 169 EPOCH_DAY, 170 ALIGNED_WEEK_OF_MONTH, 171 ALIGNED_WEEK_OF_YEAR, 172 MONTH_OF_YEAR, 173 EPOCH_MONTH, 174 YEAR_OF_ERA, 175 YEAR, 176 ERA, 177 JulianFields.JULIAN_DAY, 178 JulianFields.MODIFIED_JULIAN_DAY, 179 JulianFields.RATA_DIE, 180 }; 181 return Arrays.asList(array); 182 } 183 184 @Override 185 protected List<TemporalField> invalidFields() { 186 List<TemporalField> list = new ArrayList<>(Arrays.<TemporalField>asList(ChronoField.values())); 187 list.removeAll(validFields()); 188 return list; 189 } 190 191 192 //----------------------------------------------------------------------- 193 @Test 194 public void test_serialization() throws Exception { 195 assertSerializable(TEST_2007_07_15); 196 assertSerializable(LocalDate.MIN); 197 assertSerializable(LocalDate.MAX); 198 } 199 200 @Test 201 public void test_serialization_format() throws Exception { 202 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 203 try (DataOutputStream dos = new DataOutputStream(baos) ) { 204 dos.writeByte(3); 205 dos.writeInt(2012); 206 dos.writeByte(9); 207 dos.writeByte(16); 208 } 209 byte[] bytes = baos.toByteArray(); 210 assertSerializedBySer(LocalDate.of(2012, 9, 16), bytes); 211 } 212 213 //----------------------------------------------------------------------- 214 private void check(LocalDate test, int y, int m, int d) { 215 assertEquals(test.getYear(), y); 216 assertEquals(test.getMonth().getValue(), m); 217 assertEquals(test.getDayOfMonth(), d); 218 assertEquals(test, test); 219 assertEquals(test.hashCode(), test.hashCode()); 220 assertEquals(LocalDate.of(y, m, d), test); 221 } 222 223 //----------------------------------------------------------------------- 224 // constants 225 //----------------------------------------------------------------------- 226 @Test 227 public void constant_MIN() { 228 check(LocalDate.MIN, Year.MIN_VALUE, 1, 1); 229 } 230 231 @Test 232 public void constant_MAX() { 233 check(LocalDate.MAX, Year.MAX_VALUE, 12, 31); 234 } 235 236 //----------------------------------------------------------------------- 237 // now() 238 //----------------------------------------------------------------------- 239 @Test(groups={"tck"}) 240 public void now() { 241 LocalDate expected = LocalDate.now(Clock.systemDefaultZone()); 242 LocalDate test = LocalDate.now(); 243 for (int i = 0; i < 100; i++) { 244 if (expected.equals(test)) { 245 return; 246 } 247 expected = LocalDate.now(Clock.systemDefaultZone()); 248 test = LocalDate.now(); 249 } 250 assertEquals(test, expected); 251 } 252 253 //----------------------------------------------------------------------- 254 // now(ZoneId) 255 //----------------------------------------------------------------------- 256 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 257 public void now_ZoneId_nullZoneId() { 258 LocalDate.now((ZoneId) null); 259 } 260 261 @Test(groups={"tck"}) 262 public void now_ZoneId() { 263 ZoneId zone = ZoneId.of("UTC+01:02:03"); 264 LocalDate expected = LocalDate.now(Clock.system(zone)); 265 LocalDate test = LocalDate.now(zone); 266 for (int i = 0; i < 100; i++) { 267 if (expected.equals(test)) { 268 return; 269 } 270 expected = LocalDate.now(Clock.system(zone)); 271 test = LocalDate.now(zone); 272 } 273 assertEquals(test, expected); 274 } 275 276 //----------------------------------------------------------------------- 277 // now(Clock) 278 //----------------------------------------------------------------------- 279 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 280 public void now_Clock_nullClock() { 281 LocalDate.now((Clock) null); 282 } 283 284 @Test(groups={"tck"}) 285 public void now_Clock_allSecsInDay_utc() { 286 for (int i = 0; i < (2 * 24 * 60 * 60); i++) { 287 Instant instant = Instant.ofEpochSecond(i); 288 Clock clock = Clock.fixed(instant, ZoneOffset.UTC); 289 LocalDate test = LocalDate.now(clock); 290 assertEquals(test.getYear(), 1970); 291 assertEquals(test.getMonth(), Month.JANUARY); 292 assertEquals(test.getDayOfMonth(), (i < 24 * 60 * 60 ? 1 : 2)); 293 } 294 } 295 296 @Test(groups={"tck"}) 297 public void now_Clock_allSecsInDay_offset() { 298 for (int i = 0; i < (2 * 24 * 60 * 60); i++) { 299 Instant instant = Instant.ofEpochSecond(i); 300 Clock clock = Clock.fixed(instant.minusSeconds(OFFSET_PONE.getTotalSeconds()), OFFSET_PONE); 301 LocalDate test = LocalDate.now(clock); 302 assertEquals(test.getYear(), 1970); 303 assertEquals(test.getMonth(), Month.JANUARY); 304 assertEquals(test.getDayOfMonth(), (i < 24 * 60 * 60) ? 1 : 2); 305 } 306 } 307 308 @Test(groups={"tck"}) 309 public void now_Clock_allSecsInDay_beforeEpoch() { 310 for (int i =-1; i >= -(2 * 24 * 60 * 60); i--) { 311 Instant instant = Instant.ofEpochSecond(i); 312 Clock clock = Clock.fixed(instant, ZoneOffset.UTC); 313 LocalDate test = LocalDate.now(clock); 314 assertEquals(test.getYear(), 1969); 315 assertEquals(test.getMonth(), Month.DECEMBER); 316 assertEquals(test.getDayOfMonth(), (i >= -24 * 60 * 60 ? 31 : 30)); 317 } 318 } 319 320 //----------------------------------------------------------------------- 321 @Test(groups={"tck"}) 322 public void now_Clock_maxYear() { 323 Clock clock = Clock.fixed(MAX_INSTANT, ZoneOffset.UTC); 324 LocalDate test = LocalDate.now(clock); 325 assertEquals(test, MAX_DATE); 326 } 327 328 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 329 public void now_Clock_tooBig() { 330 Clock clock = Clock.fixed(MAX_INSTANT.plusSeconds(24 * 60 * 60), ZoneOffset.UTC); 331 LocalDate.now(clock); 332 } 333 334 @Test(groups={"tck"}) 335 public void now_Clock_minYear() { 336 Clock clock = Clock.fixed(MIN_INSTANT, ZoneOffset.UTC); 337 LocalDate test = LocalDate.now(clock); 338 assertEquals(test, MIN_DATE); 339 } 340 341 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 342 public void now_Clock_tooLow() { 343 Clock clock = Clock.fixed(MIN_INSTANT.minusNanos(1), ZoneOffset.UTC); 344 LocalDate.now(clock); 345 } 346 347 //----------------------------------------------------------------------- 348 // of() factories 349 //----------------------------------------------------------------------- 350 @Test(groups={"tck"}) 351 public void factory_of_intsMonth() { 352 assertEquals(TEST_2007_07_15, LocalDate.of(2007, Month.JULY, 15)); 353 } 354 355 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 356 public void factory_of_intsMonth_29febNonLeap() { 357 LocalDate.of(2007, Month.FEBRUARY, 29); 358 } 359 360 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 361 public void factory_of_intsMonth_31apr() { 362 LocalDate.of(2007, Month.APRIL, 31); 363 } 364 365 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 366 public void factory_of_intsMonth_dayTooLow() { 367 LocalDate.of(2007, Month.JANUARY, 0); 368 } 369 370 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 371 public void factory_of_intsMonth_dayTooHigh() { 372 LocalDate.of(2007, Month.JANUARY, 32); 373 } 374 375 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 376 public void factory_of_intsMonth_nullMonth() { 377 LocalDate.of(2007, null, 30); 378 } 379 380 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 381 public void factory_of_intsMonth_yearTooLow() { 382 LocalDate.of(Integer.MIN_VALUE, Month.JANUARY, 1); 383 } 384 385 //----------------------------------------------------------------------- 386 @Test(groups={"tck"}) 387 public void factory_of_ints() { 388 check(TEST_2007_07_15, 2007, 7, 15); 389 } 390 391 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 392 public void factory_of_ints_29febNonLeap() { 393 LocalDate.of(2007, 2, 29); 394 } 395 396 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 397 public void factory_of_ints_31apr() { 398 LocalDate.of(2007, 4, 31); 399 } 400 401 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 402 public void factory_of_ints_dayTooLow() { 403 LocalDate.of(2007, 1, 0); 404 } 405 406 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 407 public void factory_of_ints_dayTooHigh() { 408 LocalDate.of(2007, 1, 32); 409 } 410 411 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 412 public void factory_of_ints_monthTooLow() { 413 LocalDate.of(2007, 0, 1); 414 } 415 416 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 417 public void factory_of_ints_monthTooHigh() { 418 LocalDate.of(2007, 13, 1); 419 } 420 421 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 422 public void factory_of_ints_yearTooLow() { 423 LocalDate.of(Integer.MIN_VALUE, 1, 1); 424 } 425 426 //----------------------------------------------------------------------- 427 @Test(groups={"tck"}) 428 public void factory_ofYearDay_ints_nonLeap() { 429 LocalDate date = LocalDate.of(2007, 1, 1); 430 for (int i = 1; i < 365; i++) { 431 assertEquals(LocalDate.ofYearDay(2007, i), date); 432 date = next(date); 433 } 434 } 435 436 @Test(groups={"tck"}) 437 public void factory_ofYearDay_ints_leap() { 438 LocalDate date = LocalDate.of(2008, 1, 1); 439 for (int i = 1; i < 366; i++) { 440 assertEquals(LocalDate.ofYearDay(2008, i), date); 441 date = next(date); 442 } 443 } 444 445 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 446 public void factory_ofYearDay_ints_366nonLeap() { 447 LocalDate.ofYearDay(2007, 366); 448 } 449 450 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 451 public void factory_ofYearDay_ints_dayTooLow() { 452 LocalDate.ofYearDay(2007, 0); 453 } 454 455 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 456 public void factory_ofYearDay_ints_dayTooHigh() { 457 LocalDate.ofYearDay(2007, 367); 458 } 459 460 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 461 public void factory_ofYearDay_ints_yearTooLow() { 462 LocalDate.ofYearDay(Integer.MIN_VALUE, 1); 463 } 464 465 //----------------------------------------------------------------------- 466 // Since plusDays/minusDays actually depends on MJDays, it cannot be used for testing 467 private LocalDate next(LocalDate date) { 468 int newDayOfMonth = date.getDayOfMonth() + 1; 469 if (newDayOfMonth <= date.getMonth().length(isIsoLeap(date.getYear()))) { 470 return date.withDayOfMonth(newDayOfMonth); 471 } 472 date = date.withDayOfMonth(1); 473 if (date.getMonth() == Month.DECEMBER) { 474 date = date.withYear(date.getYear() + 1); 475 } 476 return date.with(date.getMonth().plus(1)); 477 } 478 479 private LocalDate previous(LocalDate date) { 480 int newDayOfMonth = date.getDayOfMonth() - 1; 481 if (newDayOfMonth > 0) { 482 return date.withDayOfMonth(newDayOfMonth); 483 } 484 date = date.with(date.getMonth().minus(1)); 485 if (date.getMonth() == Month.DECEMBER) { 486 date = date.withYear(date.getYear() - 1); 487 } 488 return date.withDayOfMonth(date.getMonth().length(isIsoLeap(date.getYear()))); 489 } 490 491 //----------------------------------------------------------------------- 492 // ofEpochDay() 493 //----------------------------------------------------------------------- 494 @Test(groups={"tck"}) 495 public void factory_ofEpochDay() { 496 long date_0000_01_01 = -678941 - 40587; 497 assertEquals(LocalDate.ofEpochDay(0), LocalDate.of(1970, 1, 1)); 498 assertEquals(LocalDate.ofEpochDay(date_0000_01_01), LocalDate.of(0, 1, 1)); 499 assertEquals(LocalDate.ofEpochDay(date_0000_01_01 - 1), LocalDate.of(-1, 12, 31)); 500 assertEquals(LocalDate.ofEpochDay(MAX_VALID_EPOCHDAYS), LocalDate.of(Year.MAX_VALUE, 12, 31)); 501 assertEquals(LocalDate.ofEpochDay(MIN_VALID_EPOCHDAYS), LocalDate.of(Year.MIN_VALUE, 1, 1)); 502 503 LocalDate test = LocalDate.of(0, 1, 1); 504 for (long i = date_0000_01_01; i < 700000; i++) { 505 assertEquals(LocalDate.ofEpochDay(i), test); 506 test = next(test); 507 } 508 test = LocalDate.of(0, 1, 1); 509 for (long i = date_0000_01_01; i > -2000000; i--) { 510 assertEquals(LocalDate.ofEpochDay(i), test); 511 test = previous(test); 512 } 513 } 514 515 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 516 public void factory_ofEpochDay_aboveMax() { 517 LocalDate.ofEpochDay(MAX_VALID_EPOCHDAYS + 1); 518 } 519 520 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 521 public void factory_ofEpochDay_belowMin() { 522 LocalDate.ofEpochDay(MIN_VALID_EPOCHDAYS - 1); 523 } 524 525 //----------------------------------------------------------------------- 526 // from() 527 //----------------------------------------------------------------------- 528 @Test(groups={"tck"}) 529 public void test_from_TemporalAccessor() { 530 assertEquals(LocalDate.from(LocalDate.of(2007, 7, 15)), LocalDate.of(2007, 7, 15)); 531 assertEquals(LocalDate.from(LocalDateTime.of(2007, 7, 15, 12, 30)), LocalDate.of(2007, 7, 15)); 532 } 533 534 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 535 public void test_from_TemporalAccessor_invalid_noDerive() { 536 LocalDate.from(LocalTime.of(12, 30)); 537 } 538 539 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 540 public void test_from_TemporalAccessor_null() { 541 LocalDate.from((TemporalAccessor) null); 542 } 543 544 //----------------------------------------------------------------------- 545 // parse() 546 //----------------------------------------------------------------------- 547 @Test(dataProvider="sampleToString", groups={"tck"}) 548 public void factory_parse_validText(int y, int m, int d, String parsable) { 549 LocalDate t = LocalDate.parse(parsable); 550 assertNotNull(t, parsable); 551 assertEquals(t.getYear(), y, parsable); 552 assertEquals(t.getMonth().getValue(), m, parsable); 553 assertEquals(t.getDayOfMonth(), d, parsable); 554 } 555 556 @DataProvider(name="sampleBadParse") 557 Object[][] provider_sampleBadParse() { 558 return new Object[][]{ 559 {"2008/07/05"}, 560 {"10000-01-01"}, 561 {"2008-1-1"}, 562 {"2008--01"}, 563 {"ABCD-02-01"}, 564 {"2008-AB-01"}, 565 {"2008-02-AB"}, 566 {"-0000-02-01"}, 567 {"2008-02-01Z"}, 568 {"2008-02-01+01:00"}, 569 {"2008-02-01+01:00[Europe/Paris]"}, 570 }; 571 } 572 573 @Test(dataProvider="sampleBadParse", expectedExceptions={DateTimeParseException.class}, groups={"tck"}) 574 public void factory_parse_invalidText(String unparsable) { 575 LocalDate.parse(unparsable); 576 } 577 578 @Test(expectedExceptions=DateTimeParseException.class, groups={"tck"}) 579 public void factory_parse_illegalValue() { 580 LocalDate.parse("2008-06-32"); 581 } 582 583 @Test(expectedExceptions=DateTimeParseException.class, groups={"tck"}) 584 public void factory_parse_invalidValue() { 585 LocalDate.parse("2008-06-31"); 586 } 587 588 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 589 public void factory_parse_nullText() { 590 LocalDate.parse((String) null); 591 } 592 593 //----------------------------------------------------------------------- 594 // parse(DateTimeFormatter) 595 //----------------------------------------------------------------------- 596 @Test(groups={"tck"}) 597 public void factory_parse_formatter() { 598 DateTimeFormatter f = DateTimeFormatters.pattern("y M d"); 599 LocalDate test = LocalDate.parse("2010 12 3", f); 600 assertEquals(test, LocalDate.of(2010, 12, 3)); 601 } 602 603 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 604 public void factory_parse_formatter_nullText() { 605 DateTimeFormatter f = DateTimeFormatters.pattern("y M d"); 606 LocalDate.parse((String) null, f); 607 } 608 609 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 610 public void factory_parse_formatter_nullFormatter() { 611 LocalDate.parse("ANY", null); 612 } 613 614 //----------------------------------------------------------------------- 615 // get(TemporalField) 616 //----------------------------------------------------------------------- 617 @Test 618 public void test_get_TemporalField() { 619 LocalDate test = LocalDate.of(2008, 6, 30); 620 assertEquals(test.get(ChronoField.YEAR), 2008); 621 assertEquals(test.get(ChronoField.MONTH_OF_YEAR), 6); 622 assertEquals(test.get(ChronoField.DAY_OF_MONTH), 30); 623 assertEquals(test.get(ChronoField.DAY_OF_WEEK), 1); 624 assertEquals(test.get(ChronoField.DAY_OF_YEAR), 182); 625 } 626 627 @Test 628 public void test_getLong_TemporalField() { 629 LocalDate test = LocalDate.of(2008, 6, 30); 630 assertEquals(test.getLong(ChronoField.YEAR), 2008); 631 assertEquals(test.getLong(ChronoField.MONTH_OF_YEAR), 6); 632 assertEquals(test.getLong(ChronoField.DAY_OF_MONTH), 30); 633 assertEquals(test.getLong(ChronoField.DAY_OF_WEEK), 1); 634 assertEquals(test.getLong(ChronoField.DAY_OF_YEAR), 182); 635 } 636 637 //----------------------------------------------------------------------- 638 // query(TemporalQuery) 639 //----------------------------------------------------------------------- 640 @Test 641 public void test_query_chrono() { 642 assertEquals(TEST_2007_07_15.query(Queries.chrono()), ISOChrono.INSTANCE); 643 assertEquals(Queries.chrono().queryFrom(TEST_2007_07_15), ISOChrono.INSTANCE); 644 } 645 646 @Test 647 public void test_query_zoneId() { 648 assertEquals(TEST_2007_07_15.query(Queries.zoneId()), null); 649 assertEquals(Queries.zoneId().queryFrom(TEST_2007_07_15), null); 650 } 651 652 @Test 653 public void test_query_precision() { 654 assertEquals(TEST_2007_07_15.query(Queries.precision()), ChronoUnit.DAYS); 655 assertEquals(Queries.precision().queryFrom(TEST_2007_07_15), ChronoUnit.DAYS); 656 } 657 658 @Test 659 public void test_query_offset() { 660 assertEquals(TEST_2007_07_15.query(Queries.offset()), null); 661 assertEquals(Queries.offset().queryFrom(TEST_2007_07_15), null); 662 } 663 664 @Test 665 public void test_query_zone() { 666 assertEquals(TEST_2007_07_15.query(Queries.zone()), null); 667 assertEquals(Queries.zone().queryFrom(TEST_2007_07_15), null); 668 } 669 670 @Test(expectedExceptions=NullPointerException.class) 671 public void test_query_null() { 672 TEST_2007_07_15.query(null); 673 } 674 675 //----------------------------------------------------------------------- 676 // get*() 677 //----------------------------------------------------------------------- 678 @DataProvider(name="sampleDates") 679 Object[][] provider_sampleDates() { 680 return new Object[][] { 681 {2008, 7, 5}, 682 {2007, 7, 5}, 683 {2006, 7, 5}, 684 {2005, 7, 5}, 685 {2004, 1, 1}, 686 {-1, 1, 2}, 687 }; 688 } 689 690 //----------------------------------------------------------------------- 691 @Test(dataProvider="sampleDates", groups={"tck"}) 692 public void test_get(int y, int m, int d) { 693 LocalDate a = LocalDate.of(y, m, d); 694 assertEquals(a.getYear(), y); 695 assertEquals(a.getMonth(), Month.of(m)); 696 assertEquals(a.getDayOfMonth(), d); 697 } 698 699 @Test(dataProvider="sampleDates", groups={"tck"}) 700 public void test_getDOY(int y, int m, int d) { 701 LocalDate a = LocalDate.of(y, m, d); 702 int total = 0; 703 for (int i = 1; i < m; i++) { 704 total += Month.of(i).length(isIsoLeap(y)); 705 } 706 int doy = total + d; 707 assertEquals(a.getDayOfYear(), doy); 708 } 709 710 @Test(groups={"tck"}) 711 public void test_getDayOfWeek() { 712 DayOfWeek dow = DayOfWeek.MONDAY; 713 for (Month month : Month.values()) { 714 int length = month.length(false); 715 for (int i = 1; i <= length; i++) { 716 LocalDate d = LocalDate.of(2007, month, i); 717 assertSame(d.getDayOfWeek(), dow); 718 dow = dow.plus(1); 719 } 720 } 721 } 722 723 //----------------------------------------------------------------------- 724 // isLeapYear() 725 //----------------------------------------------------------------------- 726 @Test(groups={"tck"}) 727 public void test_isLeapYear() { 728 assertEquals(LocalDate.of(1999, 1, 1).isLeapYear(), false); 729 assertEquals(LocalDate.of(2000, 1, 1).isLeapYear(), true); 730 assertEquals(LocalDate.of(2001, 1, 1).isLeapYear(), false); 731 assertEquals(LocalDate.of(2002, 1, 1).isLeapYear(), false); 732 assertEquals(LocalDate.of(2003, 1, 1).isLeapYear(), false); 733 assertEquals(LocalDate.of(2004, 1, 1).isLeapYear(), true); 734 assertEquals(LocalDate.of(2005, 1, 1).isLeapYear(), false); 735 736 assertEquals(LocalDate.of(1500, 1, 1).isLeapYear(), false); 737 assertEquals(LocalDate.of(1600, 1, 1).isLeapYear(), true); 738 assertEquals(LocalDate.of(1700, 1, 1).isLeapYear(), false); 739 assertEquals(LocalDate.of(1800, 1, 1).isLeapYear(), false); 740 assertEquals(LocalDate.of(1900, 1, 1).isLeapYear(), false); 741 } 742 743 //----------------------------------------------------------------------- 744 // lengthOfMonth() 745 //----------------------------------------------------------------------- 746 @Test(groups={"tck"}) 747 public void test_lengthOfMonth_notLeapYear() { 748 assertEquals(LocalDate.of(2007, 1, 1).lengthOfMonth(), 31); 749 assertEquals(LocalDate.of(2007, 2, 1).lengthOfMonth(), 28); 750 assertEquals(LocalDate.of(2007, 3, 1).lengthOfMonth(), 31); 751 assertEquals(LocalDate.of(2007, 4, 1).lengthOfMonth(), 30); 752 assertEquals(LocalDate.of(2007, 5, 1).lengthOfMonth(), 31); 753 assertEquals(LocalDate.of(2007, 6, 1).lengthOfMonth(), 30); 754 assertEquals(LocalDate.of(2007, 7, 1).lengthOfMonth(), 31); 755 assertEquals(LocalDate.of(2007, 8, 1).lengthOfMonth(), 31); 756 assertEquals(LocalDate.of(2007, 9, 1).lengthOfMonth(), 30); 757 assertEquals(LocalDate.of(2007, 10, 1).lengthOfMonth(), 31); 758 assertEquals(LocalDate.of(2007, 11, 1).lengthOfMonth(), 30); 759 assertEquals(LocalDate.of(2007, 12, 1).lengthOfMonth(), 31); 760 } 761 762 @Test(groups={"tck"}) 763 public void test_lengthOfMonth_leapYear() { 764 assertEquals(LocalDate.of(2008, 1, 1).lengthOfMonth(), 31); 765 assertEquals(LocalDate.of(2008, 2, 1).lengthOfMonth(), 29); 766 assertEquals(LocalDate.of(2008, 3, 1).lengthOfMonth(), 31); 767 assertEquals(LocalDate.of(2008, 4, 1).lengthOfMonth(), 30); 768 assertEquals(LocalDate.of(2008, 5, 1).lengthOfMonth(), 31); 769 assertEquals(LocalDate.of(2008, 6, 1).lengthOfMonth(), 30); 770 assertEquals(LocalDate.of(2008, 7, 1).lengthOfMonth(), 31); 771 assertEquals(LocalDate.of(2008, 8, 1).lengthOfMonth(), 31); 772 assertEquals(LocalDate.of(2008, 9, 1).lengthOfMonth(), 30); 773 assertEquals(LocalDate.of(2008, 10, 1).lengthOfMonth(), 31); 774 assertEquals(LocalDate.of(2008, 11, 1).lengthOfMonth(), 30); 775 assertEquals(LocalDate.of(2008, 12, 1).lengthOfMonth(), 31); 776 } 777 778 //----------------------------------------------------------------------- 779 // lengthOfYear() 780 //----------------------------------------------------------------------- 781 @Test(groups={"tck"}) 782 public void test_lengthOfYear() { 783 assertEquals(LocalDate.of(2007, 1, 1).lengthOfYear(), 365); 784 assertEquals(LocalDate.of(2008, 1, 1).lengthOfYear(), 366); 785 } 786 787 //----------------------------------------------------------------------- 788 // with() 789 //----------------------------------------------------------------------- 790 @Test(groups={"tck"}) 791 public void test_with_adjustment() { 792 final LocalDate sample = LocalDate.of(2012, 3, 4); 793 TemporalAdjuster adjuster = new TemporalAdjuster() { 794 @Override 795 public Temporal adjustInto(Temporal dateTime) { 796 return sample; 797 } 798 }; 799 assertEquals(TEST_2007_07_15.with(adjuster), sample); 800 } 801 802 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 803 public void test_with_adjustment_null() { 804 TEST_2007_07_15.with((TemporalAdjuster) null); 805 } 806 807 //----------------------------------------------------------------------- 808 // with(TemporalField,long) 809 //----------------------------------------------------------------------- 810 @Test(groups={"tck"}) 811 public void test_with_TemporalField_long_normal() { 812 LocalDate t = TEST_2007_07_15.with(YEAR, 2008); 813 assertEquals(t, LocalDate.of(2008, 7, 15)); 814 } 815 816 @Test(expectedExceptions=NullPointerException.class, groups={"tck"} ) 817 public void test_with_TemporalField_long_null() { 818 TEST_2007_07_15.with((TemporalField) null, 1); 819 } 820 821 @Test(expectedExceptions=DateTimeException.class, groups={"tck"} ) 822 public void test_with_TemporalField_long_invalidField() { 823 TEST_2007_07_15.with(MockFieldNoValue.INSTANCE, 1); 824 } 825 826 @Test(expectedExceptions=DateTimeException.class, groups={"tck"} ) 827 public void test_with_TemporalField_long_timeField() { 828 TEST_2007_07_15.with(ChronoField.AMPM_OF_DAY, 1); 829 } 830 831 @Test(expectedExceptions=DateTimeException.class, groups={"tck"} ) 832 public void test_with_TemporalField_long_invalidValue() { 833 TEST_2007_07_15.with(ChronoField.DAY_OF_WEEK, -1); 834 } 835 836 //----------------------------------------------------------------------- 837 // withYear() 838 //----------------------------------------------------------------------- 839 @Test(groups={"tck"}) 840 public void test_withYear_int_normal() { 841 LocalDate t = TEST_2007_07_15.withYear(2008); 842 assertEquals(t, LocalDate.of(2008, 7, 15)); 843 } 844 845 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 846 public void test_withYear_int_invalid() { 847 TEST_2007_07_15.withYear(Year.MIN_VALUE - 1); 848 } 849 850 @Test(groups={"tck"}) 851 public void test_withYear_int_adjustDay() { 852 LocalDate t = LocalDate.of(2008, 2, 29).withYear(2007); 853 LocalDate expected = LocalDate.of(2007, 2, 28); 854 assertEquals(t, expected); 855 } 856 857 //----------------------------------------------------------------------- 858 // withMonth() 859 //----------------------------------------------------------------------- 860 @Test(groups={"tck"}) 861 public void test_withMonth_int_normal() { 862 LocalDate t = TEST_2007_07_15.withMonth(1); 863 assertEquals(t, LocalDate.of(2007, 1, 15)); 864 } 865 866 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 867 public void test_withMonth_int_invalid() { 868 TEST_2007_07_15.withMonth(13); 869 } 870 871 @Test(groups={"tck"}) 872 public void test_withMonth_int_adjustDay() { 873 LocalDate t = LocalDate.of(2007, 12, 31).withMonth(11); 874 LocalDate expected = LocalDate.of(2007, 11, 30); 875 assertEquals(t, expected); 876 } 877 878 //----------------------------------------------------------------------- 879 // withDayOfMonth() 880 //----------------------------------------------------------------------- 881 @Test(groups={"tck"}) 882 public void test_withDayOfMonth_normal() { 883 LocalDate t = TEST_2007_07_15.withDayOfMonth(1); 884 assertEquals(t, LocalDate.of(2007, 7, 1)); 885 } 886 887 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 888 public void test_withDayOfMonth_illegal() { 889 TEST_2007_07_15.withDayOfMonth(32); 890 } 891 892 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 893 public void test_withDayOfMonth_invalid() { 894 LocalDate.of(2007, 11, 30).withDayOfMonth(31); 895 } 896 897 //----------------------------------------------------------------------- 898 // withDayOfYear(int) 899 //----------------------------------------------------------------------- 900 @Test(groups={"tck"}) 901 public void test_withDayOfYear_normal() { 902 LocalDate t = TEST_2007_07_15.withDayOfYear(33); 903 assertEquals(t, LocalDate.of(2007, 2, 2)); 904 } 905 906 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 907 public void test_withDayOfYear_illegal() { 908 TEST_2007_07_15.withDayOfYear(367); 909 } 910 911 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 912 public void test_withDayOfYear_invalid() { 913 TEST_2007_07_15.withDayOfYear(366); 914 } 915 916 //----------------------------------------------------------------------- 917 // plus(Period) 918 //----------------------------------------------------------------------- 919 @Test(groups={"tck"}) 920 public void test_plus_Period_positiveMonths() { 921 MockSimplePeriod period = MockSimplePeriod.of(7, ChronoUnit.MONTHS); 922 LocalDate t = TEST_2007_07_15.plus(period); 923 assertEquals(t, LocalDate.of(2008, 2, 15)); 924 } 925 926 @Test(groups={"tck"}) 927 public void test_plus_Period_negativeDays() { 928 MockSimplePeriod period = MockSimplePeriod.of(-25, ChronoUnit.DAYS); 929 LocalDate t = TEST_2007_07_15.plus(period); 930 assertEquals(t, LocalDate.of(2007, 6, 20)); 931 } 932 933 @Test(groups={"tck"}, expectedExceptions=DateTimeException.class) 934 public void test_plus_Period_timeNotAllowed() { 935 MockSimplePeriod period = MockSimplePeriod.of(7, ChronoUnit.HOURS); 936 TEST_2007_07_15.plus(period); 937 } 938 939 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 940 public void test_plus_Period_null() { 941 TEST_2007_07_15.plus((MockSimplePeriod) null); 942 } 943 944 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 945 public void test_plus_Period_invalidTooLarge() { 946 MockSimplePeriod period = MockSimplePeriod.of(1, ChronoUnit.YEARS); 947 LocalDate.of(Year.MAX_VALUE, 1, 1).plus(period); 948 } 949 950 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 951 public void test_plus_Period_invalidTooSmall() { 952 MockSimplePeriod period = MockSimplePeriod.of(-1, ChronoUnit.YEARS); 953 LocalDate.of(Year.MIN_VALUE, 1, 1).plus(period); 954 } 955 956 //----------------------------------------------------------------------- 957 // plus(long,TemporalUnit) 958 //----------------------------------------------------------------------- 959 @Test(groups={"tck"}) 960 public void test_plus_longTemporalUnit_positiveMonths() { 961 LocalDate t = TEST_2007_07_15.plus(7, ChronoUnit.MONTHS); 962 assertEquals(t, LocalDate.of(2008, 2, 15)); 963 } 964 965 @Test(groups={"tck"}) 966 public void test_plus_longTemporalUnit_negativeDays() { 967 LocalDate t = TEST_2007_07_15.plus(-25, ChronoUnit.DAYS); 968 assertEquals(t, LocalDate.of(2007, 6, 20)); 969 } 970 971 @Test(groups={"tck"}, expectedExceptions=DateTimeException.class) 972 public void test_plus_longTemporalUnit_timeNotAllowed() { 973 TEST_2007_07_15.plus(7, ChronoUnit.HOURS); 974 } 975 976 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 977 public void test_plus_longTemporalUnit_null() { 978 TEST_2007_07_15.plus(1, (TemporalUnit) null); 979 } 980 981 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 982 public void test_plus_longTemporalUnit_invalidTooLarge() { 983 LocalDate.of(Year.MAX_VALUE, 1, 1).plus(1, ChronoUnit.YEARS); 984 } 985 986 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 987 public void test_plus_longTemporalUnit_invalidTooSmall() { 988 LocalDate.of(Year.MIN_VALUE, 1, 1).plus(-1, ChronoUnit.YEARS); 989 } 990 991 //----------------------------------------------------------------------- 992 // plusYears() 993 //----------------------------------------------------------------------- 994 @Test(groups={"tck"}) 995 public void test_plusYears_long_normal() { 996 LocalDate t = TEST_2007_07_15.plusYears(1); 997 assertEquals(t, LocalDate.of(2008, 7, 15)); 998 } 999 1000 @Test(groups={"tck"}) 1001 public void test_plusYears_long_negative() { 1002 LocalDate t = TEST_2007_07_15.plusYears(-1); 1003 assertEquals(t, LocalDate.of(2006, 7, 15)); 1004 } 1005 1006 @Test(groups={"tck"}) 1007 public void test_plusYears_long_adjustDay() { 1008 LocalDate t = LocalDate.of(2008, 2, 29).plusYears(1); 1009 LocalDate expected = LocalDate.of(2009, 2, 28); 1010 assertEquals(t, expected); 1011 } 1012 1013 @Test(groups={"tck"}) 1014 public void test_plusYears_long_big() { 1015 long years = 20L + Year.MAX_VALUE; 1016 LocalDate test = LocalDate.of(-40, 6, 1).plusYears(years); 1017 assertEquals(test, LocalDate.of((int) (-40L + years), 6, 1)); 1018 } 1019 1020 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1021 public void test_plusYears_long_invalidTooLarge() { 1022 LocalDate test = LocalDate.of(Year.MAX_VALUE, 6, 1); 1023 test.plusYears(1); 1024 } 1025 1026 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1027 public void test_plusYears_long_invalidTooLargeMaxAddMax() { 1028 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1029 test.plusYears(Long.MAX_VALUE); 1030 } 1031 1032 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1033 public void test_plusYears_long_invalidTooLargeMaxAddMin() { 1034 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1035 test.plusYears(Long.MIN_VALUE); 1036 } 1037 1038 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1039 public void test_plusYears_long_invalidTooSmall_validInt() { 1040 LocalDate.of(Year.MIN_VALUE, 1, 1).plusYears(-1); 1041 } 1042 1043 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1044 public void test_plusYears_long_invalidTooSmall_invalidInt() { 1045 LocalDate.of(Year.MIN_VALUE, 1, 1).plusYears(-10); 1046 } 1047 1048 //----------------------------------------------------------------------- 1049 // plusMonths() 1050 //----------------------------------------------------------------------- 1051 @Test(groups={"tck"}) 1052 public void test_plusMonths_long_normal() { 1053 LocalDate t = TEST_2007_07_15.plusMonths(1); 1054 assertEquals(t, LocalDate.of(2007, 8, 15)); 1055 } 1056 1057 @Test(groups={"tck"}) 1058 public void test_plusMonths_long_overYears() { 1059 LocalDate t = TEST_2007_07_15.plusMonths(25); 1060 assertEquals(t, LocalDate.of(2009, 8, 15)); 1061 } 1062 1063 @Test(groups={"tck"}) 1064 public void test_plusMonths_long_negative() { 1065 LocalDate t = TEST_2007_07_15.plusMonths(-1); 1066 assertEquals(t, LocalDate.of(2007, 6, 15)); 1067 } 1068 1069 @Test(groups={"tck"}) 1070 public void test_plusMonths_long_negativeAcrossYear() { 1071 LocalDate t = TEST_2007_07_15.plusMonths(-7); 1072 assertEquals(t, LocalDate.of(2006, 12, 15)); 1073 } 1074 1075 @Test(groups={"tck"}) 1076 public void test_plusMonths_long_negativeOverYears() { 1077 LocalDate t = TEST_2007_07_15.plusMonths(-31); 1078 assertEquals(t, LocalDate.of(2004, 12, 15)); 1079 } 1080 1081 @Test(groups={"tck"}) 1082 public void test_plusMonths_long_adjustDayFromLeapYear() { 1083 LocalDate t = LocalDate.of(2008, 2, 29).plusMonths(12); 1084 LocalDate expected = LocalDate.of(2009, 2, 28); 1085 assertEquals(t, expected); 1086 } 1087 1088 @Test(groups={"tck"}) 1089 public void test_plusMonths_long_adjustDayFromMonthLength() { 1090 LocalDate t = LocalDate.of(2007, 3, 31).plusMonths(1); 1091 LocalDate expected = LocalDate.of(2007, 4, 30); 1092 assertEquals(t, expected); 1093 } 1094 1095 @Test(groups={"tck"}) 1096 public void test_plusMonths_long_big() { 1097 long months = 20L + Integer.MAX_VALUE; 1098 LocalDate test = LocalDate.of(-40, 6, 1).plusMonths(months); 1099 assertEquals(test, LocalDate.of((int) (-40L + months / 12), 6 + (int) (months % 12), 1)); 1100 } 1101 1102 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1103 public void test_plusMonths_long_invalidTooLarge() { 1104 LocalDate.of(Year.MAX_VALUE, 12, 1).plusMonths(1); 1105 } 1106 1107 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1108 public void test_plusMonths_long_invalidTooLargeMaxAddMax() { 1109 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1110 test.plusMonths(Long.MAX_VALUE); 1111 } 1112 1113 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1114 public void test_plusMonths_long_invalidTooLargeMaxAddMin() { 1115 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1116 test.plusMonths(Long.MIN_VALUE); 1117 } 1118 1119 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1120 public void test_plusMonths_long_invalidTooSmall() { 1121 LocalDate.of(Year.MIN_VALUE, 1, 1).plusMonths(-1); 1122 } 1123 1124 @Test(groups={"tck"}) 1125 public void test_plusWeeks_normal() { 1126 LocalDate t = TEST_2007_07_15.plusWeeks(1); 1127 assertEquals(t, LocalDate.of(2007, 7, 22)); 1128 } 1129 1130 @Test(groups={"tck"}) 1131 public void test_plusWeeks_overMonths() { 1132 LocalDate t = TEST_2007_07_15.plusWeeks(9); 1133 assertEquals(t, LocalDate.of(2007, 9, 16)); 1134 } 1135 1136 @Test(groups={"tck"}) 1137 public void test_plusWeeks_overYears() { 1138 LocalDate t = LocalDate.of(2006, 7, 16).plusWeeks(52); 1139 assertEquals(t, TEST_2007_07_15); 1140 } 1141 1142 @Test(groups={"tck"}) 1143 public void test_plusWeeks_overLeapYears() { 1144 LocalDate t = TEST_2007_07_15.plusYears(-1).plusWeeks(104); 1145 assertEquals(t, LocalDate.of(2008, 7, 12)); 1146 } 1147 1148 @Test(groups={"tck"}) 1149 public void test_plusWeeks_negative() { 1150 LocalDate t = TEST_2007_07_15.plusWeeks(-1); 1151 assertEquals(t, LocalDate.of(2007, 7, 8)); 1152 } 1153 1154 @Test(groups={"tck"}) 1155 public void test_plusWeeks_negativeAcrossYear() { 1156 LocalDate t = TEST_2007_07_15.plusWeeks(-28); 1157 assertEquals(t, LocalDate.of(2006, 12, 31)); 1158 } 1159 1160 @Test(groups={"tck"}) 1161 public void test_plusWeeks_negativeOverYears() { 1162 LocalDate t = TEST_2007_07_15.plusWeeks(-104); 1163 assertEquals(t, LocalDate.of(2005, 7, 17)); 1164 } 1165 1166 @Test(groups={"tck"}) 1167 public void test_plusWeeks_maximum() { 1168 LocalDate t = LocalDate.of(Year.MAX_VALUE, 12, 24).plusWeeks(1); 1169 LocalDate expected = LocalDate.of(Year.MAX_VALUE, 12, 31); 1170 assertEquals(t, expected); 1171 } 1172 1173 @Test(groups={"tck"}) 1174 public void test_plusWeeks_minimum() { 1175 LocalDate t = LocalDate.of(Year.MIN_VALUE, 1, 8).plusWeeks(-1); 1176 LocalDate expected = LocalDate.of(Year.MIN_VALUE, 1, 1); 1177 assertEquals(t, expected); 1178 } 1179 1180 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1181 public void test_plusWeeks_invalidTooLarge() { 1182 LocalDate.of(Year.MAX_VALUE, 12, 25).plusWeeks(1); 1183 } 1184 1185 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1186 public void test_plusWeeks_invalidTooSmall() { 1187 LocalDate.of(Year.MIN_VALUE, 1, 7).plusWeeks(-1); 1188 } 1189 1190 @Test(expectedExceptions={ArithmeticException.class}, groups={"tck"}) 1191 public void test_plusWeeks_invalidMaxMinusMax() { 1192 LocalDate.of(Year.MAX_VALUE, 12, 25).plusWeeks(Long.MAX_VALUE); 1193 } 1194 1195 @Test(expectedExceptions={ArithmeticException.class}, groups={"tck"}) 1196 public void test_plusWeeks_invalidMaxMinusMin() { 1197 LocalDate.of(Year.MAX_VALUE, 12, 25).plusWeeks(Long.MIN_VALUE); 1198 } 1199 1200 @Test(groups={"tck"}) 1201 public void test_plusDays_normal() { 1202 LocalDate t = TEST_2007_07_15.plusDays(1); 1203 assertEquals(t, LocalDate.of(2007, 7, 16)); 1204 } 1205 1206 @Test(groups={"tck"}) 1207 public void test_plusDays_overMonths() { 1208 LocalDate t = TEST_2007_07_15.plusDays(62); 1209 assertEquals(t, LocalDate.of(2007, 9, 15)); 1210 } 1211 1212 @Test(groups={"tck"}) 1213 public void test_plusDays_overYears() { 1214 LocalDate t = LocalDate.of(2006, 7, 14).plusDays(366); 1215 assertEquals(t, TEST_2007_07_15); 1216 } 1217 1218 @Test(groups={"tck"}) 1219 public void test_plusDays_overLeapYears() { 1220 LocalDate t = TEST_2007_07_15.plusYears(-1).plusDays(365 + 366); 1221 assertEquals(t, LocalDate.of(2008, 7, 15)); 1222 } 1223 1224 @Test(groups={"tck"}) 1225 public void test_plusDays_negative() { 1226 LocalDate t = TEST_2007_07_15.plusDays(-1); 1227 assertEquals(t, LocalDate.of(2007, 7, 14)); 1228 } 1229 1230 @Test(groups={"tck"}) 1231 public void test_plusDays_negativeAcrossYear() { 1232 LocalDate t = TEST_2007_07_15.plusDays(-196); 1233 assertEquals(t, LocalDate.of(2006, 12, 31)); 1234 } 1235 1236 @Test(groups={"tck"}) 1237 public void test_plusDays_negativeOverYears() { 1238 LocalDate t = TEST_2007_07_15.plusDays(-730); 1239 assertEquals(t, LocalDate.of(2005, 7, 15)); 1240 } 1241 1242 @Test(groups={"tck"}) 1243 public void test_plusDays_maximum() { 1244 LocalDate t = LocalDate.of(Year.MAX_VALUE, 12, 30).plusDays(1); 1245 LocalDate expected = LocalDate.of(Year.MAX_VALUE, 12, 31); 1246 assertEquals(t, expected); 1247 } 1248 1249 @Test(groups={"tck"}) 1250 public void test_plusDays_minimum() { 1251 LocalDate t = LocalDate.of(Year.MIN_VALUE, 1, 2).plusDays(-1); 1252 LocalDate expected = LocalDate.of(Year.MIN_VALUE, 1, 1); 1253 assertEquals(t, expected); 1254 } 1255 1256 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1257 public void test_plusDays_invalidTooLarge() { 1258 LocalDate.of(Year.MAX_VALUE, 12, 31).plusDays(1); 1259 } 1260 1261 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1262 public void test_plusDays_invalidTooSmall() { 1263 LocalDate.of(Year.MIN_VALUE, 1, 1).plusDays(-1); 1264 } 1265 1266 @Test(expectedExceptions=ArithmeticException.class, groups={"tck"}) 1267 public void test_plusDays_overflowTooLarge() { 1268 LocalDate.of(Year.MAX_VALUE, 12, 31).plusDays(Long.MAX_VALUE); 1269 } 1270 1271 @Test(expectedExceptions=ArithmeticException.class, groups={"tck"}) 1272 public void test_plusDays_overflowTooSmall() { 1273 LocalDate.of(Year.MIN_VALUE, 1, 1).plusDays(Long.MIN_VALUE); 1274 } 1275 1276 //----------------------------------------------------------------------- 1277 // minus(Period) 1278 //----------------------------------------------------------------------- 1279 @Test(groups={"tck"}) 1280 public void test_minus_Period_positiveMonths() { 1281 MockSimplePeriod period = MockSimplePeriod.of(7, ChronoUnit.MONTHS); 1282 LocalDate t = TEST_2007_07_15.minus(period); 1283 assertEquals(t, LocalDate.of(2006, 12, 15)); 1284 } 1285 1286 @Test(groups={"tck"}) 1287 public void test_minus_Period_negativeDays() { 1288 MockSimplePeriod period = MockSimplePeriod.of(-25, ChronoUnit.DAYS); 1289 LocalDate t = TEST_2007_07_15.minus(period); 1290 assertEquals(t, LocalDate.of(2007, 8, 9)); 1291 } 1292 1293 @Test(groups={"tck"}, expectedExceptions=DateTimeException.class) 1294 public void test_minus_Period_timeNotAllowed() { 1295 MockSimplePeriod period = MockSimplePeriod.of(7, ChronoUnit.HOURS); 1296 TEST_2007_07_15.minus(period); 1297 } 1298 1299 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1300 public void test_minus_Period_null() { 1301 TEST_2007_07_15.minus((MockSimplePeriod) null); 1302 } 1303 1304 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1305 public void test_minus_Period_invalidTooLarge() { 1306 MockSimplePeriod period = MockSimplePeriod.of(-1, ChronoUnit.YEARS); 1307 LocalDate.of(Year.MAX_VALUE, 1, 1).minus(period); 1308 } 1309 1310 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1311 public void test_minus_Period_invalidTooSmall() { 1312 MockSimplePeriod period = MockSimplePeriod.of(1, ChronoUnit.YEARS); 1313 LocalDate.of(Year.MIN_VALUE, 1, 1).minus(period); 1314 } 1315 1316 //----------------------------------------------------------------------- 1317 // minus(long,TemporalUnit) 1318 //----------------------------------------------------------------------- 1319 @Test(groups={"tck"}) 1320 public void test_minus_longTemporalUnit_positiveMonths() { 1321 LocalDate t = TEST_2007_07_15.minus(7, ChronoUnit.MONTHS); 1322 assertEquals(t, LocalDate.of(2006, 12, 15)); 1323 } 1324 1325 @Test(groups={"tck"}) 1326 public void test_minus_longTemporalUnit_negativeDays() { 1327 LocalDate t = TEST_2007_07_15.minus(-25, ChronoUnit.DAYS); 1328 assertEquals(t, LocalDate.of(2007, 8, 9)); 1329 } 1330 1331 @Test(groups={"tck"}, expectedExceptions=DateTimeException.class) 1332 public void test_minus_longTemporalUnit_timeNotAllowed() { 1333 TEST_2007_07_15.minus(7, ChronoUnit.HOURS); 1334 } 1335 1336 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1337 public void test_minus_longTemporalUnit_null() { 1338 TEST_2007_07_15.minus(1, (TemporalUnit) null); 1339 } 1340 1341 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1342 public void test_minus_longTemporalUnit_invalidTooLarge() { 1343 LocalDate.of(Year.MAX_VALUE, 1, 1).minus(-1, ChronoUnit.YEARS); 1344 } 1345 1346 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1347 public void test_minus_longTemporalUnit_invalidTooSmall() { 1348 LocalDate.of(Year.MIN_VALUE, 1, 1).minus(1, ChronoUnit.YEARS); 1349 } 1350 1351 //----------------------------------------------------------------------- 1352 // minusYears() 1353 //----------------------------------------------------------------------- 1354 @Test(groups={"tck"}) 1355 public void test_minusYears_long_normal() { 1356 LocalDate t = TEST_2007_07_15.minusYears(1); 1357 assertEquals(t, LocalDate.of(2006, 7, 15)); 1358 } 1359 1360 @Test(groups={"tck"}) 1361 public void test_minusYears_long_negative() { 1362 LocalDate t = TEST_2007_07_15.minusYears(-1); 1363 assertEquals(t, LocalDate.of(2008, 7, 15)); 1364 } 1365 1366 @Test(groups={"tck"}) 1367 public void test_minusYears_long_adjustDay() { 1368 LocalDate t = LocalDate.of(2008, 2, 29).minusYears(1); 1369 LocalDate expected = LocalDate.of(2007, 2, 28); 1370 assertEquals(t, expected); 1371 } 1372 1373 @Test(groups={"tck"}) 1374 public void test_minusYears_long_big() { 1375 long years = 20L + Year.MAX_VALUE; 1376 LocalDate test = LocalDate.of(40, 6, 1).minusYears(years); 1377 assertEquals(test, LocalDate.of((int) (40L - years), 6, 1)); 1378 } 1379 1380 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1381 public void test_minusYears_long_invalidTooLarge() { 1382 LocalDate test = LocalDate.of(Year.MAX_VALUE, 6, 1); 1383 test.minusYears(-1); 1384 } 1385 1386 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1387 public void test_minusYears_long_invalidTooLargeMaxAddMax() { 1388 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1389 test.minusYears(Long.MAX_VALUE); 1390 } 1391 1392 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1393 public void test_minusYears_long_invalidTooLargeMaxAddMin() { 1394 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1395 test.minusYears(Long.MIN_VALUE); 1396 } 1397 1398 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1399 public void test_minusYears_long_invalidTooSmall() { 1400 LocalDate.of(Year.MIN_VALUE, 1, 1).minusYears(1); 1401 } 1402 1403 //----------------------------------------------------------------------- 1404 // minusMonths() 1405 //----------------------------------------------------------------------- 1406 @Test(groups={"tck"}) 1407 public void test_minusMonths_long_normal() { 1408 LocalDate t = TEST_2007_07_15.minusMonths(1); 1409 assertEquals(t, LocalDate.of(2007, 6, 15)); 1410 } 1411 1412 @Test(groups={"tck"}) 1413 public void test_minusMonths_long_overYears() { 1414 LocalDate t = TEST_2007_07_15.minusMonths(25); 1415 assertEquals(t, LocalDate.of(2005, 6, 15)); 1416 } 1417 1418 @Test(groups={"tck"}) 1419 public void test_minusMonths_long_negative() { 1420 LocalDate t = TEST_2007_07_15.minusMonths(-1); 1421 assertEquals(t, LocalDate.of(2007, 8, 15)); 1422 } 1423 1424 @Test(groups={"tck"}) 1425 public void test_minusMonths_long_negativeAcrossYear() { 1426 LocalDate t = TEST_2007_07_15.minusMonths(-7); 1427 assertEquals(t, LocalDate.of(2008, 2, 15)); 1428 } 1429 1430 @Test(groups={"tck"}) 1431 public void test_minusMonths_long_negativeOverYears() { 1432 LocalDate t = TEST_2007_07_15.minusMonths(-31); 1433 assertEquals(t, LocalDate.of(2010, 2, 15)); 1434 } 1435 1436 @Test(groups={"tck"}) 1437 public void test_minusMonths_long_adjustDayFromLeapYear() { 1438 LocalDate t = LocalDate.of(2008, 2, 29).minusMonths(12); 1439 LocalDate expected = LocalDate.of(2007, 2, 28); 1440 assertEquals(t, expected); 1441 } 1442 1443 @Test(groups={"tck"}) 1444 public void test_minusMonths_long_adjustDayFromMonthLength() { 1445 LocalDate t = LocalDate.of(2007, 3, 31).minusMonths(1); 1446 LocalDate expected = LocalDate.of(2007, 2, 28); 1447 assertEquals(t, expected); 1448 } 1449 1450 @Test(groups={"tck"}) 1451 public void test_minusMonths_long_big() { 1452 long months = 20L + Integer.MAX_VALUE; 1453 LocalDate test = LocalDate.of(40, 6, 1).minusMonths(months); 1454 assertEquals(test, LocalDate.of((int) (40L - months / 12), 6 - (int) (months % 12), 1)); 1455 } 1456 1457 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1458 public void test_minusMonths_long_invalidTooLarge() { 1459 LocalDate.of(Year.MAX_VALUE, 12, 1).minusMonths(-1); 1460 } 1461 1462 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1463 public void test_minusMonths_long_invalidTooLargeMaxAddMax() { 1464 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1465 test.minusMonths(Long.MAX_VALUE); 1466 } 1467 1468 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1469 public void test_minusMonths_long_invalidTooLargeMaxAddMin() { 1470 LocalDate test = LocalDate.of(Year.MAX_VALUE, 12, 1); 1471 test.minusMonths(Long.MIN_VALUE); 1472 } 1473 1474 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1475 public void test_minusMonths_long_invalidTooSmall() { 1476 LocalDate.of(Year.MIN_VALUE, 1, 1).minusMonths(1); 1477 } 1478 1479 @Test(groups={"tck"}) 1480 public void test_minusWeeks_normal() { 1481 LocalDate t = TEST_2007_07_15.minusWeeks(1); 1482 assertEquals(t, LocalDate.of(2007, 7, 8)); 1483 } 1484 1485 @Test(groups={"tck"}) 1486 public void test_minusWeeks_overMonths() { 1487 LocalDate t = TEST_2007_07_15.minusWeeks(9); 1488 assertEquals(t, LocalDate.of(2007, 5, 13)); 1489 } 1490 1491 @Test(groups={"tck"}) 1492 public void test_minusWeeks_overYears() { 1493 LocalDate t = LocalDate.of(2008, 7, 13).minusWeeks(52); 1494 assertEquals(t, TEST_2007_07_15); 1495 } 1496 1497 @Test(groups={"tck"}) 1498 public void test_minusWeeks_overLeapYears() { 1499 LocalDate t = TEST_2007_07_15.minusYears(-1).minusWeeks(104); 1500 assertEquals(t, LocalDate.of(2006, 7, 18)); 1501 } 1502 1503 @Test(groups={"tck"}) 1504 public void test_minusWeeks_negative() { 1505 LocalDate t = TEST_2007_07_15.minusWeeks(-1); 1506 assertEquals(t, LocalDate.of(2007, 7, 22)); 1507 } 1508 1509 @Test(groups={"tck"}) 1510 public void test_minusWeeks_negativeAcrossYear() { 1511 LocalDate t = TEST_2007_07_15.minusWeeks(-28); 1512 assertEquals(t, LocalDate.of(2008, 1, 27)); 1513 } 1514 1515 @Test(groups={"tck"}) 1516 public void test_minusWeeks_negativeOverYears() { 1517 LocalDate t = TEST_2007_07_15.minusWeeks(-104); 1518 assertEquals(t, LocalDate.of(2009, 7, 12)); 1519 } 1520 1521 @Test(groups={"tck"}) 1522 public void test_minusWeeks_maximum() { 1523 LocalDate t = LocalDate.of(Year.MAX_VALUE, 12, 24).minusWeeks(-1); 1524 LocalDate expected = LocalDate.of(Year.MAX_VALUE, 12, 31); 1525 assertEquals(t, expected); 1526 } 1527 1528 @Test(groups={"tck"}) 1529 public void test_minusWeeks_minimum() { 1530 LocalDate t = LocalDate.of(Year.MIN_VALUE, 1, 8).minusWeeks(1); 1531 LocalDate expected = LocalDate.of(Year.MIN_VALUE, 1, 1); 1532 assertEquals(t, expected); 1533 } 1534 1535 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1536 public void test_minusWeeks_invalidTooLarge() { 1537 LocalDate.of(Year.MAX_VALUE, 12, 25).minusWeeks(-1); 1538 } 1539 1540 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1541 public void test_minusWeeks_invalidTooSmall() { 1542 LocalDate.of(Year.MIN_VALUE, 1, 7).minusWeeks(1); 1543 } 1544 1545 @Test(expectedExceptions={ArithmeticException.class}, groups={"tck"}) 1546 public void test_minusWeeks_invalidMaxMinusMax() { 1547 LocalDate.of(Year.MAX_VALUE, 12, 25).minusWeeks(Long.MAX_VALUE); 1548 } 1549 1550 @Test(expectedExceptions={ArithmeticException.class}, groups={"tck"}) 1551 public void test_minusWeeks_invalidMaxMinusMin() { 1552 LocalDate.of(Year.MAX_VALUE, 12, 25).minusWeeks(Long.MIN_VALUE); 1553 } 1554 1555 @Test(groups={"tck"}) 1556 public void test_minusDays_normal() { 1557 LocalDate t = TEST_2007_07_15.minusDays(1); 1558 assertEquals(t, LocalDate.of(2007, 7, 14)); 1559 } 1560 1561 @Test(groups={"tck"}) 1562 public void test_minusDays_overMonths() { 1563 LocalDate t = TEST_2007_07_15.minusDays(62); 1564 assertEquals(t, LocalDate.of(2007, 5, 14)); 1565 } 1566 1567 @Test(groups={"tck"}) 1568 public void test_minusDays_overYears() { 1569 LocalDate t = LocalDate.of(2008, 7, 16).minusDays(367); 1570 assertEquals(t, TEST_2007_07_15); 1571 } 1572 1573 @Test(groups={"tck"}) 1574 public void test_minusDays_overLeapYears() { 1575 LocalDate t = TEST_2007_07_15.plusYears(2).minusDays(365 + 366); 1576 assertEquals(t, TEST_2007_07_15); 1577 } 1578 1579 @Test(groups={"tck"}) 1580 public void test_minusDays_negative() { 1581 LocalDate t = TEST_2007_07_15.minusDays(-1); 1582 assertEquals(t, LocalDate.of(2007, 7, 16)); 1583 } 1584 1585 @Test(groups={"tck"}) 1586 public void test_minusDays_negativeAcrossYear() { 1587 LocalDate t = TEST_2007_07_15.minusDays(-169); 1588 assertEquals(t, LocalDate.of(2007, 12, 31)); 1589 } 1590 1591 @Test(groups={"tck"}) 1592 public void test_minusDays_negativeOverYears() { 1593 LocalDate t = TEST_2007_07_15.minusDays(-731); 1594 assertEquals(t, LocalDate.of(2009, 7, 15)); 1595 } 1596 1597 @Test(groups={"tck"}) 1598 public void test_minusDays_maximum() { 1599 LocalDate t = LocalDate.of(Year.MAX_VALUE, 12, 30).minusDays(-1); 1600 LocalDate expected = LocalDate.of(Year.MAX_VALUE, 12, 31); 1601 assertEquals(t, expected); 1602 } 1603 1604 @Test(groups={"tck"}) 1605 public void test_minusDays_minimum() { 1606 LocalDate t = LocalDate.of(Year.MIN_VALUE, 1, 2).minusDays(1); 1607 LocalDate expected = LocalDate.of(Year.MIN_VALUE, 1, 1); 1608 assertEquals(t, expected); 1609 } 1610 1611 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1612 public void test_minusDays_invalidTooLarge() { 1613 LocalDate.of(Year.MAX_VALUE, 12, 31).minusDays(-1); 1614 } 1615 1616 @Test(expectedExceptions={DateTimeException.class}, groups={"tck"}) 1617 public void test_minusDays_invalidTooSmall() { 1618 LocalDate.of(Year.MIN_VALUE, 1, 1).minusDays(1); 1619 } 1620 1621 @Test(expectedExceptions=ArithmeticException.class, groups={"tck"}) 1622 public void test_minusDays_overflowTooLarge() { 1623 LocalDate.of(Year.MAX_VALUE, 12, 31).minusDays(Long.MIN_VALUE); 1624 } 1625 1626 @Test(expectedExceptions=ArithmeticException.class, groups={"tck"}) 1627 public void test_minusDays_overflowTooSmall() { 1628 LocalDate.of(Year.MIN_VALUE, 1, 1).minusDays(Long.MAX_VALUE); 1629 } 1630 1631 //----------------------------------------------------------------------- 1632 // atTime() 1633 //----------------------------------------------------------------------- 1634 @Test(groups={"tck"}) 1635 public void test_atTime_LocalTime() { 1636 LocalDate t = LocalDate.of(2008, 6, 30); 1637 assertEquals(t.atTime(LocalTime.of(11, 30)), LocalDateTime.of(2008, 6, 30, 11, 30)); 1638 } 1639 1640 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1641 public void test_atTime_LocalTime_null() { 1642 LocalDate t = LocalDate.of(2008, 6, 30); 1643 t.atTime((LocalTime) null); 1644 } 1645 1646 //------------------------------------------------------------------------- 1647 @Test(groups={"tck"}) 1648 public void test_atTime_int_int() { 1649 LocalDate t = LocalDate.of(2008, 6, 30); 1650 assertEquals(t.atTime(11, 30), LocalDateTime.of(2008, 6, 30, 11, 30)); 1651 } 1652 1653 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1654 public void test_atTime_int_int_hourTooSmall() { 1655 LocalDate t = LocalDate.of(2008, 6, 30); 1656 t.atTime(-1, 30); 1657 } 1658 1659 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1660 public void test_atTime_int_int_hourTooBig() { 1661 LocalDate t = LocalDate.of(2008, 6, 30); 1662 t.atTime(24, 30); 1663 } 1664 1665 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1666 public void test_atTime_int_int_minuteTooSmall() { 1667 LocalDate t = LocalDate.of(2008, 6, 30); 1668 t.atTime(11, -1); 1669 } 1670 1671 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1672 public void test_atTime_int_int_minuteTooBig() { 1673 LocalDate t = LocalDate.of(2008, 6, 30); 1674 t.atTime(11, 60); 1675 } 1676 1677 @Test(groups={"tck"}) 1678 public void test_atTime_int_int_int() { 1679 LocalDate t = LocalDate.of(2008, 6, 30); 1680 assertEquals(t.atTime(11, 30, 40), LocalDateTime.of(2008, 6, 30, 11, 30, 40)); 1681 } 1682 1683 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1684 public void test_atTime_int_int_int_hourTooSmall() { 1685 LocalDate t = LocalDate.of(2008, 6, 30); 1686 t.atTime(-1, 30, 40); 1687 } 1688 1689 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1690 public void test_atTime_int_int_int_hourTooBig() { 1691 LocalDate t = LocalDate.of(2008, 6, 30); 1692 t.atTime(24, 30, 40); 1693 } 1694 1695 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1696 public void test_atTime_int_int_int_minuteTooSmall() { 1697 LocalDate t = LocalDate.of(2008, 6, 30); 1698 t.atTime(11, -1, 40); 1699 } 1700 1701 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1702 public void test_atTime_int_int_int_minuteTooBig() { 1703 LocalDate t = LocalDate.of(2008, 6, 30); 1704 t.atTime(11, 60, 40); 1705 } 1706 1707 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1708 public void test_atTime_int_int_int_secondTooSmall() { 1709 LocalDate t = LocalDate.of(2008, 6, 30); 1710 t.atTime(11, 30, -1); 1711 } 1712 1713 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1714 public void test_atTime_int_int_int_secondTooBig() { 1715 LocalDate t = LocalDate.of(2008, 6, 30); 1716 t.atTime(11, 30, 60); 1717 } 1718 1719 @Test(groups={"tck"}) 1720 public void test_atTime_int_int_int_int() { 1721 LocalDate t = LocalDate.of(2008, 6, 30); 1722 assertEquals(t.atTime(11, 30, 40, 50), LocalDateTime.of(2008, 6, 30, 11, 30, 40, 50)); 1723 } 1724 1725 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1726 public void test_atTime_int_int_int_int_hourTooSmall() { 1727 LocalDate t = LocalDate.of(2008, 6, 30); 1728 t.atTime(-1, 30, 40, 50); 1729 } 1730 1731 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1732 public void test_atTime_int_int_int_int_hourTooBig() { 1733 LocalDate t = LocalDate.of(2008, 6, 30); 1734 t.atTime(24, 30, 40, 50); 1735 } 1736 1737 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1738 public void test_atTime_int_int_int_int_minuteTooSmall() { 1739 LocalDate t = LocalDate.of(2008, 6, 30); 1740 t.atTime(11, -1, 40, 50); 1741 } 1742 1743 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1744 public void test_atTime_int_int_int_int_minuteTooBig() { 1745 LocalDate t = LocalDate.of(2008, 6, 30); 1746 t.atTime(11, 60, 40, 50); 1747 } 1748 1749 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1750 public void test_atTime_int_int_int_int_secondTooSmall() { 1751 LocalDate t = LocalDate.of(2008, 6, 30); 1752 t.atTime(11, 30, -1, 50); 1753 } 1754 1755 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1756 public void test_atTime_int_int_int_int_secondTooBig() { 1757 LocalDate t = LocalDate.of(2008, 6, 30); 1758 t.atTime(11, 30, 60, 50); 1759 } 1760 1761 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1762 public void test_atTime_int_int_int_int_nanoTooSmall() { 1763 LocalDate t = LocalDate.of(2008, 6, 30); 1764 t.atTime(11, 30, 40, -1); 1765 } 1766 1767 @Test(expectedExceptions=DateTimeException.class, groups={"tck"}) 1768 public void test_atTime_int_int_int_int_nanoTooBig() { 1769 LocalDate t = LocalDate.of(2008, 6, 30); 1770 t.atTime(11, 30, 40, 1000000000); 1771 } 1772 1773 //----------------------------------------------------------------------- 1774 // atOffset() 1775 //----------------------------------------------------------------------- 1776 @Test(groups={"tck"}) 1777 public void test_atOffset() { 1778 LocalDate t = LocalDate.of(2008, 6, 30); 1779 assertEquals(t.atOffset(OFFSET_PTWO), OffsetDate.of(LocalDate.of(2008, 6, 30), OFFSET_PTWO)); 1780 } 1781 1782 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1783 public void test_atOffset_nullZoneOffset() { 1784 LocalDate t = LocalDate.of(2008, 6, 30); 1785 t.atOffset((ZoneOffset) null); 1786 } 1787 1788 //----------------------------------------------------------------------- 1789 // atStartOfDay() 1790 //----------------------------------------------------------------------- 1791 @Test(groups={"tck"}) 1792 public void test_atStartOfDay() { 1793 LocalDate t = LocalDate.of(2008, 6, 30); 1794 assertEquals(t.atStartOfDay(ZONE_PARIS), 1795 ZonedDateTime.of(LocalDateTime.of(2008, 6, 30, 0, 0), ZONE_PARIS)); 1796 } 1797 1798 @Test(groups={"tck"}) 1799 public void test_atStartOfDay_dstGap() { 1800 LocalDate t = LocalDate.of(2007, 4, 1); 1801 assertEquals(t.atStartOfDay(ZONE_GAZA), 1802 ZonedDateTime.of(LocalDateTime.of(2007, 4, 1, 1, 0), ZONE_GAZA)); 1803 } 1804 1805 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1806 public void test_atStartOfDay_nullTimeZone() { 1807 LocalDate t = LocalDate.of(2008, 6, 30); 1808 t.atStartOfDay((ZoneId) null); 1809 } 1810 1811 //----------------------------------------------------------------------- 1812 // toEpochDay() 1813 //----------------------------------------------------------------------- 1814 @Test(groups={"tck"}) 1815 public void test_toEpochDay() { 1816 long date_0000_01_01 = -678941 - 40587; 1817 1818 LocalDate test = LocalDate.of(0, 1, 1); 1819 for (long i = date_0000_01_01; i < 700000; i++) { 1820 assertEquals(test.toEpochDay(), i); 1821 test = next(test); 1822 } 1823 test = LocalDate.of(0, 1, 1); 1824 for (long i = date_0000_01_01; i > -2000000; i--) { 1825 assertEquals(test.toEpochDay(), i); 1826 test = previous(test); 1827 } 1828 1829 assertEquals(LocalDate.of(1858, 11, 17).toEpochDay(), -40587); 1830 assertEquals(LocalDate.of(1, 1, 1).toEpochDay(), -678575 - 40587); 1831 assertEquals(LocalDate.of(1995, 9, 27).toEpochDay(), 49987 - 40587); 1832 assertEquals(LocalDate.of(1970, 1, 1).toEpochDay(), 0); 1833 assertEquals(LocalDate.of(-1, 12, 31).toEpochDay(), -678942 - 40587); 1834 } 1835 1836 //----------------------------------------------------------------------- 1837 // compareTo() 1838 //----------------------------------------------------------------------- 1839 @Test(groups={"tck"}) 1840 public void test_comparisons() { 1841 doTest_comparisons_LocalDate( 1842 LocalDate.of(Year.MIN_VALUE, 1, 1), 1843 LocalDate.of(Year.MIN_VALUE, 12, 31), 1844 LocalDate.of(-1, 1, 1), 1845 LocalDate.of(-1, 12, 31), 1846 LocalDate.of(0, 1, 1), 1847 LocalDate.of(0, 12, 31), 1848 LocalDate.of(1, 1, 1), 1849 LocalDate.of(1, 12, 31), 1850 LocalDate.of(2006, 1, 1), 1851 LocalDate.of(2006, 12, 31), 1852 LocalDate.of(2007, 1, 1), 1853 LocalDate.of(2007, 12, 31), 1854 LocalDate.of(2008, 1, 1), 1855 LocalDate.of(2008, 2, 29), 1856 LocalDate.of(2008, 12, 31), 1857 LocalDate.of(Year.MAX_VALUE, 1, 1), 1858 LocalDate.of(Year.MAX_VALUE, 12, 31) 1859 ); 1860 } 1861 1862 void doTest_comparisons_LocalDate(LocalDate... localDates) { 1863 for (int i = 0; i < localDates.length; i++) { 1864 LocalDate a = localDates[i]; 1865 for (int j = 0; j < localDates.length; j++) { 1866 LocalDate b = localDates[j]; 1867 if (i < j) { 1868 assertTrue(a.compareTo(b) < 0, a + " <=> " + b); 1869 assertEquals(a.isBefore(b), true, a + " <=> " + b); 1870 assertEquals(a.isAfter(b), false, a + " <=> " + b); 1871 assertEquals(a.equals(b), false, a + " <=> " + b); 1872 } else if (i > j) { 1873 assertTrue(a.compareTo(b) > 0, a + " <=> " + b); 1874 assertEquals(a.isBefore(b), false, a + " <=> " + b); 1875 assertEquals(a.isAfter(b), true, a + " <=> " + b); 1876 assertEquals(a.equals(b), false, a + " <=> " + b); 1877 } else { 1878 assertEquals(a.compareTo(b), 0, a + " <=> " + b); 1879 assertEquals(a.isBefore(b), false, a + " <=> " + b); 1880 assertEquals(a.isAfter(b), false, a + " <=> " + b); 1881 assertEquals(a.equals(b), true, a + " <=> " + b); 1882 } 1883 } 1884 } 1885 } 1886 1887 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1888 public void test_compareTo_ObjectNull() { 1889 TEST_2007_07_15.compareTo(null); 1890 } 1891 1892 @Test(groups={"tck"}) 1893 public void test_isBefore() { 1894 assertTrue(TEST_2007_07_15.isBefore(LocalDate.of(2007, 07, 16))); 1895 assertFalse(TEST_2007_07_15.isBefore(LocalDate.of(2007, 07, 14))); 1896 assertFalse(TEST_2007_07_15.isBefore(TEST_2007_07_15)); 1897 } 1898 1899 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1900 public void test_isBefore_ObjectNull() { 1901 TEST_2007_07_15.isBefore(null); 1902 } 1903 1904 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 1905 public void test_isAfter_ObjectNull() { 1906 TEST_2007_07_15.isAfter(null); 1907 } 1908 1909 @Test(groups={"tck"}) 1910 public void test_isAfter() { 1911 assertTrue(TEST_2007_07_15.isAfter(LocalDate.of(2007, 07, 14))); 1912 assertFalse(TEST_2007_07_15.isAfter(LocalDate.of(2007, 07, 16))); 1913 assertFalse(TEST_2007_07_15.isAfter(TEST_2007_07_15)); 1914 } 1915 1916 @Test(expectedExceptions=ClassCastException.class, groups={"tck"}) 1917 @SuppressWarnings({"unchecked", "rawtypes"}) 1918 public void compareToNonLocalDate() { 1919 Comparable c = TEST_2007_07_15; 1920 c.compareTo(new Object()); 1921 } 1922 1923 //----------------------------------------------------------------------- 1924 // equals() 1925 //----------------------------------------------------------------------- 1926 @Test(dataProvider="sampleDates" , groups={"tck"}) 1927 public void test_equals_true(int y, int m, int d) { 1928 LocalDate a = LocalDate.of(y, m, d); 1929 LocalDate b = LocalDate.of(y, m, d); 1930 assertEquals(a.equals(b), true); 1931 } 1932 @Test(dataProvider="sampleDates", groups={"tck"}) 1933 public void test_equals_false_year_differs(int y, int m, int d) { 1934 LocalDate a = LocalDate.of(y, m, d); 1935 LocalDate b = LocalDate.of(y + 1, m, d); 1936 assertEquals(a.equals(b), false); 1937 } 1938 @Test(dataProvider="sampleDates", groups={"tck"}) 1939 public void test_equals_false_month_differs(int y, int m, int d) { 1940 LocalDate a = LocalDate.of(y, m, d); 1941 LocalDate b = LocalDate.of(y, m + 1, d); 1942 assertEquals(a.equals(b), false); 1943 } 1944 @Test(dataProvider="sampleDates", groups={"tck"}) 1945 public void test_equals_false_day_differs(int y, int m, int d) { 1946 LocalDate a = LocalDate.of(y, m, d); 1947 LocalDate b = LocalDate.of(y, m, d + 1); 1948 assertEquals(a.equals(b), false); 1949 } 1950 1951 @Test(groups={"tck"}) 1952 public void test_equals_itself_true() { 1953 assertEquals(TEST_2007_07_15.equals(TEST_2007_07_15), true); 1954 } 1955 1956 @Test(groups={"tck"}) 1957 public void test_equals_string_false() { 1958 assertEquals(TEST_2007_07_15.equals("2007-07-15"), false); 1959 } 1960 1961 @Test(groups={"tck"}) 1962 public void test_equals_null_false() { 1963 assertEquals(TEST_2007_07_15.equals(null), false); 1964 } 1965 1966 //----------------------------------------------------------------------- 1967 // hashCode() 1968 //----------------------------------------------------------------------- 1969 @Test(dataProvider="sampleDates", groups={"tck"}) 1970 public void test_hashCode(int y, int m, int d) { 1971 LocalDate a = LocalDate.of(y, m, d); 1972 assertEquals(a.hashCode(), a.hashCode()); 1973 LocalDate b = LocalDate.of(y, m, d); 1974 assertEquals(a.hashCode(), b.hashCode()); 1975 } 1976 1977 //----------------------------------------------------------------------- 1978 // toString() 1979 //----------------------------------------------------------------------- 1980 @DataProvider(name="sampleToString") 1981 Object[][] provider_sampleToString() { 1982 return new Object[][] { 1983 {2008, 7, 5, "2008-07-05"}, 1984 {2007, 12, 31, "2007-12-31"}, 1985 {999, 12, 31, "0999-12-31"}, 1986 {-1, 1, 2, "-0001-01-02"}, 1987 {9999, 12, 31, "9999-12-31"}, 1988 {-9999, 12, 31, "-9999-12-31"}, 1989 {10000, 1, 1, "+10000-01-01"}, 1990 {-10000, 1, 1, "-10000-01-01"}, 1991 {12345678, 1, 1, "+12345678-01-01"}, 1992 {-12345678, 1, 1, "-12345678-01-01"}, 1993 }; 1994 } 1995 1996 @Test(dataProvider="sampleToString", groups={"tck"}) 1997 public void test_toString(int y, int m, int d, String expected) { 1998 LocalDate t = LocalDate.of(y, m, d); 1999 String str = t.toString(); 2000 assertEquals(str, expected); 2001 } 2002 2003 //----------------------------------------------------------------------- 2004 // toString(DateTimeFormatter) 2005 //----------------------------------------------------------------------- 2006 @Test(groups={"tck"}) 2007 public void test_toString_formatter() { 2008 DateTimeFormatter f = DateTimeFormatters.pattern("y M d"); 2009 String t = LocalDate.of(2010, 12, 3).toString(f); 2010 assertEquals(t, "2010 12 3"); 2011 } 2012 2013 @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) 2014 public void test_toString_formatter_null() { 2015 LocalDate.of(2010, 12, 3).toString(null); 2016 } 2017 2018 }