1c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/*
2c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
5c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is free software; you can redistribute it and/or modify it
6c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * under the terms of the GNU General Public License version 2 only, as
7c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * published by the Free Software Foundation.  Oracle designates this
8c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * particular file as subject to the "Classpath" exception as provided
9c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * by Oracle in the LICENSE file that accompanied this code.
10c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
11c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is distributed in the hope that it will be useful, but WITHOUT
12c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * version 2 for more details (a copy is included in the LICENSE file that
15c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * accompanied this code).
16c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
17c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * You should have received a copy of the GNU General Public License version
18c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 2 along with this work; if not, write to the Free Software Foundation,
19c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
21c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * or visit www.oracle.com if you need additional information or have any
23c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * questions.
24c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
25c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
26c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/*
27c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
28c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
29c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * All rights reserved.
30c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
31c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Redistribution and use in source and binary forms, with or without
32c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * modification, are permitted provided that the following conditions are met:
33c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
34c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *  * Redistributions of source code must retain the above copyright notice,
35c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    this list of conditions and the following disclaimer.
36c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
37c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *  * Redistributions in binary form must reproduce the above copyright notice,
38c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    this list of conditions and the following disclaimer in the documentation
39c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    and/or other materials provided with the distribution.
40c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
41c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *  * Neither the name of JSR-310 nor the names of its contributors
42c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    may be used to endorse or promote products derived from this software
43c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    without specific prior written permission.
44c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
45c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
46c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
47c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
48c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
49c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
50c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
51c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
52c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
53c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
54c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
55c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
57c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpackage tck.java.time.chrono;
58c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
59c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.DAY_OF_MONTH;
60c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.DAY_OF_YEAR;
61c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.MONTH_OF_YEAR;
62c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.YEAR;
63c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.YEAR_OF_ERA;
64c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertEquals;
65c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertFalse;
66c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertNotEquals;
67c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertTrue;
68c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.fail;
69c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
70c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Clock;
71c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.DateTimeException;
72c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalDate;
73c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalDateTime;
74c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Month;
75c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Year;
76c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.ZoneId;
77c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.ZoneOffset;
78c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ChronoLocalDate;
79c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ChronoPeriod;
80c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.Chronology;
81c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.Era;
82c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.IsoChronology;
83c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.MinguoChronology;
84c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.MinguoDate;
85c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ThaiBuddhistChronology;
86c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ThaiBuddhistDate;
87c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.ThaiBuddhistEra;
88c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.format.ResolverStyle;
89c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ChronoField;
90c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ChronoUnit;
91c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalAdjusters;
92c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalField;
93c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ValueRange;
94c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.HashMap;
95c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.List;
96c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Locale;
97c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Map;
98c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
99c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.Assert;
100c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.DataProvider;
101c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.Test;
102c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
103c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/**
104c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Test.
105c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
106c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer@Test
107c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpublic class TCKThaiBuddhistChronology {
108c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
109c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    private static final int YDIFF = 543;
110c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
111c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
112c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // Chronology.of(String)
113c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
114c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
115c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_chrono_byName() {
116c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Chronology c = ThaiBuddhistChronology.INSTANCE;
117c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Chronology test = Chronology.of("ThaiBuddhist");
118c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertNotNull(test, "The ThaiBuddhist calendar could not be found byName");
119c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test.getId(), "ThaiBuddhist", "ID mismatch");
120c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test.getCalendarType(), "buddhist", "Type mismatch");
121c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test, c);
122c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
123c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
124c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
125c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // Chronology.ofLocale(Locale)
126c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
127c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
128c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_chrono_byLocale_fullTag_thaiCalendarFromThai() {
129c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Chronology test = Chronology.ofLocale(Locale.forLanguageTag("th-TH-u-ca-buddhist"));
130c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test.getId(), "ThaiBuddhist");
131c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test, ThaiBuddhistChronology.INSTANCE);
132c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
133c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
134c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
135c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_chrono_byLocale_fullTag_thaiCalendarFromElsewhere() {
136c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Chronology test = Chronology.ofLocale(Locale.forLanguageTag("en-US-u-ca-buddhist"));
137c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test.getId(), "ThaiBuddhist");
138c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test, ThaiBuddhistChronology.INSTANCE);
139c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
140c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
141c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
142c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_chrono_byLocale_oldTH_noVariant() {  // deliberately different to Calendar
143c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Chronology test = Chronology.ofLocale(new Locale("th", "TH"));
144c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test.getId(), "ISO");
145c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test, IsoChronology.INSTANCE);
146c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
147c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
148c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
149c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_chrono_byLocale_oldTH_variant() {
150c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Chronology test = Chronology.ofLocale(new Locale("th", "TH", "TH"));
151c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test.getId(), "ISO");
152c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(test, IsoChronology.INSTANCE);
153c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
154c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
155c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
156c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_chrono_byLocale_iso() {
157c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(Chronology.ofLocale(new Locale("th", "TH")).getId(), "ISO");
158c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(Chronology.ofLocale(Locale.forLanguageTag("th-TH")).getId(), "ISO");
159c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Assert.assertEquals(Chronology.ofLocale(Locale.forLanguageTag("th-TH-TH")).getId(), "ISO");
160c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
161c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
162c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
163c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // creation, toLocalDate()
164c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
165c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="samples")
166c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_samples() {
167c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
168c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(1 + YDIFF, 1, 1), LocalDate.of(1, 1, 1)},
169c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(1 + YDIFF, 1, 2), LocalDate.of(1, 1, 2)},
170c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(1 + YDIFF, 1, 3), LocalDate.of(1, 1, 3)},
171c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
172c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(2 + YDIFF, 1, 1), LocalDate.of(2, 1, 1)},
173c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(3 + YDIFF, 1, 1), LocalDate.of(3, 1, 1)},
174c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(3 + YDIFF, 12, 6), LocalDate.of(3, 12, 6)},
175c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(4 + YDIFF, 1, 1), LocalDate.of(4, 1, 1)},
176c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(4 + YDIFF, 7, 3), LocalDate.of(4, 7, 3)},
177c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(4 + YDIFF, 7, 4), LocalDate.of(4, 7, 4)},
178c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(5 + YDIFF, 1, 1), LocalDate.of(5, 1, 1)},
179c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(1662 + YDIFF, 3, 3), LocalDate.of(1662, 3, 3)},
180c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(1728 + YDIFF, 10, 28), LocalDate.of(1728, 10, 28)},
181c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(1728 + YDIFF, 10, 29), LocalDate.of(1728, 10, 29)},
182c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(2555, 8, 29), LocalDate.of(2012, 8, 29)},
183c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
184c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(4 + YDIFF, 60), LocalDate.of(4, 2, 29)},
185c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(400 + YDIFF, 60), LocalDate.of(400, 2, 29)},
186c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(2000 + YDIFF, 60), LocalDate.of(2000, 2, 29)},
187c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
188c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(ThaiBuddhistEra.BE, 1916 + YDIFF, 60), LocalDate.of(1916, 2, 29)},
189c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(ThaiBuddhistEra.BEFORE_BE, -1907 - YDIFF, 60), LocalDate.of(1908, 2, 29)},
190c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(ThaiBuddhistEra.BE, 2000 + YDIFF, 60), LocalDate.of(2000, 2, 29)},
191c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.dateYearDay(ThaiBuddhistEra.BE, 2400 + YDIFF, 60), LocalDate.of(2400, 2, 29)},
192c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
193c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(ThaiBuddhistEra.BE, 1916 + YDIFF, 2, 29 ), LocalDate.of(1916, 2, 29)},
194c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(ThaiBuddhistEra.BEFORE_BE, -1907 - YDIFF, 2, 29), LocalDate.of(1908, 2, 29)},
195c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(ThaiBuddhistEra.BE, 2000 + YDIFF, 2, 29), LocalDate.of(2000, 2, 29)},
196c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(ThaiBuddhistEra.BE, 2400 + YDIFF, 2, 29), LocalDate.of(2400, 2, 29)},
197c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
198c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
199c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
200c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="samples")
201c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_toLocalDate(ThaiBuddhistDate jdate, LocalDate iso) {
202c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(LocalDate.from(jdate), iso);
203c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
204c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
205c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="samples")
206c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_fromCalendrical(ThaiBuddhistDate jdate, LocalDate iso) {
207c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.date(iso), jdate);
208c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistDate.from(iso), jdate);
209c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
210c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
211c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="samples")
212c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isEqual(ThaiBuddhistDate jdate, LocalDate iso) {
213c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertTrue(jdate.isEqual(iso));
214c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
215c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
216c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="samples")
217c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_date_equals(ThaiBuddhistDate jdate, LocalDate iso) {
218c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertFalse(jdate.equals(iso));
219c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertNotEquals(jdate.hashCode(), iso.hashCode());
220c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
221c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
222c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
223c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_dateNow(){
224c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistDate.now()) ;
225c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistDate.now(ZoneId.systemDefault())) ;
226c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistDate.now(Clock.systemDefaultZone())) ;
227c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistDate.now(Clock.systemDefaultZone().getZone())) ;
228c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
229c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistChronology.INSTANCE.dateNow(ZoneId.systemDefault())) ;
230c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistChronology.INSTANCE.dateNow(Clock.systemDefaultZone())) ;
231c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(), ThaiBuddhistChronology.INSTANCE.dateNow(Clock.systemDefaultZone().getZone())) ;
232c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
233c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ZoneId zoneId = ZoneId.of("Europe/Paris");
234c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(zoneId), ThaiBuddhistChronology.INSTANCE.dateNow(Clock.system(zoneId))) ;
235c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(zoneId), ThaiBuddhistChronology.INSTANCE.dateNow(Clock.system(zoneId).getZone())) ;
236c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(zoneId), ThaiBuddhistDate.now(Clock.system(zoneId))) ;
237c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(zoneId), ThaiBuddhistDate.now(Clock.system(zoneId).getZone())) ;
238c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
239c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.dateNow(ZoneId.of(ZoneOffset.UTC.getId())), ThaiBuddhistChronology.INSTANCE.dateNow(Clock.systemUTC())) ;
240c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
241c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
242c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="badDates")
243c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_badDates() {
244c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
245c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 0, 0},
246c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
247c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, -1, 1},
248c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 0, 1},
249c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 14, 1},
250c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 15, 1},
251c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
252c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 1, -1},
253c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 1, 0},
254c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 1, 32},
255c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
256c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 12, -1},
257c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 12, 0},
258c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1728, 12, 32},
259c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
260c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {3 + YDIFF, 2, 29},
261c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {600 + YDIFF, 2, 29},
262c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1501 + YDIFF, 2, 29},
263c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
264c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
265c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
266c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="badDates", expectedExceptions=DateTimeException.class)
267c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_badDates(int year, int month, int dom) {
268c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistChronology.INSTANCE.date(year, month, dom);
269c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
270c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
271c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
272c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // prolepticYear() and is LeapYear()
273c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
274c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="prolepticYear")
275c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_prolepticYear() {
276c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
277c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, 4 + YDIFF, 4 + YDIFF, true},
278c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, 7 + YDIFF, 7 + YDIFF, false},
279c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, 8 + YDIFF, 8 + YDIFF, true},
280c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, 1000 + YDIFF, 1000 + YDIFF, false},
281c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, 2000 + YDIFF, 2000 + YDIFF, true},
282c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, 0, 0, false},
283c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, -4 + YDIFF, -4 + YDIFF, true},
284c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, -7 + YDIFF, -7 + YDIFF, false},
285c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, -100 + YDIFF, -100 + YDIFF, false},
286c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {1, ThaiBuddhistEra.BE, -800 + YDIFF, -800 + YDIFF, true},
287c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
288c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, -3 - YDIFF, 4 + YDIFF, true},
289c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, -6 - YDIFF, 7 + YDIFF, false},
290c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, -7 - YDIFF, 8 + YDIFF, true},
291c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, -999 - YDIFF, 1000 + YDIFF, false},
292c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, -1999 - YDIFF, 2000 + YDIFF, true},
293c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, 1, 0, false},
294c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, 5 - YDIFF, -4 + YDIFF, true},
295c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, 8 - YDIFF, -7 + YDIFF, false},
296c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, 101 - YDIFF, -100 + YDIFF, false},
297c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, ThaiBuddhistEra.BEFORE_BE, 801 - YDIFF, -800 + YDIFF, true},
298c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
299c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
300c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
301c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
302c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="prolepticYear")
303c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_prolepticYear(int eraValue, Era  era, int yearOfEra, int expectedProlepticYear, boolean isLeapYear) {
304c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Era eraObj = ThaiBuddhistChronology.INSTANCE.eraOf(eraValue);
305c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertTrue(ThaiBuddhistChronology.INSTANCE.eras().contains(eraObj));
306c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(eraObj, era);
307c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.prolepticYear(era, yearOfEra), expectedProlepticYear);
308c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
309c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
310c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="prolepticYear")
311c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isLeapYear(int eraValue, Era  era, int yearOfEra, int expectedProlepticYear, boolean isLeapYear) {
312c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.isLeapYear(expectedProlepticYear), isLeapYear) ;
313c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.isLeapYear(expectedProlepticYear), Year.of(expectedProlepticYear - YDIFF).isLeap());
314c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
315c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate jdate = ThaiBuddhistDate.now();
316c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        jdate = jdate.with(ChronoField.YEAR, expectedProlepticYear).with(ChronoField.MONTH_OF_YEAR, 2);
317c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (isLeapYear) {
318c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(jdate.lengthOfMonth(), 29);
319c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
320c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(jdate.lengthOfMonth(), 28);
321c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
322c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
323c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
324c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
325c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // Bad Era for Chronology.date(era,...) and Chronology.prolepticYear(Era,...)
326c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
327c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
328c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_InvalidEras() {
329c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        // Verify that the eras from every other Chronology are invalid
330c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        for (Chronology chrono : Chronology.getAvailableChronologies()) {
331c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            if (chrono instanceof ThaiBuddhistChronology) {
332c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                continue;
333c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
334c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            List<Era> eras = chrono.eras();
335c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            for (Era era : eras) {
336c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                try {
337c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    ChronoLocalDate date = ThaiBuddhistChronology.INSTANCE.date(era, 1, 1, 1);
338c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    fail("ThaiBuddhistChronology.date did not throw ClassCastException for Era: " + era);
339c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                } catch (ClassCastException cex) {
340c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    ; // ignore expected exception
341c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                }
342c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
343c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                /* TODO: Test for missing ThaiBuddhistDate.of(Era, y, m, d) method.
344c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                try {
345c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    @SuppressWarnings("unused")
346c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    ThaiBuddhistDate jdate = ThaiBuddhistDate.of(era, 1, 1, 1);
347c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    fail("ThaiBuddhistDate.of did not throw ClassCastException for Era: " + era);
348c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                } catch (ClassCastException cex) {
349c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    ; // ignore expected exception
350c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                }
351c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                */
352c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
353c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                try {
354c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    @SuppressWarnings("unused")
355c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    int year = ThaiBuddhistChronology.INSTANCE.prolepticYear(era, 1);
356c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    fail("ThaiBuddhistChronology.prolepticYear did not throw ClassCastException for Era: " + era);
357c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                } catch (ClassCastException cex) {
358c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    ; // ignore expected exception
359c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                }            }
360c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
361c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
362c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
363c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
364c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // with(WithAdjuster)
365c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
366c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
367c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjust1() {
368c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(1728, 10, 29);
369c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(TemporalAdjusters.lastDayOfMonth());
370c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(1728, 10, 31));
371c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
372c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
373c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
374c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjust2() {
375c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(1728, 12, 2);
376c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(TemporalAdjusters.lastDayOfMonth());
377c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(1728, 12, 31));
378c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
379c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
380c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
381c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // withYear()
382c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
383c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
384c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withYear_BE() {
385c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(2555, 8, 29);
386c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(YEAR, 2554);
387c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(2554, 8, 29));
388c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
389c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
390c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
391c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withYear_BBE() {
392c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(-2554, 8, 29);
393c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(YEAR_OF_ERA, 2554);
394c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(-2553, 8, 29));
395c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
396c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
397c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
398c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // withEra()
399c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
400c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
401c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withEra_BE() {
402c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(2555, 8, 29);
403c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(ChronoField.ERA, ThaiBuddhistEra.BE.getValue());
404c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(2555, 8, 29));
405c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
406c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
407c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
408c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withEra_BBE() {
409c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(-2554, 8, 29);
410c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(ChronoField.ERA, ThaiBuddhistEra.BEFORE_BE.getValue());
411c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(-2554, 8, 29));
412c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
413c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
414c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
415c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withEra_swap() {
416c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate base = ThaiBuddhistChronology.INSTANCE.date(-2554, 8, 29);
417c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = base.with(ChronoField.ERA, ThaiBuddhistEra.BE.getValue());
418c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(2555, 8, 29));
419c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
420c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
421c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
422c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // BuddhistDate.with(Local*)
423c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
424c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
425c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjust_toLocalDate() {
426c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate jdate = ThaiBuddhistChronology.INSTANCE.date(1726, 1, 4);
427c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate test = jdate.with(LocalDate.of(2012, 7, 6));
428c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, ThaiBuddhistChronology.INSTANCE.date(2555, 7, 6));
429c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
430c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
431c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
432c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjust_toMonth() {
433c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate jdate = ThaiBuddhistChronology.INSTANCE.date(1726, 1, 4);
434c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        jdate.with(Month.APRIL);
435c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
436c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
437c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
438c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // LocalDate.with(BuddhistDate)
439c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
440c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
441c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_LocalDate_adjustToBuddhistDate() {
442c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate jdate = ThaiBuddhistChronology.INSTANCE.date(2555, 10, 29);
443c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDate test = LocalDate.MIN.with(jdate);
444c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, LocalDate.of(2012, 10, 29));
445c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
446c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
447c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
448c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_LocalDateTime_adjustToBuddhistDate() {
449c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate jdate = ThaiBuddhistChronology.INSTANCE.date(2555, 10, 29);
450c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDateTime test = LocalDateTime.MIN.with(jdate);
451c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, LocalDateTime.of(2012, 10, 29, 0, 0));
452c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
453c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
454c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
455c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // PeriodUntil()
456c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
457c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
458c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_periodUntilDate() {
459c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate mdate1 = ThaiBuddhistDate.of(1, 1, 1);
460c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate mdate2 = ThaiBuddhistDate.of(2, 2, 2);
461c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ChronoPeriod period = mdate1.until(mdate2);
462c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(period, ThaiBuddhistChronology.INSTANCE.period(1, 1, 1));
463c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
464c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
465c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
466c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_periodUntilUnit() {
467c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate mdate1 = ThaiBuddhistDate.of(1, 1, 1);
468c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate mdate2 = ThaiBuddhistDate.of(2, 2, 2);
469c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long months = mdate1.until(mdate2, ChronoUnit.MONTHS);
470c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(months, 13);
471c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
472c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
473c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
474c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_periodUntilDiffChrono() {
475c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate mdate1 = ThaiBuddhistDate.of(1, 1, 1);
476c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate mdate2 = ThaiBuddhistDate.of(2, 2, 2);
477c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        MinguoDate ldate2 = MinguoChronology.INSTANCE.date(mdate2);
478c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ChronoPeriod period = mdate1.until(ldate2);
479c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(period, ThaiBuddhistChronology.INSTANCE.period(1, 1, 1));
480c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
481c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
482c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
483c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // toString()
484c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
485c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="toString")
486c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_toString() {
487c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
488c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(544, 1, 1), "ThaiBuddhist BE 544-01-01"},
489c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(2271, 10, 28), "ThaiBuddhist BE 2271-10-28"},
490c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(2271, 10, 29), "ThaiBuddhist BE 2271-10-29"},
491c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(2270, 12, 5), "ThaiBuddhist BE 2270-12-05"},
492c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {ThaiBuddhistChronology.INSTANCE.date(2270, 12, 6), "ThaiBuddhist BE 2270-12-06"},
493c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
494c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
495c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
496c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="toString")
497c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_toString(ThaiBuddhistDate jdate, String expected) {
498c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(jdate.toString(), expected);
499c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
500c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
501c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
502c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // chronology range(ChronoField)
503c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
504c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
505c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_Chrono_range() {
506c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long minYear = LocalDate.MIN.getYear() + YDIFF;
507c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long maxYear = LocalDate.MAX.getYear() + YDIFF;
508c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.range(YEAR), ValueRange.of(minYear, maxYear));
509c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.range(YEAR_OF_ERA), ValueRange.of(1, -minYear + 1, maxYear));
510c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
511c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.range(DAY_OF_MONTH), DAY_OF_MONTH.range());
512c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.range(DAY_OF_YEAR), DAY_OF_YEAR.range());
513c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(ThaiBuddhistChronology.INSTANCE.range(MONTH_OF_YEAR), MONTH_OF_YEAR.range());
514c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
515c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
516c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
517c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // equals()
518c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
519c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
520c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_equals_true() {
521c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertTrue(ThaiBuddhistChronology.INSTANCE.equals(ThaiBuddhistChronology.INSTANCE));
522c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
523c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
524c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
525c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_equals_false() {
526c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertFalse(ThaiBuddhistChronology.INSTANCE.equals(IsoChronology.INSTANCE));
527c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
528c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
529c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
530c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
531c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name = "resolve_yearOfEra")
532c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_resolve_yearOfEra() {
533c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
534c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // era only
535c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, -1, null, null, null, null},
536c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, -1, null, null, null, null},
537c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, -1, null, null, null, null},
538c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
539c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, 0, null, null, ChronoField.ERA, 0},
540c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, 0, null, null, ChronoField.ERA, 0},
541c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, 0, null, null, ChronoField.ERA, 0},
542c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
543c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, 1, null, null, ChronoField.ERA, 1},
544c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, 1, null, null, ChronoField.ERA, 1},
545c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, 1, null, null, ChronoField.ERA, 1},
546c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
547c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, 2, null, null, null, null},
548c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, 2, null, null, null, null},
549c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, 2, null, null, null, null},
550c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
551c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // era and year-of-era
552c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, -1, 2012, null, null, null},
553c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, -1, 2012, null, null, null},
554c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, -1, 2012, null, null, null},
555c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
556c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, 0, 2012, null, ChronoField.YEAR, -2011},
557c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, 0, 2012, null, ChronoField.YEAR, -2011},
558c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, 0, 2012, null, ChronoField.YEAR, -2011},
559c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
560c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, 1, 2012, null, ChronoField.YEAR, 2012},
561c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, 1, 2012, null, ChronoField.YEAR, 2012},
562c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, 1, 2012, null, ChronoField.YEAR, 2012},
563c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
564c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, 2, 2012, null, null, null},
565c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, 2, 2012, null, null, null},
566c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, 2, 2012, null, null, null},
567c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
568c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // year-of-era only
569c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, null, 2012, null, ChronoField.YEAR_OF_ERA, 2012},
570c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, null, 2012, null, ChronoField.YEAR, 2012},
571c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, null, 2012, null, ChronoField.YEAR, 2012},
572c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
573c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, null, Integer.MAX_VALUE, null, null, null},
574c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, null, Integer.MAX_VALUE, null, null, null},
575c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, null, Integer.MAX_VALUE, null, ChronoField.YEAR, Integer.MAX_VALUE},
576c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
577c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // year-of-era and year
578c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, null, 2012, 2012, ChronoField.YEAR, 2012},
579c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, null, 2012, 2012, ChronoField.YEAR, 2012},
580c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, null, 2012, 2012, ChronoField.YEAR, 2012},
581c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
582c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, null, 2012, -2011, ChronoField.YEAR, -2011},
583c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, null, 2012, -2011, ChronoField.YEAR, -2011},
584c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, null, 2012, -2011, ChronoField.YEAR, -2011},
585c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
586c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, null, 2012, 2013, null, null},
587c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, null, 2012, 2013, null, null},
588c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, null, 2012, 2013, null, null},
589c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
590c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.STRICT, null, 2012, -2013, null, null},
591c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.SMART, null, 2012, -2013, null, null},
592c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ResolverStyle.LENIENT, null, 2012, -2013, null, null},
593c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
594c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
595c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
596c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_yearOfEra")
597c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_yearOfEra(ResolverStyle style, Integer e, Integer yoe, Integer y, ChronoField field, Integer expected) {
598c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
599c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (e != null) {
600c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            fieldValues.put(ChronoField.ERA, (long) e);
601c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
602c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (yoe != null) {
603c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            fieldValues.put(ChronoField.YEAR_OF_ERA, (long) yoe);
604c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
605c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (y != null) {
606c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            fieldValues.put(ChronoField.YEAR, (long) y);
607c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
608c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (field != null) {
609c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, style);
610c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, null);
611c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.get(field), (Long) expected.longValue());
612c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 1);
613c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
614c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
615c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, style);
616c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
617c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
618c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
619c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
620c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
621c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
622c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
623c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
624c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
625c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name = "resolve_ymd")
626c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_resolve_ymd() {
627c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
628c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, -365, date(YDIFF + 2010, 12, 31), false, false},
629c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, -364, date(YDIFF + 2011, 1, 1), false, false},
630c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, -31, date(YDIFF + 2011, 11, 30), false, false},
631c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, -30, date(YDIFF + 2011, 12, 1), false, false},
632c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, -12, date(YDIFF + 2011, 12, 19), false, false},
633c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, date(YDIFF + 2012, 1, 1), true, true},
634c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 27, date(YDIFF + 2012, 1, 27), true, true},
635c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 28, date(YDIFF + 2012, 1, 28), true, true},
636c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 29, date(YDIFF + 2012, 1, 29), true, true},
637c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 30, date(YDIFF + 2012, 1, 30), true, true},
638c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 31, date(YDIFF + 2012, 1, 31), true, true},
639c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 59, date(YDIFF + 2012, 2, 28), false, false},
640c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 60, date(YDIFF + 2012, 2, 29), false, false},
641c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 61, date(YDIFF + 2012, 3, 1), false, false},
642c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 365, date(YDIFF + 2012, 12, 30), false, false},
643c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 366, date(YDIFF + 2012, 12, 31), false, false},
644c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 367, date(YDIFF + 2013, 1, 1), false, false},
645c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 367 + 364, date(YDIFF + 2013, 12, 31), false, false},
646c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 367 + 365, date(YDIFF + 2014, 1, 1), false, false},
647c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
648c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 1, date(YDIFF + 2012, 2, 1), true, true},
649c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 28, date(YDIFF + 2012, 2, 28), true, true},
650c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 29, date(YDIFF + 2012, 2, 29), true, true},
651c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 30, date(YDIFF + 2012, 3, 1), date(YDIFF + 2012, 2, 29), false},
652c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 31, date(YDIFF + 2012, 3, 2), date(YDIFF + 2012, 2, 29), false},
653c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 32, date(YDIFF + 2012, 3, 3), false, false},
654c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
655c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -12, 1, date(YDIFF + 2010, 12, 1), false, false},
656c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -11, 1, date(YDIFF + 2011, 1, 1), false, false},
657c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -1, 1, date(YDIFF + 2011, 11, 1), false, false},
658c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 0, 1, date(YDIFF + 2011, 12, 1), false, false},
659c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, date(YDIFF + 2012, 1, 1), true, true},
660c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 1, date(YDIFF + 2012, 12, 1), true, true},
661c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 13, 1, date(YDIFF + 2013, 1, 1), false, false},
662c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 24, 1, date(YDIFF + 2013, 12, 1), false, false},
663c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 25, 1, date(YDIFF + 2014, 1, 1), false, false},
664c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
665c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, -31, date(YDIFF + 2012, 4, 30), false, false},
666c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, -30, date(YDIFF + 2012, 5, 1), false, false},
667c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, -1, date(YDIFF + 2012, 5, 30), false, false},
668c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, 0, date(YDIFF + 2012, 5, 31), false, false},
669c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, 1, date(YDIFF + 2012, 6, 1), true, true},
670c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, 30, date(YDIFF + 2012, 6, 30), true, true},
671c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, 31, date(YDIFF + 2012, 7, 1), date(YDIFF + 2012, 6, 30), false},
672c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, 61, date(YDIFF + 2012, 7, 31), false, false},
673c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 6, 62, date(YDIFF + 2012, 8, 1), false, false},
674c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
675c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 1, date(YDIFF + 2011, 2, 1), true, true},
676c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 28, date(YDIFF + 2011, 2, 28), true, true},
677c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 29, date(YDIFF + 2011, 3, 1), date(YDIFF + 2011, 2, 28), false},
678c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 30, date(YDIFF + 2011, 3, 2), date(YDIFF + 2011, 2, 28), false},
679c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 31, date(YDIFF + 2011, 3, 3), date(YDIFF + 2011, 2, 28), false},
680c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 32, date(YDIFF + 2011, 3, 4), false, false},
681c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
682c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
683c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
684c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_ymd")
685c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_ymd_lenient(int y, int m, int d, ThaiBuddhistDate expected, Object smart, boolean strict) {
686c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
687c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
688c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m);
689c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d);
690c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT);
691c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(date, expected);
692c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(fieldValues.size(), 0);
693c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
694c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
695c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_ymd")
696c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_ymd_smart(int y, int m, int d, ThaiBuddhistDate expected, Object smart, boolean strict) {
697c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
698c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
699c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m);
700c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d);
701c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (Boolean.TRUE.equals(smart)) {
702c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
703c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, expected);
704c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 0);
705c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else if (smart instanceof ThaiBuddhistDate) {
706c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
707c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, smart);
708c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
709c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
710c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
711c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
712c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
713c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
714c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
715c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
716c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
717c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
718c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_ymd")
719c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_ymd_strict(int y, int m, int d, ThaiBuddhistDate expected, Object smart, boolean strict) {
720c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
721c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
722c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m);
723c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.DAY_OF_MONTH, (long) d);
724c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (strict) {
725c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT);
726c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, expected);
727c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 0);
728c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
729c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
730c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT);
731c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
732c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
733c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
734c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
735c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
736c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
737c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
738c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
739c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
740c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name = "resolve_yd")
741c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_resolve_yd() {
742c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
743c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -365, date(YDIFF + 2010, 12, 31), false, false},
744c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -364, date(YDIFF + 2011, 1, 1), false, false},
745c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -31, date(YDIFF + 2011, 11, 30), false, false},
746c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -30, date(YDIFF + 2011, 12, 1), false, false},
747c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -12, date(YDIFF + 2011, 12, 19), false, false},
748c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -1, date(YDIFF + 2011, 12, 30), false, false},
749c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 0, date(YDIFF + 2011, 12, 31), false, false},
750c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, date(YDIFF + 2012, 1, 1), true, true},
751c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, date(YDIFF + 2012, 1, 2), true, true},
752c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 31, date(YDIFF + 2012, 1, 31), true, true},
753c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 32, date(YDIFF + 2012, 2, 1), true, true},
754c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 59, date(YDIFF + 2012, 2, 28), true, true},
755c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 60, date(YDIFF + 2012, 2, 29), true, true},
756c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 61, date(YDIFF + 2012, 3, 1), true, true},
757c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 365, date(YDIFF + 2012, 12, 30), true, true},
758c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 366, date(YDIFF + 2012, 12, 31), true, true},
759c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 367, date(YDIFF + 2013, 1, 1), false, false},
760c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 367 + 364, date(YDIFF + 2013, 12, 31), false, false},
761c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 367 + 365, date(YDIFF + 2014, 1, 1), false, false},
762c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
763c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 59, date(YDIFF + 2011, 2, 28), true, true},
764c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 60, date(YDIFF + 2011, 3, 1), true, true},
765c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
766c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
767c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
768c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_yd")
769c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_yd_lenient(int y, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) {
770c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
771c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
772c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d);
773c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT);
774c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(date, expected);
775c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(fieldValues.size(), 0);
776c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
777c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
778c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_yd")
779c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_yd_smart(int y, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) {
780c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
781c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
782c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d);
783c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (smart) {
784c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
785c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, expected);
786c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 0);
787c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
788c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
789c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
790c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
791c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
792c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
793c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
794c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
795c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
796c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
797c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_yd")
798c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_yd_strict(int y, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) {
799c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
800c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
801c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.DAY_OF_YEAR, (long) d);
802c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (strict) {
803c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT);
804c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, expected);
805c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 0);
806c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
807c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
808c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT);
809c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
810c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
811c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
812c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
813c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
814c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
815c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
816c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
817c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
818c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name = "resolve_ymaa")
819c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_resolve_ymaa() {
820c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
821c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, -365, date(YDIFF + 2010, 12, 31), false, false},
822c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, -364, date(YDIFF + 2011, 1, 1), false, false},
823c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, -31, date(YDIFF + 2011, 11, 30), false, false},
824c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, -30, date(YDIFF + 2011, 12, 1), false, false},
825c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, -12, date(YDIFF + 2011, 12, 19), false, false},
826c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 1, date(YDIFF + 2012, 1, 1), true, true},
827c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 59, date(YDIFF + 2012, 2, 28), false, false},
828c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 60, date(YDIFF + 2012, 2, 29), false, false},
829c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 61, date(YDIFF + 2012, 3, 1), false, false},
830c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 365, date(YDIFF + 2012, 12, 30), false, false},
831c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 366, date(YDIFF + 2012, 12, 31), false, false},
832c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 367, date(YDIFF + 2013, 1, 1), false, false},
833c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 367 + 364, date(YDIFF + 2013, 12, 31), false, false},
834c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 367 + 365, date(YDIFF + 2014, 1, 1), false, false},
835c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
836c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 0, 1, date(YDIFF + 2012, 1, 25), false, false},
837c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 0, 7, date(YDIFF + 2012, 1, 31), false, false},
838c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 1, 1, date(YDIFF + 2012, 2, 1), true, true},
839c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 1, 7, date(YDIFF + 2012, 2, 7), true, true},
840c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 2, 1, date(YDIFF + 2012, 2, 8), true, true},
841c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 2, 7, date(YDIFF + 2012, 2, 14), true, true},
842c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 3, 1, date(YDIFF + 2012, 2, 15), true, true},
843c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 3, 7, date(YDIFF + 2012, 2, 21), true, true},
844c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 4, 1, date(YDIFF + 2012, 2, 22), true, true},
845c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 4, 7, date(YDIFF + 2012, 2, 28), true, true},
846c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 5, 1, date(YDIFF + 2012, 2, 29), true, true},
847c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 5, 2, date(YDIFF + 2012, 3, 1), true, false},
848c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 5, 7, date(YDIFF + 2012, 3, 6), true, false},
849c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 6, 1, date(YDIFF + 2012, 3, 7), false, false},
850c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 2, 6, 7, date(YDIFF + 2012, 3, 13), false, false},
851c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
852c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 1, 1, date(YDIFF + 2012, 12, 1), true, true},
853c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 5, 1, date(YDIFF + 2012, 12, 29), true, true},
854c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 5, 2, date(YDIFF + 2012, 12, 30), true, true},
855c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 5, 3, date(YDIFF + 2012, 12, 31), true, true},
856c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 5, 4, date(YDIFF + 2013, 1, 1), true, false},
857c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 5, 7, date(YDIFF + 2013, 1, 4), true, false},
858c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
859c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -12, 1, 1, date(YDIFF + 2010, 12, 1), false, false},
860c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -11, 1, 1, date(YDIFF + 2011, 1, 1), false, false},
861c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, -1, 1, 1, date(YDIFF + 2011, 11, 1), false, false},
862c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 0, 1, 1, date(YDIFF + 2011, 12, 1), false, false},
863c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 1, 1, 1, date(YDIFF + 2012, 1, 1), true, true},
864c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 12, 1, 1, date(YDIFF + 2012, 12, 1), true, true},
865c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 13, 1, 1, date(YDIFF + 2013, 1, 1), false, false},
866c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 24, 1, 1, date(YDIFF + 2013, 12, 1), false, false},
867c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2012, 25, 1, 1, date(YDIFF + 2014, 1, 1), false, false},
868c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
869c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 1, 1, date(YDIFF + 2011, 2, 1), true, true},
870c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 4, 7, date(YDIFF + 2011, 2, 28), true, true},
871c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YDIFF + 2011, 2, 5, 1, date(YDIFF + 2011, 3, 1), true, false},
872c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
873c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
874c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
875c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_ymaa")
876c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_ymaa_lenient(int y, int m, int w, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) {
877c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
878c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
879c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m);
880c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w);
881c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d);
882c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.LENIENT);
883c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(date, expected);
884c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(fieldValues.size(), 0);
885c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
886c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
887c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_ymaa")
888c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_ymaa_smart(int y, int m, int w, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) {
889c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
890c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
891c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m);
892c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w);
893c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d);
894c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (smart) {
895c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
896c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, expected);
897c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 0);
898c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
899c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
900c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.SMART);
901c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
902c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
903c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
904c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
905c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
906c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
907c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
908c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider = "resolve_ymaa")
909c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_resolve_ymaa_strict(int y, int m, int w, int d, ThaiBuddhistDate expected, boolean smart, boolean strict) {
910c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Map<TemporalField, Long> fieldValues = new HashMap<>();
911c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.YEAR, (long) y);
912c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.MONTH_OF_YEAR, (long) m);
913c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.ALIGNED_WEEK_OF_MONTH, (long) w);
914c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        fieldValues.put(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH, (long) d);
915c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (strict) {
916c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ThaiBuddhistDate date = ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT);
917c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(date, expected);
918c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(fieldValues.size(), 0);
919c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
920c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
921c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                ThaiBuddhistChronology.INSTANCE.resolveDate(fieldValues, ResolverStyle.STRICT);
922c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail("Should have failed");
923c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
924c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
925c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
926c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
927c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
928c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
929c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
930c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    private static ThaiBuddhistDate date(int y, int m, int d) {
931c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return ThaiBuddhistDate.of(y, m, d);
932c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
933c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
934c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer}
935