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.Instant;
204a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.LocalDate;
214a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.LocalTime;
224a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.ZoneId;
234a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.ZoneOffset;
244a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.ZonedDateTime;
254a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.ChronoZonedDateTime;
264a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.JapaneseChronology;
274a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.JapaneseDate;
284a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.chrono.JapaneseEra;
294a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport java.time.temporal.ChronoField;
304a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
314a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport static org.junit.Assert.assertEquals;
324a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerimport static org.junit.Assert.assertSame;
334a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
344a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer/**
354a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * Additional tests for {@link JapaneseChronology} and {@link JapaneseDate}.
364a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer *
374a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer * @see tck.java.time.chrono.TCKJapaneseChronology
384a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer */
394a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauerpublic class JapaneseChronologyTest {
404a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
414a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    @Test
424a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    public void test_zonedDateTime() {
434a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        ZonedDateTime zonedDateTime = ZonedDateTime
444a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer                .of(2017, 4, 1, 15, 14, 13, 12, ZoneId.of("Europe/London"));
454a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
464a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        ChronoZonedDateTime<JapaneseDate> result = JapaneseChronology.INSTANCE
474a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer                .zonedDateTime(zonedDateTime.toInstant(), zonedDateTime.getZone());
484a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(JapaneseDate.of(JapaneseEra.HEISEI, 29, 4, 1), result.toLocalDate());
494a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(LocalTime.of(15, 14, 13, 12), result.toLocalTime());
504a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(ZoneOffset.ofHours(1), result.getOffset());
514a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    }
524a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
534a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    @Test(expected = NullPointerException.class)
544a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    public void test_zonedDateTime_nullInstant() {
554a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        JapaneseChronology.INSTANCE.zonedDateTime(null, ZoneOffset.UTC);
564a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    }
574a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
584a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    @Test(expected = NullPointerException.class)
594a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    public void test_zonedDateTime_nullZone() {
604a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        JapaneseChronology.INSTANCE.zonedDateTime(Instant.EPOCH, null);
614a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    }
624a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
634a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    @Test
644a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    public void test_JapaneseDate_getChronology() {
654a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertSame(JapaneseChronology.INSTANCE, JapaneseDate.now().getChronology());
664a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    }
674a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
684a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    @Test
694a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    public void test_JapaneseDate_getEra() {
704a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        // pick the first january of the second year of each era, except for Meiji, because the
714a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        // first supported year in JapaneseChronology is Meiji 6.
724a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(JapaneseEra.MEIJI, JapaneseDate.from(LocalDate.of(1873, 1, 1)).getEra());
734a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(JapaneseEra.TAISHO, JapaneseDate.from(LocalDate.of(1913, 1, 1)).getEra());
744a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(JapaneseEra.SHOWA, JapaneseDate.from(LocalDate.of(1927, 1, 1)).getEra());
754a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(JapaneseEra.HEISEI, JapaneseDate.from(LocalDate.of(1990, 1, 1)).getEra());
764a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    }
774a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer
784a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    @Test
794a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    public void test_JapaneseDate_isSupported_TemporalField() {
804a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        JapaneseDate date = JapaneseDate.now();
814a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        // all date based fields, except for the aligned week ones are supported.
824a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH));
834a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR));
844a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.ALIGNED_WEEK_OF_MONTH));
854a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.ALIGNED_WEEK_OF_YEAR));
864a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.AMPM_OF_DAY));
874a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.CLOCK_HOUR_OF_AMPM));
884a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.CLOCK_HOUR_OF_DAY));
894a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.DAY_OF_MONTH));
904a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.DAY_OF_WEEK));
914a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.DAY_OF_YEAR));
924a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.EPOCH_DAY));
934a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.ERA));
944a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.HOUR_OF_AMPM));
954a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.HOUR_OF_DAY));
964a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.INSTANT_SECONDS));
974a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.MICRO_OF_DAY));
984a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.MICRO_OF_SECOND));
994a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.MILLI_OF_DAY));
1004a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.MILLI_OF_SECOND));
1014a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.MINUTE_OF_DAY));
1024a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.MINUTE_OF_HOUR));
1034a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.MONTH_OF_YEAR));
1044a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.NANO_OF_DAY));
1054a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.NANO_OF_SECOND));
1064a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.OFFSET_SECONDS));
1074a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.PROLEPTIC_MONTH));
1084a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.SECOND_OF_DAY));
1094a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(false, date.isSupported(ChronoField.SECOND_OF_MINUTE));
1104a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.YEAR));
1114a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer        assertEquals(true, date.isSupported(ChronoField.YEAR_OF_ERA));
1124a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer    }
1134a29794d136843c8a0fe71ad79be0e5dc45a7596Joachim Sauer}
114