• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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