1 /* 2 * Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos 3 * 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * * Redistributions of source code must retain the above copyright notice, 10 * this list of conditions and the following disclaimer. 11 * 12 * * Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * * Neither the name of JSR-310 nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 package org.threeten.bp.zone; 33 34 import static org.testng.Assert.assertEquals; 35 36 import java.io.ByteArrayInputStream; 37 import java.io.ByteArrayOutputStream; 38 import java.io.ObjectInputStream; 39 import java.io.ObjectOutputStream; 40 41 import org.testng.annotations.DataProvider; 42 import org.testng.annotations.Test; 43 import org.threeten.bp.Duration; 44 import org.threeten.bp.Instant; 45 import org.threeten.bp.LocalDateTime; 46 import org.threeten.bp.LocalTime; 47 import org.threeten.bp.Month; 48 import org.threeten.bp.ZoneOffset; 49 import org.threeten.bp.zone.ZoneOffsetTransitionRule.TimeDefinition; 50 51 /** 52 * Test ZoneRules for fixed offset time-zones. 53 */ 54 @Test 55 public class TestFixedZoneRules { 56 57 private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1); 58 private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2); 59 private static final ZoneOffset OFFSET_M18 = ZoneOffset.ofHours(-18); 60 private static final LocalDateTime LDT = LocalDateTime.of(2010, 12, 3, 11, 30); 61 private static final Instant INSTANT = LDT.toInstant(OFFSET_PONE); 62 make(ZoneOffset offset)63 private ZoneRules make(ZoneOffset offset) { 64 return offset.getRules(); 65 } 66 67 @DataProvider(name="rules") data_rules()68 Object[][] data_rules() { 69 return new Object[][] { 70 {make(OFFSET_PONE), OFFSET_PONE}, 71 {make(OFFSET_PTWO), OFFSET_PTWO}, 72 {make(OFFSET_M18), OFFSET_M18}, 73 }; 74 } 75 76 //----------------------------------------------------------------------- 77 // Basics 78 //----------------------------------------------------------------------- 79 @Test(dataProvider="rules") test_serialization(ZoneRules test, ZoneOffset expectedOffset)80 public void test_serialization(ZoneRules test, ZoneOffset expectedOffset) throws Exception { 81 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 82 ObjectOutputStream out = new ObjectOutputStream(baos); 83 out.writeObject(test); 84 baos.close(); 85 byte[] bytes = baos.toByteArray(); 86 87 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 88 ObjectInputStream in = new ObjectInputStream(bais); 89 ZoneRules result = (ZoneRules) in.readObject(); 90 91 assertEquals(result, test); 92 assertEquals(result.getClass(), test.getClass()); 93 } 94 95 //----------------------------------------------------------------------- 96 // basics 97 //----------------------------------------------------------------------- 98 @Test test_data_nullInput()99 public void test_data_nullInput() { 100 ZoneRules test = make(OFFSET_PONE); 101 assertEquals(test.getOffset((Instant) null), OFFSET_PONE); 102 assertEquals(test.getOffset((LocalDateTime) null), OFFSET_PONE); 103 assertEquals(test.getValidOffsets(null).size(), 1); 104 assertEquals(test.getValidOffsets(null).get(0), OFFSET_PONE); 105 assertEquals(test.getTransition(null), null); 106 assertEquals(test.getStandardOffset(null), OFFSET_PONE); 107 assertEquals(test.getDaylightSavings(null), Duration.ZERO); 108 assertEquals(test.isDaylightSavings(null), false); 109 assertEquals(test.nextTransition(null), null); 110 assertEquals(test.previousTransition(null), null); 111 } 112 113 @Test(dataProvider="rules") test_getOffset_Instant(ZoneRules test, ZoneOffset expectedOffset)114 public void test_getOffset_Instant(ZoneRules test, ZoneOffset expectedOffset) { 115 assertEquals(test.getOffset(INSTANT), expectedOffset); 116 assertEquals(test.getOffset((Instant) null), expectedOffset); 117 } 118 119 @Test(dataProvider="rules") test_getOffset_LocalDateTime(ZoneRules test, ZoneOffset expectedOffset)120 public void test_getOffset_LocalDateTime(ZoneRules test, ZoneOffset expectedOffset) { 121 assertEquals(test.getOffset(LDT), expectedOffset); 122 assertEquals(test.getOffset((LocalDateTime) null), expectedOffset); 123 } 124 125 @Test(dataProvider="rules") test_getValidOffsets_LDT(ZoneRules test, ZoneOffset expectedOffset)126 public void test_getValidOffsets_LDT(ZoneRules test, ZoneOffset expectedOffset) { 127 assertEquals(test.getValidOffsets(LDT).size(), 1); 128 assertEquals(test.getValidOffsets(LDT).get(0), expectedOffset); 129 assertEquals(test.getValidOffsets(null).size(), 1); 130 assertEquals(test.getValidOffsets(null).get(0), expectedOffset); 131 } 132 133 @Test(dataProvider="rules") test_getTransition_LDT(ZoneRules test, ZoneOffset expectedOffset)134 public void test_getTransition_LDT(ZoneRules test, ZoneOffset expectedOffset) { 135 assertEquals(test.getTransition(LDT), null); 136 assertEquals(test.getTransition(null), null); 137 } 138 139 @Test(dataProvider="rules") test_isValidOffset_LDT_ZO(ZoneRules test, ZoneOffset expectedOffset)140 public void test_isValidOffset_LDT_ZO(ZoneRules test, ZoneOffset expectedOffset) { 141 assertEquals(test.isValidOffset(LDT, expectedOffset), true); 142 assertEquals(test.isValidOffset(LDT, ZoneOffset.UTC), false); 143 assertEquals(test.isValidOffset(LDT, null), false); 144 145 assertEquals(test.isValidOffset(null, expectedOffset), true); 146 assertEquals(test.isValidOffset(null, ZoneOffset.UTC), false); 147 assertEquals(test.isValidOffset(null, null), false); 148 } 149 150 @Test(dataProvider="rules") test_getStandardOffset_Instant(ZoneRules test, ZoneOffset expectedOffset)151 public void test_getStandardOffset_Instant(ZoneRules test, ZoneOffset expectedOffset) { 152 assertEquals(test.getStandardOffset(INSTANT), expectedOffset); 153 assertEquals(test.getStandardOffset(null), expectedOffset); 154 } 155 156 @Test(dataProvider="rules") test_getDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset)157 public void test_getDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset) { 158 assertEquals(test.getDaylightSavings(INSTANT), Duration.ZERO); 159 assertEquals(test.getDaylightSavings(null), Duration.ZERO); 160 } 161 162 @Test(dataProvider="rules") test_isDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset)163 public void test_isDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset) { 164 assertEquals(test.isDaylightSavings(INSTANT), false); 165 assertEquals(test.isDaylightSavings(null), false); 166 } 167 168 //------------------------------------------------------------------------- 169 @Test(dataProvider="rules") test_nextTransition_Instant(ZoneRules test, ZoneOffset expectedOffset)170 public void test_nextTransition_Instant(ZoneRules test, ZoneOffset expectedOffset) { 171 assertEquals(test.nextTransition(INSTANT), null); 172 assertEquals(test.nextTransition(null), null); 173 } 174 175 @Test(dataProvider="rules") test_previousTransition_Instant(ZoneRules test, ZoneOffset expectedOffset)176 public void test_previousTransition_Instant(ZoneRules test, ZoneOffset expectedOffset) { 177 assertEquals(test.previousTransition(INSTANT), null); 178 assertEquals(test.previousTransition(null), null); 179 } 180 181 //------------------------------------------------------------------------- 182 @Test(dataProvider="rules") test_getTransitions(ZoneRules test, ZoneOffset expectedOffset)183 public void test_getTransitions(ZoneRules test, ZoneOffset expectedOffset) { 184 assertEquals(test.getTransitions().size(), 0); 185 } 186 187 @Test(expectedExceptions=UnsupportedOperationException.class) test_getTransitions_immutable()188 public void test_getTransitions_immutable() { 189 ZoneRules test = make(OFFSET_PTWO); 190 test.getTransitions().add(ZoneOffsetTransition.of(LDT, OFFSET_PONE, OFFSET_PTWO)); 191 } 192 193 @Test(dataProvider="rules") test_getTransitionRules(ZoneRules test, ZoneOffset expectedOffset)194 public void test_getTransitionRules(ZoneRules test, ZoneOffset expectedOffset) { 195 assertEquals(test.getTransitionRules().size(), 0); 196 } 197 198 @Test(expectedExceptions=UnsupportedOperationException.class) test_getTransitionRules_immutable()199 public void test_getTransitionRules_immutable() { 200 ZoneRules test = make(OFFSET_PTWO); 201 test.getTransitionRules().add(ZoneOffsetTransitionRule.of(Month.JULY, 2, null, LocalTime.of(12, 30), false, TimeDefinition.STANDARD, OFFSET_PONE, OFFSET_PTWO, OFFSET_PONE)); 202 } 203 204 //----------------------------------------------------------------------- 205 // equals() / hashCode() 206 //----------------------------------------------------------------------- 207 @Test test_equalsHashCode()208 public void test_equalsHashCode() { 209 ZoneRules a = make(OFFSET_PONE); 210 ZoneRules b = make(OFFSET_PTWO); 211 212 assertEquals(a.equals(a), true); 213 assertEquals(a.equals(b), false); 214 assertEquals(b.equals(a), false); 215 assertEquals(b.equals(b), true); 216 217 assertEquals(a.equals("Rubbish"), false); 218 assertEquals(a.equals(null), false); 219 220 assertEquals(a.hashCode() == a.hashCode(), true); 221 assertEquals(b.hashCode() == b.hashCode(), true); 222 } 223 224 } 225