1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* 27 * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos 28 * 29 * All rights reserved. 30 * 31 * Redistribution and use in source and binary forms, with or without 32 * modification, are permitted provided that the following conditions are met: 33 * 34 * * Redistributions of source code must retain the above copyright notice, 35 * this list of conditions and the following disclaimer. 36 * 37 * * Redistributions in binary form must reproduce the above copyright notice, 38 * this list of conditions and the following disclaimer in the documentation 39 * and/or other materials provided with the distribution. 40 * 41 * * Neither the name of JSR-310 nor the names of its contributors 42 * may be used to endorse or promote products derived from this software 43 * without specific prior written permission. 44 * 45 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 46 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 47 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 48 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 49 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 50 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 51 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 52 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 53 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 54 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 55 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 56 */ 57 package tck.java.time.temporal; 58 59 import static java.time.temporal.ChronoUnit.CENTURIES; 60 import static java.time.temporal.ChronoUnit.DAYS; 61 import static java.time.temporal.ChronoUnit.DECADES; 62 import static java.time.temporal.ChronoUnit.ERAS; 63 import static java.time.temporal.ChronoUnit.FOREVER; 64 import static java.time.temporal.ChronoUnit.HALF_DAYS; 65 import static java.time.temporal.ChronoUnit.HOURS; 66 import static java.time.temporal.ChronoUnit.MICROS; 67 import static java.time.temporal.ChronoUnit.MILLENNIA; 68 import static java.time.temporal.ChronoUnit.MILLIS; 69 import static java.time.temporal.ChronoUnit.MINUTES; 70 import static java.time.temporal.ChronoUnit.MONTHS; 71 import static java.time.temporal.ChronoUnit.NANOS; 72 import static java.time.temporal.ChronoUnit.SECONDS; 73 import static java.time.temporal.ChronoUnit.WEEKS; 74 import static java.time.temporal.ChronoUnit.YEARS; 75 import static org.testng.Assert.assertEquals; 76 import static org.testng.Assert.assertTrue; 77 import static org.testng.Assert.fail; 78 79 import java.time.LocalDate; 80 import java.time.LocalTime; 81 import java.time.temporal.ChronoField; 82 import java.time.temporal.ChronoUnit; 83 import java.time.temporal.Temporal; 84 import java.time.temporal.TemporalAccessor; 85 86 import org.testng.annotations.DataProvider; 87 import org.testng.annotations.Test; 88 89 /** 90 * Test. 91 */ 92 @Test 93 public class TCKChronoUnit { 94 95 //----------------------------------------------------------------------- 96 // isDateBased(), isTimeBased() and isDurationEstimated() 97 //----------------------------------------------------------------------- 98 @DataProvider(name="chronoUnit") data_chronoUnit()99 Object[][] data_chronoUnit() { 100 return new Object[][] { 101 {FOREVER, false, false, true}, 102 {ERAS, true, false, true}, 103 {MILLENNIA, true, false, true}, 104 {CENTURIES, true, false, true}, 105 {DECADES, true, false, true}, 106 {YEARS, true, false, true}, 107 {MONTHS, true, false, true}, 108 {WEEKS, true, false, true}, 109 {DAYS, true, false, true}, 110 111 {HALF_DAYS, false, true, false}, 112 {HOURS, false, true, false}, 113 {MINUTES, false, true, false}, 114 {SECONDS, false, true, false}, 115 {MICROS, false, true, false}, 116 {MILLIS, false, true, false}, 117 {NANOS, false, true, false}, 118 119 }; 120 } 121 122 @Test(dataProvider = "chronoUnit") test_unitType(ChronoUnit unit, boolean isDateBased, boolean isTimeBased, boolean isDurationEstimated)123 public void test_unitType(ChronoUnit unit, boolean isDateBased, boolean isTimeBased, boolean isDurationEstimated) { 124 assertEquals(unit.isDateBased(), isDateBased); 125 assertEquals(unit.isTimeBased(), isTimeBased); 126 assertEquals(unit.isDurationEstimated(), isDurationEstimated); 127 } 128 129 //----------------------------------------------------------------------- 130 // isSupportedBy(), addTo() and between() 131 //----------------------------------------------------------------------- 132 @DataProvider(name="unitAndTemporal") data_unitAndTemporal()133 Object[][] data_unitAndTemporal() { 134 return new Object[][] { 135 {CENTURIES, LocalDate.of(2000, 1, 10), true, 1, LocalDate.of(2100, 1, 10)}, 136 {DECADES, LocalDate.of(2000, 1, 10), true, 1, LocalDate.of(2010, 1, 10)}, 137 {YEARS, LocalDate.of(2000, 1, 10), true, 1, LocalDate.of(2001, 1, 10)}, 138 {MONTHS, LocalDate.of(2000, 1, 10), true, 1, LocalDate.of(2000, 2, 10)}, 139 {WEEKS, LocalDate.of(2000, 1, 10), true, 1, LocalDate.of(2000, 1, 17)}, 140 {DAYS, LocalDate.of(2000, 1, 10), true, 1, LocalDate.of(2000, 1, 11)}, 141 142 {HALF_DAYS, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(13, 2, 3, 400)}, 143 {HOURS, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(2, 2, 3, 400)}, 144 {MINUTES, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(1, 3, 3, 400)}, 145 {SECONDS, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(1, 2, 4, 400)}, 146 {MICROS, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(1, 2, 3, 1000 + 400)}, 147 {MILLIS, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(1, 2, 3, 1000*1000 + 400)}, 148 {NANOS, LocalTime.of(1, 2, 3, 400), true, 1, LocalTime.of(1, 2, 3, 1 + 400)}, 149 150 {CENTURIES, LocalTime.of(1, 2, 3, 400), false, 1, null}, 151 {DECADES, LocalTime.of(1, 2, 3, 400), false, 1, null}, 152 {YEARS, LocalTime.of(1, 2, 3, 400), false, 1, null}, 153 {MONTHS, LocalTime.of(1, 2, 3, 400), false, 1, null}, 154 {WEEKS, LocalTime.of(1, 2, 3, 400), false, 1, null}, 155 {DAYS, LocalTime.of(1, 2, 3, 400), false, 1, null}, 156 157 {HALF_DAYS, LocalDate.of(2000, 2, 29), false, 1, null}, 158 {HOURS, LocalDate.of(2000, 2, 29), false, 1, null}, 159 {MINUTES, LocalDate.of(2000, 2, 29), false, 1, null}, 160 {SECONDS, LocalDate.of(2000, 2, 29), false, 1, null}, 161 {MICROS, LocalDate.of(2000, 2, 29), false, 1, null}, 162 {MILLIS, LocalDate.of(2000, 2, 29), false, 1, null}, 163 {NANOS, LocalDate.of(2000, 2, 29), false, 1, null}, 164 165 }; 166 } 167 168 @Test(dataProvider = "unitAndTemporal") test_unitAndTemporal(ChronoUnit unit, Temporal base, boolean isSupportedBy, long amount, Temporal target)169 public void test_unitAndTemporal(ChronoUnit unit, Temporal base, boolean isSupportedBy, long amount, Temporal target) { 170 assertEquals(unit.isSupportedBy(base), isSupportedBy); 171 if (isSupportedBy) { 172 Temporal result = unit.addTo(base, amount); 173 assertEquals(result, target); 174 assertEquals(unit.between(base, result), amount); 175 } 176 } 177 178 //----------------------------------------------------------------------- 179 // valueOf() 180 //----------------------------------------------------------------------- 181 @Test test_valueOf()182 public void test_valueOf() { 183 for (ChronoUnit unit : ChronoUnit.values()) { 184 assertEquals(ChronoUnit.valueOf(unit.name()), unit); 185 } 186 } 187 } 188