48 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
49 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
50 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
51 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
52 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
53 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
54 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
55 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
56 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
57 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
58 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
59 */
60 package tck.java.time.zone;
61
62 import static org.testng.Assert.assertEquals;
63
64 import java.io.ByteArrayInputStream;
65 import java.io.ByteArrayOutputStream;
66 import java.io.ObjectInputStream;
67 import java.io.ObjectOutputStream;
68
69 import java.time.Duration;
70 import java.time.Instant;
71 import java.time.LocalDateTime;
72 import java.time.LocalTime;
73 import java.time.Month;
74 import java.time.ZoneOffset;
75 import java.time.zone.ZoneOffsetTransition;
76 import java.time.zone.ZoneOffsetTransitionRule;
77 import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
78 import java.time.zone.ZoneRules;
79
80 import org.testng.annotations.DataProvider;
81 import org.testng.annotations.Test;
82
83 /**
84 * Test ZoneRules for fixed offset time-zones.
85 */
86 @Test
87 public class TCKFixedZoneRules {
88
91 private static final ZoneOffset OFFSET_M18 = ZoneOffset.ofHours(-18);
92 private static final LocalDateTime LDT = LocalDateTime.of(2010, 12, 3, 11, 30);
93 private static final Instant INSTANT = LDT.toInstant(OFFSET_PONE);
94
95 private ZoneRules make(ZoneOffset offset) {
96 return offset.getRules();
97 }
98
99 @DataProvider(name="rules")
100 Object[][] data_rules() {
101 return new Object[][] {
102 {make(OFFSET_PONE), OFFSET_PONE},
103 {make(OFFSET_PTWO), OFFSET_PTWO},
104 {make(OFFSET_M18), OFFSET_M18},
105 };
106 }
107
108 //-----------------------------------------------------------------------
109 // Basics
110 //-----------------------------------------------------------------------
111 @Test(groups="tck", dataProvider="rules")
112 public void test_serialization(ZoneRules test, ZoneOffset expectedOffset) throws Exception {
113 ByteArrayOutputStream baos = new ByteArrayOutputStream();
114 ObjectOutputStream out = new ObjectOutputStream(baos);
115 out.writeObject(test);
116 baos.close();
117 byte[] bytes = baos.toByteArray();
118
119 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
120 ObjectInputStream in = new ObjectInputStream(bais);
121 ZoneRules result = (ZoneRules) in.readObject();
122
123 assertEquals(result, test);
124 assertEquals(result.getClass(), test.getClass());
125 }
126
127 //-----------------------------------------------------------------------
128 // basics
129 //-----------------------------------------------------------------------
130 @Test(groups="tck", dataProvider="rules")
131 public void test_getOffset_Instant(ZoneRules test, ZoneOffset expectedOffset) {
132 assertEquals(test.getOffset(INSTANT), expectedOffset);
133 assertEquals(test.getOffset((Instant) null), expectedOffset);
134 }
135
136 @Test(groups="tck", dataProvider="rules")
137 public void test_getOffset_LocalDateTime(ZoneRules test, ZoneOffset expectedOffset) {
138 assertEquals(test.getOffset(LDT), expectedOffset);
139 assertEquals(test.getOffset((LocalDateTime) null), expectedOffset);
140 }
141
142 @Test(groups="tck", dataProvider="rules")
143 public void test_getValidOffsets_LDT(ZoneRules test, ZoneOffset expectedOffset) {
144 assertEquals(test.getValidOffsets(LDT).size(), 1);
145 assertEquals(test.getValidOffsets(LDT).get(0), expectedOffset);
146 assertEquals(test.getValidOffsets(null).size(), 1);
147 assertEquals(test.getValidOffsets(null).get(0), expectedOffset);
148 }
149
150 @Test(groups="tck", dataProvider="rules")
151 public void test_getTransition_LDT(ZoneRules test, ZoneOffset expectedOffset) {
152 assertEquals(test.getTransition(LDT), null);
153 assertEquals(test.getTransition(null), null);
154 }
155
156 @Test(groups="tck", dataProvider="rules")
157 public void test_isValidOffset_LDT_ZO(ZoneRules test, ZoneOffset expectedOffset) {
158 assertEquals(test.isValidOffset(LDT, expectedOffset), true);
159 assertEquals(test.isValidOffset(LDT, ZoneOffset.UTC), false);
160 assertEquals(test.isValidOffset(LDT, null), false);
161
162 assertEquals(test.isValidOffset(null, expectedOffset), true);
163 assertEquals(test.isValidOffset(null, ZoneOffset.UTC), false);
164 assertEquals(test.isValidOffset(null, null), false);
165 }
166
167 @Test(groups="tck", dataProvider="rules")
168 public void test_getStandardOffset_Instant(ZoneRules test, ZoneOffset expectedOffset) {
169 assertEquals(test.getStandardOffset(INSTANT), expectedOffset);
170 assertEquals(test.getStandardOffset(null), expectedOffset);
171 }
172
173 @Test(groups="tck", dataProvider="rules")
174 public void test_getDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset) {
175 assertEquals(test.getDaylightSavings(INSTANT), Duration.ZERO);
176 assertEquals(test.getDaylightSavings(null), Duration.ZERO);
177 }
178
179 @Test(groups="tck", dataProvider="rules")
180 public void test_isDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset) {
181 assertEquals(test.isDaylightSavings(INSTANT), false);
182 assertEquals(test.isDaylightSavings(null), false);
183 }
184
185 //-------------------------------------------------------------------------
186 @Test(groups="tck", dataProvider="rules")
187 public void test_nextTransition_Instant(ZoneRules test, ZoneOffset expectedOffset) {
188 assertEquals(test.nextTransition(INSTANT), null);
189 assertEquals(test.nextTransition(null), null);
190 }
191
192 @Test(groups="tck", dataProvider="rules")
193 public void test_previousTransition_Instant(ZoneRules test, ZoneOffset expectedOffset) {
194 assertEquals(test.previousTransition(INSTANT), null);
195 assertEquals(test.previousTransition(null), null);
196 }
197
198 //-------------------------------------------------------------------------
199 @Test(groups="tck", dataProvider="rules")
200 public void test_getTransitions(ZoneRules test, ZoneOffset expectedOffset) {
201 assertEquals(test.getTransitions().size(), 0);
202 }
203
204 @Test(expectedExceptions=UnsupportedOperationException.class, groups="tck")
205 public void test_getTransitions_immutable() {
206 ZoneRules test = make(OFFSET_PTWO);
207 test.getTransitions().add(ZoneOffsetTransition.of(LDT, OFFSET_PONE, OFFSET_PTWO));
208 }
209
210 @Test(groups="tck", dataProvider="rules")
211 public void test_getTransitionRules(ZoneRules test, ZoneOffset expectedOffset) {
212 assertEquals(test.getTransitionRules().size(), 0);
213 }
214
215 @Test(expectedExceptions=UnsupportedOperationException.class, groups="tck")
216 public void test_getTransitionRules_immutable() {
217 ZoneRules test = make(OFFSET_PTWO);
218 test.getTransitionRules().add(ZoneOffsetTransitionRule.of(Month.JULY, 2, null, LocalTime.of(12, 30), false, TimeDefinition.STANDARD, OFFSET_PONE, OFFSET_PTWO, OFFSET_PONE));
219 }
220
221 //-----------------------------------------------------------------------
222 // equals() / hashCode()
223 //-----------------------------------------------------------------------
224 @Test(groups="tck")
225 public void test_equalsHashCode() {
226 ZoneRules a = make(OFFSET_PONE);
227 ZoneRules b = make(OFFSET_PTWO);
228
229 assertEquals(a.equals(a), true);
230 assertEquals(a.equals(b), false);
231 assertEquals(b.equals(a), false);
232 assertEquals(b.equals(b), true);
233
234 assertEquals(a.equals("Rubbish"), false);
235 assertEquals(a.equals(null), false);
236
237 assertEquals(a.hashCode() == a.hashCode(), true);
238 assertEquals(b.hashCode() == b.hashCode(), true);
239 }
240
241 }
|
48 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
49 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
50 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
51 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
52 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
53 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
54 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
55 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
56 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
57 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
58 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
59 */
60 package tck.java.time.zone;
61
62 import static org.testng.Assert.assertEquals;
63
64 import java.io.ByteArrayInputStream;
65 import java.io.ByteArrayOutputStream;
66 import java.io.ObjectInputStream;
67 import java.io.ObjectOutputStream;
68 import java.time.Duration;
69 import java.time.Instant;
70 import java.time.LocalDateTime;
71 import java.time.LocalTime;
72 import java.time.Month;
73 import java.time.ZoneOffset;
74 import java.time.zone.ZoneOffsetTransition;
75 import java.time.zone.ZoneOffsetTransitionRule;
76 import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
77 import java.time.zone.ZoneRules;
78
79 import org.testng.annotations.DataProvider;
80 import org.testng.annotations.Test;
81
82 /**
83 * Test ZoneRules for fixed offset time-zones.
84 */
85 @Test
86 public class TCKFixedZoneRules {
87
90 private static final ZoneOffset OFFSET_M18 = ZoneOffset.ofHours(-18);
91 private static final LocalDateTime LDT = LocalDateTime.of(2010, 12, 3, 11, 30);
92 private static final Instant INSTANT = LDT.toInstant(OFFSET_PONE);
93
94 private ZoneRules make(ZoneOffset offset) {
95 return offset.getRules();
96 }
97
98 @DataProvider(name="rules")
99 Object[][] data_rules() {
100 return new Object[][] {
101 {make(OFFSET_PONE), OFFSET_PONE},
102 {make(OFFSET_PTWO), OFFSET_PTWO},
103 {make(OFFSET_M18), OFFSET_M18},
104 };
105 }
106
107 //-----------------------------------------------------------------------
108 // Basics
109 //-----------------------------------------------------------------------
110 @Test(dataProvider="rules")
111 public void test_serialization(ZoneRules test, ZoneOffset expectedOffset) throws Exception {
112 ByteArrayOutputStream baos = new ByteArrayOutputStream();
113 ObjectOutputStream out = new ObjectOutputStream(baos);
114 out.writeObject(test);
115 baos.close();
116 byte[] bytes = baos.toByteArray();
117
118 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
119 ObjectInputStream in = new ObjectInputStream(bais);
120 ZoneRules result = (ZoneRules) in.readObject();
121
122 assertEquals(result, test);
123 assertEquals(result.getClass(), test.getClass());
124 }
125
126 //-----------------------------------------------------------------------
127 // basics
128 //-----------------------------------------------------------------------
129 @Test(dataProvider="rules")
130 public void test_getOffset_Instant(ZoneRules test, ZoneOffset expectedOffset) {
131 assertEquals(test.getOffset(INSTANT), expectedOffset);
132 assertEquals(test.getOffset((Instant) null), expectedOffset);
133 }
134
135 @Test(dataProvider="rules")
136 public void test_getOffset_LocalDateTime(ZoneRules test, ZoneOffset expectedOffset) {
137 assertEquals(test.getOffset(LDT), expectedOffset);
138 assertEquals(test.getOffset((LocalDateTime) null), expectedOffset);
139 }
140
141 @Test(dataProvider="rules")
142 public void test_getValidOffsets_LDT(ZoneRules test, ZoneOffset expectedOffset) {
143 assertEquals(test.getValidOffsets(LDT).size(), 1);
144 assertEquals(test.getValidOffsets(LDT).get(0), expectedOffset);
145 assertEquals(test.getValidOffsets(null).size(), 1);
146 assertEquals(test.getValidOffsets(null).get(0), expectedOffset);
147 }
148
149 @Test(dataProvider="rules")
150 public void test_getTransition_LDT(ZoneRules test, ZoneOffset expectedOffset) {
151 assertEquals(test.getTransition(LDT), null);
152 assertEquals(test.getTransition(null), null);
153 }
154
155 @Test(dataProvider="rules")
156 public void test_isValidOffset_LDT_ZO(ZoneRules test, ZoneOffset expectedOffset) {
157 assertEquals(test.isValidOffset(LDT, expectedOffset), true);
158 assertEquals(test.isValidOffset(LDT, ZoneOffset.UTC), false);
159 assertEquals(test.isValidOffset(LDT, null), false);
160
161 assertEquals(test.isValidOffset(null, expectedOffset), true);
162 assertEquals(test.isValidOffset(null, ZoneOffset.UTC), false);
163 assertEquals(test.isValidOffset(null, null), false);
164 }
165
166 @Test(dataProvider="rules")
167 public void test_getStandardOffset_Instant(ZoneRules test, ZoneOffset expectedOffset) {
168 assertEquals(test.getStandardOffset(INSTANT), expectedOffset);
169 assertEquals(test.getStandardOffset(null), expectedOffset);
170 }
171
172 @Test(dataProvider="rules")
173 public void test_getDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset) {
174 assertEquals(test.getDaylightSavings(INSTANT), Duration.ZERO);
175 assertEquals(test.getDaylightSavings(null), Duration.ZERO);
176 }
177
178 @Test(dataProvider="rules")
179 public void test_isDaylightSavings_Instant(ZoneRules test, ZoneOffset expectedOffset) {
180 assertEquals(test.isDaylightSavings(INSTANT), false);
181 assertEquals(test.isDaylightSavings(null), false);
182 }
183
184 //-------------------------------------------------------------------------
185 @Test(dataProvider="rules")
186 public void test_nextTransition_Instant(ZoneRules test, ZoneOffset expectedOffset) {
187 assertEquals(test.nextTransition(INSTANT), null);
188 assertEquals(test.nextTransition(null), null);
189 }
190
191 @Test(dataProvider="rules")
192 public void test_previousTransition_Instant(ZoneRules test, ZoneOffset expectedOffset) {
193 assertEquals(test.previousTransition(INSTANT), null);
194 assertEquals(test.previousTransition(null), null);
195 }
196
197 //-------------------------------------------------------------------------
198 @Test(dataProvider="rules")
199 public void test_getTransitions(ZoneRules test, ZoneOffset expectedOffset) {
200 assertEquals(test.getTransitions().size(), 0);
201 }
202
203 @Test(expectedExceptions=UnsupportedOperationException.class)
204 public void test_getTransitions_immutable() {
205 ZoneRules test = make(OFFSET_PTWO);
206 test.getTransitions().add(ZoneOffsetTransition.of(LDT, OFFSET_PONE, OFFSET_PTWO));
207 }
208
209 @Test(dataProvider="rules")
210 public void test_getTransitionRules(ZoneRules test, ZoneOffset expectedOffset) {
211 assertEquals(test.getTransitionRules().size(), 0);
212 }
213
214 @Test(expectedExceptions=UnsupportedOperationException.class)
215 public void test_getTransitionRules_immutable() {
216 ZoneRules test = make(OFFSET_PTWO);
217 test.getTransitionRules().add(ZoneOffsetTransitionRule.of(Month.JULY, 2, null, LocalTime.of(12, 30), false, TimeDefinition.STANDARD, OFFSET_PONE, OFFSET_PTWO, OFFSET_PONE));
218 }
219
220 //-----------------------------------------------------------------------
221 // equals() / hashCode()
222 //-----------------------------------------------------------------------
223 @Test
224 public void test_equalsHashCode() {
225 ZoneRules a = make(OFFSET_PONE);
226 ZoneRules b = make(OFFSET_PTWO);
227
228 assertEquals(a.equals(a), true);
229 assertEquals(a.equals(b), false);
230 assertEquals(b.equals(a), false);
231 assertEquals(b.equals(b), true);
232
233 assertEquals(a.equals("Rubbish"), false);
234 assertEquals(a.equals(null), false);
235
236 assertEquals(a.hashCode() == a.hashCode(), true);
237 assertEquals(b.hashCode() == b.hashCode(), true);
238 }
239
240 }
|