14a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer/* 24a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * Copyright (C) 2017 The Android Open Source Project 34a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * 44a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * Licensed under the Apache License, Version 2.0 (the "License"); 54a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * you may not use this file except in compliance with the License. 64a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * You may obtain a copy of the License at 74a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * 84a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * http://www.apache.org/licenses/LICENSE-2.0 94a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * 104a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * Unless required by applicable law or agreed to in writing, software 114a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * distributed under the License is distributed on an "AS IS" BASIS, 124a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * See the License for the specific language governing permissions and 144a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * limitations under the License. 154a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer */ 164a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerpackage libcore.java.time.chrono; 174a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 184a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport org.junit.Test; 194a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.LocalDate; 204a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.ThaiBuddhistDate; 214a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.ThaiBuddhistChronology; 224a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.ThaiBuddhistEra; 234a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.temporal.ChronoField; 244a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.temporal.ValueRange; 254a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 264a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport static org.junit.Assert.assertEquals; 274a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport static org.junit.Assert.assertSame; 284a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 294a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer/** 304a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * Additional tests for {@link ThaiBuddhistDate}. 314a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * 324a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * @see tck.java.time.chrono.TCKThaiBuddhistChronology 334a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer */ 344a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerpublic class ThaiBuddhistChronologyTest { 354a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 364a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // year 2543 in Thai Buddhist calendar is 2000 in ISO calendar. 374a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer private static final int YEARS_AHEAD = 543; 384a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 394a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer @Test 404a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer public void test_range() { 414a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer for (ChronoField field : ChronoField.values()) { 424a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ValueRange expected; 434a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer switch (field) { 444a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer case PROLEPTIC_MONTH: 454a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // Proleptic month values are shifted by YEARS_AHEAD * 12. 464a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer expected = ValueRange.of( 474a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ChronoField.PROLEPTIC_MONTH.range().getMinimum() + YEARS_AHEAD * 12L, 484a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ChronoField.PROLEPTIC_MONTH.range().getMaximum() + YEARS_AHEAD * 12L); 494a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer break; 504a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer case YEAR_OF_ERA: 514a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // range for era BE is 1..<yearRange.max - OFFSET> 524a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // range for era before BE is 1..<-yearRange.min + 1 + OFFSET> 534a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer expected = ValueRange 544a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer .of(1, -ChronoField.YEAR.range().getMinimum() + 1 - YEARS_AHEAD, 554a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ChronoField.YEAR.range().getMaximum() + YEARS_AHEAD); 564a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer break; 574a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer case YEAR: 584a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // Proleptic year values are shifted by YEAR. 594a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer expected = ValueRange.of(ChronoField.YEAR.range().getMinimum() + YEARS_AHEAD, 604a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ChronoField.YEAR.range().getMaximum() + YEARS_AHEAD); 614a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer break; 624a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer default: 634a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // All other fields have the same ranges as ISO. 644a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer expected = field.range(); 654a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer break; 664a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 674a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals("Range of " + field, expected, 684a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistChronology.INSTANCE.range(field)); 694a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 704a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 714a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 724a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer @Test 734a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer public void test_ThaiBuddhistDate_getChronology() { 744a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertSame(ThaiBuddhistChronology.INSTANCE, ThaiBuddhistDate.now().getChronology()); 754a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 764a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 774a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer @Test 784a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer public void test_ThaiBuddhistDate_getEra() { 794a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(ThaiBuddhistEra.BEFORE_BE, ThaiBuddhistDate.of(-1, 1, 1).getEra()); 804a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(ThaiBuddhistEra.BE, ThaiBuddhistDate.of(1, 1, 1).getEra()); 814a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 824a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 834a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer @Test 844a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer public void test_ThaiBuddhistDate_range() { 854a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate dates[] = new ThaiBuddhistDate[] { 864a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.from(LocalDate.of(2000, 2, 1)), //February of a leap year 874a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.from(LocalDate.of(2001, 2, 1)), //February of a non-leap year 884a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.of(1, 2, 3), 894a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.of(4, 5, 6), 904a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.of(-7, 8, 9) 914a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer }; 924a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 934a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer for (ThaiBuddhistDate date : dates) { 944a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // only these three ChronoFields and YEAR_OF_ERA (below) have date-dependent ranges. 954a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(LocalDate.from(date).range(ChronoField.DAY_OF_MONTH), 964a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer date.range(ChronoField.DAY_OF_MONTH)); 974a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(LocalDate.from(date).range(ChronoField.DAY_OF_YEAR), 984a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer date.range(ChronoField.DAY_OF_YEAR)); 994a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(LocalDate.from(date).range(ChronoField.ALIGNED_WEEK_OF_MONTH), 1004a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer date.range(ChronoField.ALIGNED_WEEK_OF_MONTH)); 1014a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 1024a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 1034a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 1044a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer @Test 1054a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer public void test_ThaiBuddhistDate_range_yeaOfEra() { 1064a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer // YEAR_OF_ERA is the big difference to a LocalDate, all other ranges are the same. 1074a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(ValueRange.of(1, ChronoField.YEAR.range().getMaximum() + YEARS_AHEAD), 1084a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.of(1, 1, 1).range(ChronoField.YEAR_OF_ERA)); 1094a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(ValueRange.of(1, -ChronoField.YEAR.range().getMinimum() + 1 - YEARS_AHEAD), 1104a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate.of(-1, 1, 1).range(ChronoField.YEAR_OF_ERA)); 1114a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 1124a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer 1134a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer @Test 1144a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer public void test_ThaiBuddhistDate_getLong() { 1154a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer ThaiBuddhistDate date = ThaiBuddhistDate.of(10, 2, 5); 1164a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(10, date.getLong(ChronoField.YEAR_OF_ERA)); 1174a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(10, date.getLong(ChronoField.YEAR)); 1184a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(2, date.getLong(ChronoField.MONTH_OF_YEAR)); 1194a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(10 * 12 + 2 - 1, date.getLong(ChronoField.PROLEPTIC_MONTH)); 1204a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(5, date.getLong(ChronoField.DAY_OF_MONTH)); 1214a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(31 + 5, date.getLong(ChronoField.DAY_OF_YEAR)); 1224a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer assertEquals(date.toEpochDay(), date.getLong(ChronoField.EPOCH_DAY)); 1234a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer } 1244a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer} 125