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.
8c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
9c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is distributed in the hope that it will be useful, but WITHOUT
10c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * version 2 for more details (a copy is included in the LICENSE file that
13c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * accompanied this code).
14c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
15c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * You should have received a copy of the GNU General Public License version
16c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 2 along with this work; if not, write to the Free Software Foundation,
17c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
19c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * or visit www.oracle.com if you need additional information or have any
21c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * questions.
22c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
23c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
24c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/*
25c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This file is available under and governed by the GNU General Public
26c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * License version 2 only, as published by the Free Software Foundation.
27c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * However, the following notice accompanied the original version of this
28c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * file:
29c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
30c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
31c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
32c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * All rights reserved.
33c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
34c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Redistribution and use in source and binary forms, with or without
35c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * modification, are permitted provided that the following conditions are met:
36c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
37c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *  * Redistributions of source code must retain the above copyright notice,
38c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    this list of conditions and the following disclaimer.
39c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
40c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *  * Redistributions in binary form must reproduce the above copyright notice,
41c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    this list of conditions and the following disclaimer in the documentation
42c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    and/or other materials provided with the distribution.
43c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
44c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *  * Neither the name of JSR-310 nor the names of its contributors
45c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    may be used to endorse or promote products derived from this software
46c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *    without specific prior written permission.
47c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
48c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
49c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
50c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
51c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
52c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
53c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
54c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
55c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
56c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
57c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
58c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
59c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
60c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpackage tck.java.time;
61c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
62c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.ERA;
63c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.MONTH_OF_YEAR;
64c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.PROLEPTIC_MONTH;
65c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.YEAR;
66c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoField.YEAR_OF_ERA;
67c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.CENTURIES;
68c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.DAYS;
69c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.DECADES;
70c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.HOURS;
71c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.MILLENNIA;
72c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.MONTHS;
73c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static java.time.temporal.ChronoUnit.YEARS;
74c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertEquals;
75c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.assertTrue;
76c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport static org.testng.Assert.fail;
77c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
78c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.io.ByteArrayOutputStream;
79c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.io.DataOutputStream;
80c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.io.IOException;
81c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Clock;
82c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.DateTimeException;
83c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Duration;
84c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Instant;
85c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalDate;
86c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalDateTime;
87c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.LocalTime;
88c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Month;
89c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Period;
90c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.Year;
91c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.YearMonth;
92c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.ZoneId;
93c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.ZoneOffset;
94c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.chrono.IsoChronology;
95c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.format.DateTimeFormatter;
96c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.format.DateTimeParseException;
97c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ChronoField;
98c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.ChronoUnit;
99c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.JulianFields;
100c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalAccessor;
101c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalAmount;
102c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalField;
103c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalQueries;
104c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalQuery;
105c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.TemporalUnit;
106c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.time.temporal.UnsupportedTemporalTypeException;
107c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.ArrayList;
108c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Arrays;
109c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.HashSet;
110c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.List;
111c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Set;
112c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
113986666b60bfe25276fc3a8e5e4b6ce96d94b58b7Joachim Sauerimport org.testng.annotations.BeforeClass;
114c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.DataProvider;
115c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport org.testng.annotations.Test;
116c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
117c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/**
118c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Test YearMonth.
119c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
120c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer@Test
121c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpublic class TCKYearMonth extends AbstractDateTimeTest {
122c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1236975f84c2ed72e1e26d20190b6f318718c849008Tobias Thierer    // Android-changed: This was originally non-static and initialized in @BeforeMethod,
124986666b60bfe25276fc3a8e5e4b6ce96d94b58b7Joachim Sauer    // but @BeforeMethod is run after @DataProvider methods are run, so it only worked by accident,
125986666b60bfe25276fc3a8e5e4b6ce96d94b58b7Joachim Sauer    // since multiple test methods were run and the first one did not require this value.
126986666b60bfe25276fc3a8e5e4b6ce96d94b58b7Joachim Sauer    private static YearMonth TEST_2008_06;
127c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
128986666b60bfe25276fc3a8e5e4b6ce96d94b58b7Joachim Sauer    @BeforeClass
129986666b60bfe25276fc3a8e5e4b6ce96d94b58b7Joachim Sauer    public static void setUp() {
130c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06 = YearMonth.of(2008, 6);
131c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
132c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
133c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
134c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Override
135c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    protected List<TemporalAccessor> samples() {
136c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TemporalAccessor[] array = {TEST_2008_06, };
137c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return Arrays.asList(array);
138c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
139c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
140c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Override
141c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    protected List<TemporalField> validFields() {
142c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TemporalField[] array = {
143c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            MONTH_OF_YEAR,
144c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            PROLEPTIC_MONTH,
145c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YEAR_OF_ERA,
146c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YEAR,
147c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            ERA,
148c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
149c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return Arrays.asList(array);
150c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
151c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
152c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Override
153c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    protected List<TemporalField> invalidFields() {
154c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        List<TemporalField> list = new ArrayList<>(Arrays.<TemporalField>asList(ChronoField.values()));
155c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        list.removeAll(validFields());
156c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        list.add(JulianFields.JULIAN_DAY);
157c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        list.add(JulianFields.MODIFIED_JULIAN_DAY);
158c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        list.add(JulianFields.RATA_DIE);
159c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return list;
160c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
161c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
162c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
163c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    void check(YearMonth test, int y, int m) {
164c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.getYear(), y);
165c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.getMonth().getValue(), m);
166c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
167c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
168c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
169c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // now()
170c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
171c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
172c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void now() {
173c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth expected = YearMonth.now(Clock.systemDefaultZone());
174c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.now();
175c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        for (int i = 0; i < 100; i++) {
176c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            if (expected.equals(test)) {
177c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                return;
178c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
179c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            expected = YearMonth.now(Clock.systemDefaultZone());
180c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            test = YearMonth.now();
181c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
182c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, expected);
183c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
184c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
185c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
186c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // now(ZoneId)
187c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
188c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
189c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void now_ZoneId_nullZoneId() {
190c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.now((ZoneId) null);
191c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
192c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
193c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
194c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void now_ZoneId() {
195c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        ZoneId zone = ZoneId.of("UTC+01:02:03");
196c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth expected = YearMonth.now(Clock.system(zone));
197c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.now(zone);
198c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        for (int i = 0; i < 100; i++) {
199c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            if (expected.equals(test)) {
200c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                return;
201c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
202c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            expected = YearMonth.now(Clock.system(zone));
203c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            test = YearMonth.now(zone);
204c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
205c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, expected);
206c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
207c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
208c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
209c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // now(Clock)
210c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
211c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
212c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void now_Clock() {
213c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Instant instant = LocalDateTime.of(2010, 12, 31, 0, 0).toInstant(ZoneOffset.UTC);
214c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Clock clock = Clock.fixed(instant, ZoneOffset.UTC);
215c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.now(clock);
216c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.getYear(), 2010);
217c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.getMonth(), Month.DECEMBER);
218c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
219c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
220c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
221c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void now_Clock_nullClock() {
222c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.now((Clock) null);
223c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
224c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
225c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
226c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
227c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_intsMonth() {
228c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, Month.FEBRUARY);
229c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        check(test, 2008, 2);
230c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
231c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
232c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
233c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_factory_intsMonth_yearTooLow() {
234c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(Year.MIN_VALUE - 1, Month.JANUARY);
235c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
236c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
237c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
238c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_factory_intsMonth_dayTooHigh() {
239c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(Year.MAX_VALUE + 1, Month.JANUARY);
240c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
241c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
242c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
243c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_intsMonth_nullMonth() {
244c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(2008, null);
245c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
246c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
247c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
248c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
249c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_ints() {
250c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 2);
251c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        check(test, 2008, 2);
252c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
253c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
254c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
255c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_factory_ints_yearTooLow() {
256c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(Year.MIN_VALUE - 1, 2);
257c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
258c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
259c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
260c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_factory_ints_dayTooHigh() {
261c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(Year.MAX_VALUE + 1, 2);
262c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
263c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
264c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
265c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_factory_ints_monthTooLow() {
266c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(2008, 0);
267c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
268c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
269c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
270c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_factory_ints_monthTooHigh() {
271c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(2008, 13);
272c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
273c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
274c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
275c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
276c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_from_TemporalAccessor() {
277c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(YearMonth.from(LocalDate.of(2007, 7, 15)), YearMonth.of(2007, 7));
278c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
279c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
280c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
281c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_from_TemporalAccessor_invalid_noDerive() {
282c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.from(LocalTime.of(12, 30));
283c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
284c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
285c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
286c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_from_TemporalAccessor_null() {
287c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.from((TemporalAccessor) null);
288c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
289c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
290c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
291c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // parse()
292c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
293c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="goodParseData")
294c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] provider_goodParseData() {
295c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
296c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"0000-01", YearMonth.of(0, 1)},
297c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"0000-12", YearMonth.of(0, 12)},
298c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"9999-12", YearMonth.of(9999, 12)},
299c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-01", YearMonth.of(2000, 1)},
300c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-02", YearMonth.of(2000, 2)},
301c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-03", YearMonth.of(2000, 3)},
302c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-04", YearMonth.of(2000, 4)},
303c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-05", YearMonth.of(2000, 5)},
304c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-06", YearMonth.of(2000, 6)},
305c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-07", YearMonth.of(2000, 7)},
306c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-08", YearMonth.of(2000, 8)},
307c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-09", YearMonth.of(2000, 9)},
308c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-10", YearMonth.of(2000, 10)},
309c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-11", YearMonth.of(2000, 11)},
310c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2000-12", YearMonth.of(2000, 12)},
311c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
312c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+12345678-03", YearMonth.of(12345678, 3)},
313c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+123456-03", YearMonth.of(123456, 3)},
314c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"0000-03", YearMonth.of(0, 3)},
315c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"-1234-03", YearMonth.of(-1234, 3)},
316c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"-12345678-03", YearMonth.of(-12345678, 3)},
317c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
318c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+" + Year.MAX_VALUE + "-03", YearMonth.of(Year.MAX_VALUE, 3)},
319c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {Year.MIN_VALUE + "-03", YearMonth.of(Year.MIN_VALUE, 3)},
320c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
321c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
322c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
323c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="goodParseData")
324c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_success(String text, YearMonth expected) {
325c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth yearMonth = YearMonth.parse(text);
326c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(yearMonth, expected);
327c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
328c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
329c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
330c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="badParseData")
331c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] provider_badParseData() {
332c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
333c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"", 0},
334c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"-00", 1},
335c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"--01-0", 1},
336c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"A01-3", 0},
337c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"200-01", 0},
338c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"2009/12", 4},
339c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
340c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"-0000-10", 0},
341c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"-12345678901-10", 11},
342c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+1-10", 1},
343c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+12-10", 1},
344c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+123-10", 1},
345c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+1234-10", 0},
346c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"12345-10", 0},
347c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {"+12345678901-10", 11},
348c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
349c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
350c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
351c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="badParseData", expectedExceptions=DateTimeParseException.class)
352c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_fail(String text, int pos) {
353c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        try {
354c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.parse(text);
355c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            fail(String.format("Parse should have failed for %s at position %d", text, pos));
356c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } catch (DateTimeParseException ex) {
357c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(ex.getParsedString(), text);
358c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(ex.getErrorIndex(), pos);
359c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            throw ex;
360c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
361c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
362c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
363c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
364c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeParseException.class)
365c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_illegalValue_Month() {
366c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.parse("2008-13");
367c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
368c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
369c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
370c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_nullText() {
371c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.parse(null);
372c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
373c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
374c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
375c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // parse(DateTimeFormatter)
376c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
377c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
378c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_formatter() {
379c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        DateTimeFormatter f = DateTimeFormatter.ofPattern("y M");
380c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.parse("2010 12", f);
381c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test, YearMonth.of(2010, 12));
382c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
383c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
384c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
385c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_formatter_nullText() {
386c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        DateTimeFormatter f = DateTimeFormatter.ofPattern("y M");
387c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.parse((String) null, f);
388c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
389c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
390c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
391c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void factory_parse_formatter_nullFormatter() {
392c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.parse("ANY", null);
393c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
394c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
395c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
396c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // isSupported(TemporalField)
397c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
398c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
399c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isSupported_TemporalField() {
400c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported((TemporalField) null), false);
401c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.NANO_OF_SECOND), false);
402c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.NANO_OF_DAY), false);
403c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MICRO_OF_SECOND), false);
404c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MICRO_OF_DAY), false);
405c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MILLI_OF_SECOND), false);
406c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MILLI_OF_DAY), false);
407c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.SECOND_OF_MINUTE), false);
408c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.SECOND_OF_DAY), false);
409c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MINUTE_OF_HOUR), false);
410c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MINUTE_OF_DAY), false);
411c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.HOUR_OF_AMPM), false);
412c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.CLOCK_HOUR_OF_AMPM), false);
413c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.HOUR_OF_DAY), false);
414c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.CLOCK_HOUR_OF_DAY), false);
415c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.AMPM_OF_DAY), false);
416c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.DAY_OF_WEEK), false);
417c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH), false);
418c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR), false);
419c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.DAY_OF_MONTH), false);
420c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.DAY_OF_YEAR), false);
421c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.EPOCH_DAY), false);
422c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.ALIGNED_WEEK_OF_MONTH), false);
423c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.ALIGNED_WEEK_OF_YEAR), false);
424c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.MONTH_OF_YEAR), true);
425c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.PROLEPTIC_MONTH), true);
426c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.YEAR), true);
427c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.YEAR_OF_ERA), true);
428c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.ERA), true);
429c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.INSTANT_SECONDS), false);
430c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoField.OFFSET_SECONDS), false);
431c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
432c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
433c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
434c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // isSupported(TemporalUnit)
435c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
436c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
437c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isSupported_TemporalUnit() {
438c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported((TemporalUnit) null), false);
439c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.NANOS), false);
440c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.MICROS), false);
441c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.MILLIS), false);
442c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.SECONDS), false);
443c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.MINUTES), false);
444c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.HOURS), false);
445c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.HALF_DAYS), false);
446c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.DAYS), false);
447c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.WEEKS), false);
448c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.MONTHS), true);
449c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.YEARS), true);
450c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.DECADES), true);
451c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.CENTURIES), true);
452c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.MILLENNIA), true);
453c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.ERAS), true);
454c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.isSupported(ChronoUnit.FOREVER), false);
455c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
456c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
457c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
458c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // get(TemporalField)
459c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
460c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
461c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_get_TemporalField() {
462c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.get(YEAR), 2008);
463c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.get(MONTH_OF_YEAR), 6);
464c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.get(YEAR_OF_ERA), 2008);
465c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.get(ERA), 1);
466c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
467c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
468c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
469c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_getLong_TemporalField() {
470c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.getLong(YEAR), 2008);
471c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.getLong(MONTH_OF_YEAR), 6);
472c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.getLong(YEAR_OF_ERA), 2008);
473c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.getLong(ERA), 1);
474c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.getLong(PROLEPTIC_MONTH), 2008 * 12 + 6 - 1);
475c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
476c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
477c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
478c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // query(TemporalQuery)
479c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
480c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="query")
481c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_query() {
482c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
483c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.chronology(), IsoChronology.INSTANCE},
484c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.zoneId(), null},
485c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.precision(), ChronoUnit.MONTHS},
486c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.zone(), null},
487c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.offset(), null},
488c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.localDate(), null},
489c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {TEST_2008_06, TemporalQueries.localTime(), null},
490c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
491c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
492c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
493c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="query")
494c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public <T> void test_query(TemporalAccessor temporal, TemporalQuery<T> query, T expected) {
495c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(temporal.query(query), expected);
496c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
497c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
498c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="query")
499c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public <T> void test_queryFrom(TemporalAccessor temporal, TemporalQuery<T> query, T expected) {
500c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(query.queryFrom(temporal), expected);
501c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
502c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
503c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
504c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_query_null() {
505c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.query(null);
506c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
507c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
508c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
509c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // get*()
510c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
511c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="sampleDates")
512c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] provider_sampleDates() {
513c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
514c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {2008, 1},
515c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {2008, 2},
516c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {-1, 3},
517c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, 12},
518c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
519c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
520c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
521c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="sampleDates")
522c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_get(int y, int m) {
523c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth a = YearMonth.of(y, m);
524c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.getYear(), y);
525c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.getMonth(), Month.of(m));
526c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.getMonthValue(), m);
527c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
528c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
529c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
530c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // with(Year)
531c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
532c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
533c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_with_Year() {
534c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
535c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.with(Year.of(2000)), YearMonth.of(2000, 6));
536c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
537c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
538c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
539c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_with_Year_noChange_equal() {
540c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
541c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.with(Year.of(2008)), test);
542c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
543c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
544c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
545c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_with_Year_null() {
546c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
547c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.with((Year) null);
548c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
549c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
550c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
551c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // with(Month)
552c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
553c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
554c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_with_Month() {
555c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
556c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.with(Month.JANUARY), YearMonth.of(2008, 1));
557c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
558c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
559c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
560c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_with_Month_noChange_equal() {
561c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
562c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.with(Month.JUNE), test);
563c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
564c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
565c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
566c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_with_Month_null() {
567c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
568c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.with((Month) null);
569c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
570c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
571c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
572c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // withYear()
573c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
574c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
575c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withYear() {
576c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
577c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.withYear(1999), YearMonth.of(1999, 6));
578c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
579c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
580c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
581c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withYear_int_noChange_equal() {
582c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
583c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.withYear(2008), test);
584c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
585c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
586c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
587c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withYear_tooLow() {
588c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
589c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.withYear(Year.MIN_VALUE - 1);
590c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
591c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
592c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
593c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withYear_tooHigh() {
594c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
595c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.withYear(Year.MAX_VALUE + 1);
596c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
597c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
598c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
599c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // withMonth()
600c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
601c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
602c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withMonth() {
603c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
604c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.withMonth(1), YearMonth.of(2008, 1));
605c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
606c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
607c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
608c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withMonth_int_noChange_equal() {
609c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
610c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.withMonth(6), test);
611c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
612c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
613c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
614c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withMonth_tooLow() {
615c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
616c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.withMonth(0);
617c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
618c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
619c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
620c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_withMonth_tooHigh() {
621c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
622c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.withMonth(13);
623c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
624c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
625c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
626c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // plusYears()
627c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
628c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
629c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long() {
630c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
631c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusYears(1), YearMonth.of(2009, 6));
632c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
633c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
634c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
635c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_noChange_equal() {
636c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
637c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusYears(0), test);
638c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
639c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
640c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
641c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_negative() {
642c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
643c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusYears(-1), YearMonth.of(2007, 6));
644c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
645c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
646c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
647c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_big() {
648c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(-40, 6);
649c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusYears(20L + Year.MAX_VALUE), YearMonth.of((int) (-40L + 20L + Year.MAX_VALUE), 6));
650c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
651c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
652c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
653c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_invalidTooLarge() {
654c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 6);
655c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusYears(1);
656c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
657c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
658c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
659c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_invalidTooLargeMaxAddMax() {
660c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
661c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusYears(Long.MAX_VALUE);
662c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
663c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
664c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
665c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_invalidTooLargeMaxAddMin() {
666c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
667c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusYears(Long.MIN_VALUE);
668c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
669c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
670c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
671c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusYears_long_invalidTooSmall() {
672c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MIN_VALUE, 6);
673c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusYears(-1);
674c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
675c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
676c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
677c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // plusMonths()
678c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
679c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
680c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long() {
681c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
682c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusMonths(1), YearMonth.of(2008, 7));
683c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
684c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
685c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
686c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_noChange_equal() {
687c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
688c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusMonths(0), test);
689c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
690c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
691c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
692c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_overYears() {
693c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
694c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusMonths(7), YearMonth.of(2009, 1));
695c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
696c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
697c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
698c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_negative() {
699c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
700c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusMonths(-1), YearMonth.of(2008, 5));
701c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
702c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
703c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
704c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_negativeOverYear() {
705c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
706c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusMonths(-6), YearMonth.of(2007, 12));
707c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
708c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
709c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
710c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_big() {
711c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(-40, 6);
712c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long months = 20L + Integer.MAX_VALUE;
713c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.plusMonths(months), YearMonth.of((int) (-40L + months / 12), 6 + (int) (months % 12)));
714c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
715c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
716c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions={DateTimeException.class})
717c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_invalidTooLarge() {
718c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
719c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusMonths(1);
720c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
721c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
722c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
723c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_invalidTooLargeMaxAddMax() {
724c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
725c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusMonths(Long.MAX_VALUE);
726c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
727c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
728c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
729c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_invalidTooLargeMaxAddMin() {
730c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
731c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusMonths(Long.MIN_VALUE);
732c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
733c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
734c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions={DateTimeException.class})
735c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plusMonths_long_invalidTooSmall() {
736c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MIN_VALUE, 1);
737c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.plusMonths(-1);
738c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
739c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
740c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
741c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // plus(long, TemporalUnit)
742c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
743c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="plus_long_TemporalUnit")
744c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_plus_long_TemporalUnit() {
745c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
746c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 1, ChronoUnit.YEARS, YearMonth.of(2, 10), null},
747c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), -12, ChronoUnit.YEARS, YearMonth.of(-11, 10), null},
748c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 0, ChronoUnit.YEARS, YearMonth.of(1, 10), null},
749c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), 0, ChronoUnit.YEARS, YearMonth.of(999999999, 12), null},
750c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), 0, ChronoUnit.YEARS, YearMonth.of(-999999999, 1), null},
751c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 1), -999999999, ChronoUnit.YEARS, YearMonth.of(-999999999, 1), null},
752c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 12), 999999999, ChronoUnit.YEARS, YearMonth.of(999999999, 12), null},
753c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
754c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 1, ChronoUnit.MONTHS, YearMonth.of(1, 11), null},
755c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), -12, ChronoUnit.MONTHS, YearMonth.of(0, 10), null},
756c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 0, ChronoUnit.MONTHS, YearMonth.of(1, 10), null},
757c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), 0, ChronoUnit.MONTHS, YearMonth.of(999999999, 12), null},
758c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), 0, ChronoUnit.MONTHS, YearMonth.of(-999999999, 1), null},
759c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 2), -1, ChronoUnit.MONTHS, YearMonth.of(-999999999, 1), null},
760c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 3), 9, ChronoUnit.MONTHS, YearMonth.of(999999999, 12), null},
761c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
762c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-1, 10), 1, ChronoUnit.ERAS, YearMonth.of(2, 10), null},
763c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(5, 10), 1, ChronoUnit.CENTURIES, YearMonth.of(105, 10), null},
764c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(5, 10), 1, ChronoUnit.DECADES, YearMonth.of(15, 10), null},
765c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
766c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), 1, ChronoUnit.MONTHS, null, DateTimeException.class},
767c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), -1, ChronoUnit.MONTHS, null, DateTimeException.class},
768c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
769c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), 0, ChronoUnit.DAYS, null, DateTimeException.class},
770c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), 0, ChronoUnit.WEEKS, null, DateTimeException.class},
771c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
772c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
773c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
774c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="plus_long_TemporalUnit")
775c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plus_long_TemporalUnit(YearMonth base, long amount, TemporalUnit unit, YearMonth expectedYearMonth, Class<?> expectedEx) {
776c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (expectedEx == null) {
777c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(base.plus(amount, unit), expectedYearMonth);
778c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
779c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
780c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                YearMonth result = base.plus(amount, unit);
781c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail();
782c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (Exception ex) {
783c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                assertTrue(expectedEx.isInstance(ex));
784c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
785c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
786c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
787c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
788c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
789c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // plus(TemporalAmount)
790c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
791c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="plus_TemporalAmount")
792c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_plus_TemporalAmount() {
793c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
794c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(1), YearMonth.of(2, 1), null},
795c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(-12), YearMonth.of(-11, 1), null},
796c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(0), YearMonth.of(1, 1), null},
797c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), Period.ofYears(0), YearMonth.of(999999999, 12), null},
798c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), Period.ofYears(0), YearMonth.of(-999999999, 1), null},
799c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 1), Period.ofYears(-999999999), YearMonth.of(-999999999, 1), null},
800c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 12), Period.ofYears(999999999), YearMonth.of(999999999, 12), null},
801c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
802c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(1), YearMonth.of(1, 2), null},
803c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(-12), YearMonth.of(0, 1), null},
804c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(121), YearMonth.of(11, 2), null},
805c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(0), YearMonth.of(1, 1), null},
806c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), Period.ofMonths(0), YearMonth.of(999999999, 12), null},
807c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), Period.ofMonths(0), YearMonth.of(-999999999, 1), null},
808c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 2), Period.ofMonths(-1), YearMonth.of(-999999999, 1), null},
809c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 11), Period.ofMonths(1), YearMonth.of(999999999, 12), null},
810c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
811c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(1).withMonths(2), YearMonth.of(2, 3), null},
812c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(-12).withMonths(-1), YearMonth.of(-12, 12), null},
813c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
814c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(2).withYears(1), YearMonth.of(2, 3), null},
815c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(-1).withYears(-12), YearMonth.of(-12, 12), null},
816c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
817c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofDays(365), null, DateTimeException.class},
818c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofDays(365), null, DateTimeException.class},
819c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofHours(365*24), null, DateTimeException.class},
820c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofMinutes(365*24*60), null, DateTimeException.class},
821c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofSeconds(365*24*3600), null, DateTimeException.class},
822c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofNanos(365*24*3600*1000000000), null, DateTimeException.class},
823c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
824c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
825c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
826c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="plus_TemporalAmount")
827c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_plus_TemporalAmount(YearMonth base, TemporalAmount temporalAmount, YearMonth expectedYearMonth, Class<?> expectedEx) {
828c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (expectedEx == null) {
829c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(base.plus(temporalAmount), expectedYearMonth);
830c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
831c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
832c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                YearMonth result = base.plus(temporalAmount);
833c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail();
834c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (Exception ex) {
835c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                assertTrue(expectedEx.isInstance(ex));
836c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
837c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
838c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
839c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
840c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
841c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // minusYears()
842c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
843c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
844c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long() {
845c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
846c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusYears(1), YearMonth.of(2007, 6));
847c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
848c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
849c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
850c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_noChange_equal() {
851c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
852c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusYears(0), test);
853c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
854c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
855c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
856c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_negative() {
857c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
858c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusYears(-1), YearMonth.of(2009, 6));
859c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
860c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
861c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
862c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_big() {
863c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(40, 6);
864c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusYears(20L + Year.MAX_VALUE), YearMonth.of((int) (40L - 20L - Year.MAX_VALUE), 6));
865c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
866c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
867c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
868c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_invalidTooLarge() {
869c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 6);
870c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusYears(-1);
871c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
872c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
873c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
874c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_invalidTooLargeMaxSubtractMax() {
875c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MIN_VALUE, 12);
876c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusYears(Long.MAX_VALUE);
877c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
878c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
879c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
880c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_invalidTooLargeMaxSubtractMin() {
881c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MIN_VALUE, 12);
882c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusYears(Long.MIN_VALUE);
883c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
884c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
885c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
886c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusYears_long_invalidTooSmall() {
887c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MIN_VALUE, 6);
888c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusYears(1);
889c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
890c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
891c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
892c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // minusMonths()
893c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
894c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
895c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long() {
896c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
897c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusMonths(1), YearMonth.of(2008, 5));
898c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
899c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
900c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
901c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_noChange_equal() {
902c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
903c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusMonths(0), test);
904c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
905c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
906c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
907c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_overYears() {
908c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
909c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusMonths(6), YearMonth.of(2007, 12));
910c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
911c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
912c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
913c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_negative() {
914c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
915c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusMonths(-1), YearMonth.of(2008, 7));
916c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
917c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
918c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
919c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_negativeOverYear() {
920c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
921c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusMonths(-7), YearMonth.of(2009, 1));
922c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
923c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
924c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
925c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_big() {
926c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(40, 6);
927c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long months = 20L + Integer.MAX_VALUE;
928c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.minusMonths(months), YearMonth.of((int) (40L - months / 12), 6 - (int) (months % 12)));
929c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
930c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
931c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions={DateTimeException.class})
932c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_invalidTooLarge() {
933c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
934c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusMonths(-1);
935c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
936c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
937c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
938c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_invalidTooLargeMaxSubtractMax() {
939c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
940c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusMonths(Long.MAX_VALUE);
941c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
942c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
943c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
944c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_invalidTooLargeMaxSubtractMin() {
945c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MAX_VALUE, 12);
946c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusMonths(Long.MIN_VALUE);
947c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
948c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
949c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions={DateTimeException.class})
950c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minusMonths_long_invalidTooSmall() {
951c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(Year.MIN_VALUE, 1);
952c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        test.minusMonths(1);
953c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
954c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
955c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
956c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // minus(long, TemporalUnit)
957c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
958c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="minus_long_TemporalUnit")
959c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_minus_long_TemporalUnit() {
960c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
961c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 1, ChronoUnit.YEARS, YearMonth.of(0, 10), null},
962c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 12, ChronoUnit.YEARS, YearMonth.of(-11, 10), null},
963c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 0, ChronoUnit.YEARS, YearMonth.of(1, 10), null},
964c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), 0, ChronoUnit.YEARS, YearMonth.of(999999999, 12), null},
965c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), 0, ChronoUnit.YEARS, YearMonth.of(-999999999, 1), null},
966c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 1), 999999999, ChronoUnit.YEARS, YearMonth.of(-999999999, 1), null},
967c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 12), -999999999, ChronoUnit.YEARS, YearMonth.of(999999999, 12), null},
968c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
969c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 1, ChronoUnit.MONTHS, YearMonth.of(1, 9), null},
970c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 12, ChronoUnit.MONTHS, YearMonth.of(0, 10), null},
971c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 0, ChronoUnit.MONTHS, YearMonth.of(1, 10), null},
972c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), 0, ChronoUnit.MONTHS, YearMonth.of(999999999, 12), null},
973c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), 0, ChronoUnit.MONTHS, YearMonth.of(-999999999, 1), null},
974c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 2), 1, ChronoUnit.MONTHS, YearMonth.of(-999999999, 1), null},
975c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 11), -1, ChronoUnit.MONTHS, YearMonth.of(999999999, 12), null},
976c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
977c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 10), 1, ChronoUnit.ERAS, YearMonth.of(0, 10), null},
978c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(5, 10), 1, ChronoUnit.CENTURIES, YearMonth.of(-95, 10), null},
979c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(5, 10), 1, ChronoUnit.DECADES, YearMonth.of(-5, 10), null},
980c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
981c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), -1, ChronoUnit.MONTHS, null, DateTimeException.class},
982c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), 1, ChronoUnit.MONTHS, null, DateTimeException.class},
983c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
984c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), 0, ChronoUnit.DAYS, null, DateTimeException.class},
985c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), 0, ChronoUnit.WEEKS, null, DateTimeException.class},
986c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
987c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
988c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
989c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="minus_long_TemporalUnit")
990c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minus_long_TemporalUnit(YearMonth base, long amount, TemporalUnit unit, YearMonth expectedYearMonth, Class<?> expectedEx) {
991c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (expectedEx == null) {
992c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(base.minus(amount, unit), expectedYearMonth);
993c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
994c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
995c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                YearMonth result = base.minus(amount, unit);
996c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail();
997c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (Exception ex) {
998c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                assertTrue(expectedEx.isInstance(ex));
999c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
1000c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
1001c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1002c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1003c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1004c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // minus(TemporalAmount)
1005c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1006c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="minus_TemporalAmount")
1007c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_minus_TemporalAmount() {
1008c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
1009c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(1), YearMonth.of(0, 1), null},
1010c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(-12), YearMonth.of(13, 1), null},
1011c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(0), YearMonth.of(1, 1), null},
1012c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), Period.ofYears(0), YearMonth.of(999999999, 12), null},
1013c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), Period.ofYears(0), YearMonth.of(-999999999, 1), null},
1014c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 1), Period.ofYears(999999999), YearMonth.of(-999999999, 1), null},
1015c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(0, 12), Period.ofYears(-999999999), YearMonth.of(999999999, 12), null},
1016c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1017c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(1), YearMonth.of(0, 12), null},
1018c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(-12), YearMonth.of(2, 1), null},
1019c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(121), YearMonth.of(-10, 12), null},
1020c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(0), YearMonth.of(1, 1), null},
1021c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 12), Period.ofMonths(0), YearMonth.of(999999999, 12), null},
1022c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 1), Period.ofMonths(0), YearMonth.of(-999999999, 1), null},
1023c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(-999999999, 2), Period.ofMonths(1), YearMonth.of(-999999999, 1), null},
1024c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(999999999, 11), Period.ofMonths(-1), YearMonth.of(999999999, 12), null},
1025c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1026c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(1).withMonths(2), YearMonth.of(-1, 11), null},
1027c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofYears(-12).withMonths(-1), YearMonth.of(13, 2), null},
1028c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1029c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(2).withYears(1), YearMonth.of(-1, 11), null},
1030c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofMonths(-1).withYears(-12), YearMonth.of(13, 2), null},
1031c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1032c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Period.ofDays(365), null, DateTimeException.class},
1033c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofDays(365), null, DateTimeException.class},
1034c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofHours(365*24), null, DateTimeException.class},
1035c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofMinutes(365*24*60), null, DateTimeException.class},
1036c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofSeconds(365*24*3600), null, DateTimeException.class},
1037c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {YearMonth.of(1, 1), Duration.ofNanos(365*24*3600*1000000000), null, DateTimeException.class},
1038c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
1039c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1040c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1041c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="minus_TemporalAmount")
1042c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_minus_TemporalAmount(YearMonth base, TemporalAmount temporalAmount, YearMonth expectedYearMonth, Class<?> expectedEx) {
1043c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (expectedEx == null) {
1044c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(base.minus(temporalAmount), expectedYearMonth);
1045c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
1046c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
1047c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                YearMonth result = base.minus(temporalAmount);
1048c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail();
1049c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (Exception ex) {
1050c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                assertTrue(expectedEx.isInstance(ex));
1051c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
1052c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
1053c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1054c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1055c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1056c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // adjustInto()
1057c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1058c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1059c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjustDate() {
1060c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
1061c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDate date = LocalDate.of(2007, 1, 1);
1062c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.adjustInto(date), LocalDate.of(2008, 6, 1));
1063c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1064c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1065c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1066c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjustDate_preserveDoM() {
1067c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2011, 3);
1068c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDate date = LocalDate.of(2008, 2, 29);
1069c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.adjustInto(date), LocalDate.of(2011, 3, 29));
1070c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1071c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1072c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1073c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjustDate_resolve() {
1074c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2007, 2);
1075c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDate date = LocalDate.of(2008, 3, 31);
1076c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.adjustInto(date), LocalDate.of(2007, 2, 28));
1077c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1078c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1079c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1080c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjustDate_equal() {
1081c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 6);
1082c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDate date = LocalDate.of(2008, 6, 30);
1083c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.adjustInto(date), date);
1084c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1085c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1086c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
1087c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_adjustDate_null() {
1088c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.adjustInto((LocalDate) null);
1089c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1090c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1091c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1092c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // isLeapYear()
1093c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1094c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1095c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isLeapYear() {
1096c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(YearMonth.of(2007, 6).isLeapYear(), false);
1097c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(YearMonth.of(2008, 6).isLeapYear(), true);
1098c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1099c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1100c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1101c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // lengthOfMonth()
1102c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1103c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1104c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_lengthOfMonth_june() {
1105c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2007, 6);
1106c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.lengthOfMonth(), 30);
1107c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1108c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1109c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1110c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_lengthOfMonth_febNonLeap() {
1111c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2007, 2);
1112c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.lengthOfMonth(), 28);
1113c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1114c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1115c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1116c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_lengthOfMonth_febLeap() {
1117c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 2);
1118c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.lengthOfMonth(), 29);
1119c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1120c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1121c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1122c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // lengthOfYear()
1123c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1124c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1125c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_lengthOfYear() {
1126c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(YearMonth.of(2007, 6).lengthOfYear(), 365);
1127c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(YearMonth.of(2008, 6).lengthOfYear(), 366);
1128c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1129c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1130c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1131c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // isValidDay(int)
1132c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1133c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1134c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isValidDay_int_june() {
1135c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2007, 6);
1136c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(1), true);
1137c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(30), true);
1138c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1139c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(-1), false);
1140c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(0), false);
1141c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(31), false);
1142c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(32), false);
1143c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1144c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1145c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1146c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isValidDay_int_febNonLeap() {
1147c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2007, 2);
1148c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(1), true);
1149c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(28), true);
1150c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1151c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(-1), false);
1152c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(0), false);
1153c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(29), false);
1154c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(32), false);
1155c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1156c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1157c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1158c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isValidDay_int_febLeap() {
1159c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(2008, 2);
1160c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(1), true);
1161c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(29), true);
1162c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1163c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(-1), false);
1164c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(0), false);
1165c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(30), false);
1166c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.isValidDay(32), false);
1167c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1168c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1169c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1170c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // until(Temporal, TemporalUnit)
1171c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1172c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="periodUntilUnit")
1173c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_periodUntilUnit() {
1174c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
1175c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(-1, 12), MONTHS, -2000 * 12 - 1},
1176c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(0, 1), MONTHS, -2000 * 12},
1177c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(0, 12), MONTHS, -1999 * 12 - 1},
1178c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1, 1), MONTHS, -1999 * 12},
1179c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1999, 12), MONTHS, -1},
1180c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 1), MONTHS, 0},
1181c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 2), MONTHS, 1},
1182c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 3), MONTHS, 2},
1183c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 12), MONTHS, 11},
1184c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2001, 1), MONTHS, 12},
1185c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2246, 5), MONTHS, 246 * 12 + 4},
1186c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1187c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(-1, 12), YEARS, -2000},
1188c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(0, 1), YEARS, -2000},
1189c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(0, 12), YEARS, -1999},
1190c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1, 1), YEARS, -1999},
1191c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1998, 12), YEARS, -1},
1192c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1999, 1), YEARS, -1},
1193c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1999, 2), YEARS, 0},
1194c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(1999, 12), YEARS, 0},
1195c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 1), YEARS, 0},
1196c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 2), YEARS, 0},
1197c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2000, 12), YEARS, 0},
1198c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2001, 1), YEARS, 1},
1199c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 1), ym(2246, 5), YEARS, 246},
1200c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1201c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(-1, 5), DECADES, -200},
1202c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 4), DECADES, -200},
1203c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 5), DECADES, -200},
1204c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 6), DECADES, -199},
1205c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1, 5), DECADES, -199},
1206c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1990, 4), DECADES, -1},
1207c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1990, 5), DECADES, -1},
1208c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1990, 6), DECADES, 0},
1209c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 4), DECADES, 0},
1210c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 5), DECADES, 0},
1211c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 6), DECADES, 0},
1212c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2010, 4), DECADES, 0},
1213c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2010, 5), DECADES, 1},
1214c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2010, 6), DECADES, 1},
1215c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1216c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(-1, 5), CENTURIES, -20},
1217c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 4), CENTURIES, -20},
1218c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 5), CENTURIES, -20},
1219c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 6), CENTURIES, -19},
1220c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1, 5), CENTURIES, -19},
1221c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1900, 4), CENTURIES, -1},
1222c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1900, 5), CENTURIES, -1},
1223c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1900, 6), CENTURIES, 0},
1224c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 4), CENTURIES, 0},
1225c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 5), CENTURIES, 0},
1226c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 6), CENTURIES, 0},
1227c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2100, 4), CENTURIES, 0},
1228c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2100, 5), CENTURIES, 1},
1229c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2100, 6), CENTURIES, 1},
1230c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1231c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(-1, 5), MILLENNIA, -2},
1232c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 4), MILLENNIA, -2},
1233c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 5), MILLENNIA, -2},
1234c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(0, 6), MILLENNIA, -1},
1235c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1, 5), MILLENNIA, -1},
1236c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1000, 4), MILLENNIA, -1},
1237c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1000, 5), MILLENNIA, -1},
1238c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(1000, 6), MILLENNIA, 0},
1239c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 4), MILLENNIA, 0},
1240c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 5), MILLENNIA, 0},
1241c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(2000, 6), MILLENNIA, 0},
1242c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(3000, 4), MILLENNIA, 0},
1243c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(3000, 5), MILLENNIA, 1},
1244c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {ym(2000, 5), ym(3000, 5), MILLENNIA, 1},
1245c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
1246c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1247c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1248c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="periodUntilUnit")
1249c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_TemporalUnit(YearMonth ym1, YearMonth ym2, TemporalUnit unit, long expected) {
1250c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long amount = ym1.until(ym2, unit);
1251c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(amount, expected);
1252c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1253c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1254c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="periodUntilUnit")
1255c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_TemporalUnit_negated(YearMonth ym1, YearMonth ym2, TemporalUnit unit, long expected) {
1256c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long amount = ym2.until(ym1, unit);
1257c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(amount, -expected);
1258c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1259c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1260c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="periodUntilUnit")
1261c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_TemporalUnit_between(YearMonth ym1, YearMonth ym2, TemporalUnit unit, long expected) {
1262c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        long amount = unit.between(ym1, ym2);
1263c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(amount, expected);
1264c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1265c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1266c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1267c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_convertedType() {
1268c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth start = YearMonth.of(2010, 6);
1269c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        LocalDate end = start.plusMonths(2).atDay(12);
1270c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(start.until(end, MONTHS), 2);
1271c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1272c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1273c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=DateTimeException.class)
1274c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_invalidType() {
1275c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth start = YearMonth.of(2010, 6);
1276c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        start.until(LocalTime.of(11, 30), MONTHS);
1277c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1278c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1279c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions = UnsupportedTemporalTypeException.class)
1280c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_TemporalUnit_unsupportedUnit() {
1281c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.until(TEST_2008_06, HOURS);
1282c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1283c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1284c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions = NullPointerException.class)
1285c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_TemporalUnit_nullEnd() {
1286c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.until(null, DAYS);
1287c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1288c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1289c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions = NullPointerException.class)
1290c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_until_TemporalUnit_nullUnit() {
1291c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.until(TEST_2008_06, null);
1292c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1293c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1294c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1295c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // format(DateTimeFormatter)
1296c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1297c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1298c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_format_formatter() {
1299c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        DateTimeFormatter f = DateTimeFormatter.ofPattern("y M");
1300c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        String t = YearMonth.of(2010, 12).format(f);
1301c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(t, "2010 12");
1302c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1303c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1304c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
1305c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_format_formatter_null() {
1306c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth.of(2010, 12).format(null);
1307c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1308c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1309c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1310c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // atDay(int)
1311c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1312c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="atDay")
1313c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_atDay() {
1314c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
1315c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 6), 8, LocalDate.of(2008, 6, 8)},
1316c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1317c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 1), 31, LocalDate.of(2008, 1, 31)},
1318c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 2), 29, LocalDate.of(2008, 2, 29)},
1319c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 3), 31, LocalDate.of(2008, 3, 31)},
1320c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 4), 30, LocalDate.of(2008, 4, 30)},
1321c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1322c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 1), 32, null},
1323c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 1), 0, null},
1324c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 2), 29, null},
1325c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 2), 30, null},
1326c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 2), 31, null},
1327c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 4), 31, null},
1328c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
1329c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1330c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1331c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="atDay")
1332c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_atDay(YearMonth test, int day, LocalDate expected) {
1333c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        if (expected != null) {
1334c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            assertEquals(test.atDay(day), expected);
1335c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        } else {
1336c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            try {
1337c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                test.atDay(day);
1338c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                fail();
1339c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            } catch (DateTimeException ex) {
1340c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                // expected
1341c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
1342c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
1343c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1344c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1345c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1346c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // atEndOfMonth()
1347c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1348c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="atEndOfMonth")
1349c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] data_atEndOfMonth() {
1350c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
1351c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 1), LocalDate.of(2008, 1, 31)},
1352c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 2), LocalDate.of(2008, 2, 29)},
1353c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 3), LocalDate.of(2008, 3, 31)},
1354c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 4), LocalDate.of(2008, 4, 30)},
1355c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 5), LocalDate.of(2008, 5, 31)},
1356c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 6), LocalDate.of(2008, 6, 30)},
1357c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2008, 12), LocalDate.of(2008, 12, 31)},
1358c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1359c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 1), LocalDate.of(2009, 1, 31)},
1360c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 2), LocalDate.of(2009, 2, 28)},
1361c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 3), LocalDate.of(2009, 3, 31)},
1362c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 4), LocalDate.of(2009, 4, 30)},
1363c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 5), LocalDate.of(2009, 5, 31)},
1364c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 6), LocalDate.of(2009, 6, 30)},
1365c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                {YearMonth.of(2009, 12), LocalDate.of(2009, 12, 31)},
1366c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
1367c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1368c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1369c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="atEndOfMonth")
1370c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_atEndOfMonth(YearMonth test, LocalDate expected) {
1371c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(test.atEndOfMonth(), expected);
1372c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1373c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1374c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1375c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // compareTo()
1376c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1377c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1378c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_comparisons() {
1379c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        doTest_comparisons_YearMonth(
1380c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(-1, 1),
1381c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(0, 1),
1382c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(0, 12),
1383c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(1, 1),
1384c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(1, 2),
1385c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(1, 12),
1386c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(2008, 1),
1387c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(2008, 6),
1388c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth.of(2008, 12)
1389c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        );
1390c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1391c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1392c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    void doTest_comparisons_YearMonth(YearMonth... localDates) {
1393c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        for (int i = 0; i < localDates.length; i++) {
1394c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            YearMonth a = localDates[i];
1395c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            for (int j = 0; j < localDates.length; j++) {
1396c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                YearMonth b = localDates[j];
1397c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                if (i < j) {
1398c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertTrue(a.compareTo(b) < 0, a + " <=> " + b);
1399c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.isBefore(b), true, a + " <=> " + b);
1400c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.isAfter(b), false, a + " <=> " + b);
1401c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.equals(b), false, a + " <=> " + b);
1402c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                } else if (i > j) {
1403c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertTrue(a.compareTo(b) > 0, a + " <=> " + b);
1404c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.isBefore(b), false, a + " <=> " + b);
1405c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.isAfter(b), true, a + " <=> " + b);
1406c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.equals(b), false, a + " <=> " + b);
1407c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                } else {
1408c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.compareTo(b), 0, a + " <=> " + b);
1409c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.isBefore(b), false, a + " <=> " + b);
1410c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.isAfter(b), false, a + " <=> " + b);
1411c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                    assertEquals(a.equals(b), true, a + " <=> " + b);
1412c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                }
1413c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
1414c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
1415c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1416c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1417c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
1418c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_compareTo_ObjectNull() {
1419c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.compareTo(null);
1420c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1421c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1422c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
1423c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isBefore_ObjectNull() {
1424c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.isBefore(null);
1425c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1426c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1427c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(expectedExceptions=NullPointerException.class)
1428c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_isAfter_ObjectNull() {
1429c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        TEST_2008_06.isAfter(null);
1430c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1431c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1432c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1433c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // equals()
1434c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1435c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1436c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_equals() {
1437c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth a = YearMonth.of(2008, 6);
1438c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth b = YearMonth.of(2008, 6);
1439c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth c = YearMonth.of(2007, 6);
1440c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth d = YearMonth.of(2008, 5);
1441c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1442c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.equals(a), true);
1443c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.equals(b), true);
1444c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.equals(c), false);
1445c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.equals(d), false);
1446c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1447c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(b.equals(a), true);
1448c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(b.equals(b), true);
1449c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(b.equals(c), false);
1450c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(b.equals(d), false);
1451c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1452c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(c.equals(a), false);
1453c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(c.equals(b), false);
1454c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(c.equals(c), true);
1455c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(c.equals(d), false);
1456c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1457c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(d.equals(a), false);
1458c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(d.equals(b), false);
1459c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(d.equals(c), false);
1460c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(d.equals(d), true);
1461c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1462c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1463c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1464c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_equals_itself_true() {
1465c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.equals(TEST_2008_06), true);
1466c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1467c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1468c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1469c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_equals_string_false() {
1470c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.equals("2007-07-15"), false);
1471c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1472c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1473c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1474c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_equals_null_false() {
1475c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(TEST_2008_06.equals(null), false);
1476c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1477c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1478c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1479c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // hashCode()
1480c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1481c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="sampleDates")
1482c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_hashCode(int y, int m) {
1483c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth a = YearMonth.of(y, m);
1484c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.hashCode(), a.hashCode());
1485c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth b = YearMonth.of(y, m);
1486c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(a.hashCode(), b.hashCode());
1487c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1488c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1489c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test
1490c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_hashCode_unique() {
1491c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        Set<Integer> uniques = new HashSet<Integer>(201 * 12);
1492c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        for (int i = 1900; i <= 2100; i++) {
1493c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            for (int j = 1; j <= 12; j++) {
1494c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer                assertTrue(uniques.add(YearMonth.of(i, j).hashCode()));
1495c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
1496c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
1497c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1498c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1499c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1500c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    // toString()
1501c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    //-----------------------------------------------------------------------
1502c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @DataProvider(name="sampleToString")
1503c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    Object[][] provider_sampleToString() {
1504c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return new Object[][] {
1505c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {2008, 1, "2008-01"},
1506c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {2008, 12, "2008-12"},
1507c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {7, 5, "0007-05"},
1508c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {0, 5, "0000-05"},
1509c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            {-1, 1, "-0001-01"},
1510c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        };
1511c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1512c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1513c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    @Test(dataProvider="sampleToString")
1514c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public void test_toString(int y, int m, String expected) {
1515c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        YearMonth test = YearMonth.of(y, m);
1516c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        String str = test.toString();
1517c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        assertEquals(str, expected);
1518c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1519c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1520c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    private YearMonth ym(int year, int month) {
1521c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return YearMonth.of(year, month);
1522c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
1523c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
1524c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer}
1525