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