001 /*
002 * Copyright 2001-2005 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.time;
017
018 import java.io.ByteArrayInputStream;
019 import java.io.ByteArrayOutputStream;
020 import java.io.ObjectInputStream;
021 import java.io.ObjectOutputStream;
022 import java.util.Locale;
023 import java.util.TimeZone;
024
025 import junit.framework.TestCase;
026 import junit.framework.TestSuite;
027
028 import org.joda.time.base.BasePeriod;
029
030 /**
031 * This class is a Junit unit test for MutableDuration.
032 *
033 * @author Stephen Colebourne
034 */
035 public class TestMutablePeriod_Basics extends TestCase {
036 // Test in 2002/03 as time zones are more well known
037 // (before the late 90's they were all over the place)
038
039 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
040 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
041
042 long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
043 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 +
044 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
045 366 + 365;
046 long y2003days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
047 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 +
048 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
049 366 + 365 + 365;
050
051 // 2002-06-09
052 private long TEST_TIME_NOW =
053 (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
054
055 // 2002-04-05
056 private long TEST_TIME1 =
057 (y2002days + 31L + 28L + 31L + 5L -1L) * DateTimeConstants.MILLIS_PER_DAY
058 + 12L * DateTimeConstants.MILLIS_PER_HOUR
059 + 24L * DateTimeConstants.MILLIS_PER_MINUTE;
060
061 // 2003-05-06
062 private long TEST_TIME2 =
063 (y2003days + 31L + 28L + 31L + 30L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY
064 + 14L * DateTimeConstants.MILLIS_PER_HOUR
065 + 28L * DateTimeConstants.MILLIS_PER_MINUTE;
066
067 private DateTimeZone originalDateTimeZone = null;
068 private TimeZone originalTimeZone = null;
069 private Locale originalLocale = null;
070
071 public static void main(String[] args) {
072 junit.textui.TestRunner.run(suite());
073 }
074
075 public static TestSuite suite() {
076 return new TestSuite(TestMutablePeriod_Basics.class);
077 }
078
079 public TestMutablePeriod_Basics(String name) {
080 super(name);
081 }
082
083 protected void setUp() throws Exception {
084 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
085 originalDateTimeZone = DateTimeZone.getDefault();
086 originalTimeZone = TimeZone.getDefault();
087 originalLocale = Locale.getDefault();
088 DateTimeZone.setDefault(LONDON);
089 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
090 Locale.setDefault(Locale.UK);
091 }
092
093 protected void tearDown() throws Exception {
094 DateTimeUtils.setCurrentMillisSystem();
095 DateTimeZone.setDefault(originalDateTimeZone);
096 TimeZone.setDefault(originalTimeZone);
097 Locale.setDefault(originalLocale);
098 originalDateTimeZone = null;
099 originalTimeZone = null;
100 originalLocale = null;
101 }
102
103 //-----------------------------------------------------------------------
104 public void testTest() {
105 assertEquals("2002-06-09T00:00:00.000Z", new Instant(TEST_TIME_NOW).toString());
106 assertEquals("2002-04-05T12:24:00.000Z", new Instant(TEST_TIME1).toString());
107 assertEquals("2003-05-06T14:28:00.000Z", new Instant(TEST_TIME2).toString());
108 }
109
110 //-----------------------------------------------------------------------
111 public void testGetPeriodType() {
112 MutablePeriod test = new MutablePeriod();
113 assertEquals(PeriodType.standard(), test.getPeriodType());
114 }
115
116 public void testGetMethods() {
117 MutablePeriod test = new MutablePeriod();
118 assertEquals(0, test.getYears());
119 assertEquals(0, test.getMonths());
120 assertEquals(0, test.getDays());
121 assertEquals(0, test.getWeeks());
122 assertEquals(0, test.getDays());
123 assertEquals(0, test.getHours());
124 assertEquals(0, test.getMinutes());
125 assertEquals(0, test.getSeconds());
126 assertEquals(0, test.getMillis());
127 }
128
129 public void testEqualsHashCode() {
130 MutablePeriod test1 = new MutablePeriod(123L);
131 MutablePeriod test2 = new MutablePeriod(123L);
132 assertEquals(true, test1.equals(test2));
133 assertEquals(true, test2.equals(test1));
134 assertEquals(true, test1.equals(test1));
135 assertEquals(true, test2.equals(test2));
136 assertEquals(true, test1.hashCode() == test2.hashCode());
137 assertEquals(true, test1.hashCode() == test1.hashCode());
138 assertEquals(true, test2.hashCode() == test2.hashCode());
139
140 MutablePeriod test3 = new MutablePeriod(321L);
141 assertEquals(false, test1.equals(test3));
142 assertEquals(false, test2.equals(test3));
143 assertEquals(false, test3.equals(test1));
144 assertEquals(false, test3.equals(test2));
145 assertEquals(false, test1.hashCode() == test3.hashCode());
146 assertEquals(false, test2.hashCode() == test3.hashCode());
147
148 assertEquals(false, test1.equals("Hello"));
149 assertEquals(true, test1.equals(new MockMutablePeriod(123L)));
150 assertEquals(false, test1.equals(new Period(123L, PeriodType.dayTime())));
151 }
152
153 class MockMutablePeriod extends BasePeriod {
154 public MockMutablePeriod(long value) {
155 super(value, null, null);
156 }
157 }
158
159 //-----------------------------------------------------------------------
160 public void testSerialization() throws Exception {
161 MutablePeriod test = new MutablePeriod(123L);
162
163 ByteArrayOutputStream baos = new ByteArrayOutputStream();
164 ObjectOutputStream oos = new ObjectOutputStream(baos);
165 oos.writeObject(test);
166 byte[] bytes = baos.toByteArray();
167 oos.close();
168
169 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
170 ObjectInputStream ois = new ObjectInputStream(bais);
171 MutablePeriod result = (MutablePeriod) ois.readObject();
172 ois.close();
173
174 assertEquals(test, result);
175 }
176
177 // //-----------------------------------------------------------------------
178 // public void testAddTo1() {
179 // long expected = TEST_TIME_NOW;
180 // expected = ISOChronology.getInstance().years().add(expected, 1);
181 // expected = ISOChronology.getInstance().months().add(expected, 2);
182 // expected = ISOChronology.getInstance().weeks().add(expected, 3);
183 // expected = ISOChronology.getInstance().days().add(expected, 4);
184 // expected = ISOChronology.getInstance().hours().add(expected, 5);
185 // expected = ISOChronology.getInstance().minutes().add(expected, 6);
186 // expected = ISOChronology.getInstance().seconds().add(expected, 7);
187 // expected = ISOChronology.getInstance().millis().add(expected, 8);
188 //
189 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
190 // long added = test.addTo(TEST_TIME_NOW, 1);
191 // assertEquals(expected, added);
192 // }
193 //
194 // public void testAddTo2() {
195 // long expected = TEST_TIME_NOW;
196 // expected = ISOChronology.getInstance().years().add(expected, -2);
197 // expected = ISOChronology.getInstance().months().add(expected, -4);
198 // expected = ISOChronology.getInstance().weeks().add(expected, -6);
199 // expected = ISOChronology.getInstance().days().add(expected, -8);
200 // expected = ISOChronology.getInstance().hours().add(expected, -10);
201 // expected = ISOChronology.getInstance().minutes().add(expected, -12);
202 // expected = ISOChronology.getInstance().seconds().add(expected, -14);
203 // expected = ISOChronology.getInstance().millis().add(expected, -16);
204 //
205 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
206 // long added = test.addTo(TEST_TIME_NOW, -2);
207 // assertEquals(expected, added);
208 // }
209 //
210 // public void testAddTo3() {
211 // long expected = TEST_TIME_NOW;
212 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
213 // long added = test.addTo(TEST_TIME_NOW, 0);
214 // assertEquals(expected, added);
215 // }
216 //
217 // public void testAddTo4() {
218 // long expected = TEST_TIME_NOW + 100L;
219 // MutablePeriod test = new MutablePeriod(100L);
220 // long added = test.addTo(TEST_TIME_NOW, 1);
221 // assertEquals(expected, added);
222 // }
223 //
224 // //-----------------------------------------------------------------------
225 // public void testAddToWithChronology1() {
226 // long expected = TEST_TIME_NOW;
227 // expected = ISOChronology.getInstance().years().add(expected, 1);
228 // expected = ISOChronology.getInstance().months().add(expected, 2);
229 // expected = ISOChronology.getInstance().weeks().add(expected, 3);
230 // expected = ISOChronology.getInstance().days().add(expected, 4);
231 // expected = ISOChronology.getInstance().hours().add(expected, 5);
232 // expected = ISOChronology.getInstance().minutes().add(expected, 6);
233 // expected = ISOChronology.getInstance().seconds().add(expected, 7);
234 // expected = ISOChronology.getInstance().millis().add(expected, 8);
235 //
236 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
237 // long added = test.addTo(TEST_TIME_NOW, 1, ISOChronology.getInstance());
238 // assertEquals(expected, added);
239 // }
240 //
241 // public void testAddToWithChronology2() {
242 // long expected = TEST_TIME_NOW;
243 // expected = ISOChronology.getInstanceUTC().years().add(expected, -2);
244 // expected = ISOChronology.getInstanceUTC().months().add(expected, -4);
245 // expected = ISOChronology.getInstanceUTC().weeks().add(expected, -6);
246 // expected = ISOChronology.getInstanceUTC().days().add(expected, -8);
247 // expected = ISOChronology.getInstanceUTC().hours().add(expected, -10);
248 // expected = ISOChronology.getInstanceUTC().minutes().add(expected, -12);
249 // expected = ISOChronology.getInstanceUTC().seconds().add(expected, -14);
250 // expected = ISOChronology.getInstanceUTC().millis().add(expected, -16);
251 //
252 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
253 // long added = test.addTo(TEST_TIME_NOW, -2, ISOChronology.getInstanceUTC()); // chrono specified so use it
254 // assertEquals(expected, added);
255 // }
256 //
257 // public void testAddToWithChronology3() {
258 // long expected = TEST_TIME_NOW;
259 // expected = ISOChronology.getInstance().years().add(expected, -2);
260 // expected = ISOChronology.getInstance().months().add(expected, -4);
261 // expected = ISOChronology.getInstance().weeks().add(expected, -6);
262 // expected = ISOChronology.getInstance().days().add(expected, -8);
263 // expected = ISOChronology.getInstance().hours().add(expected, -10);
264 // expected = ISOChronology.getInstance().minutes().add(expected, -12);
265 // expected = ISOChronology.getInstance().seconds().add(expected, -14);
266 // expected = ISOChronology.getInstance().millis().add(expected, -16);
267 //
268 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
269 // long added = test.addTo(TEST_TIME_NOW, -2, null); // no chrono so use default
270 // assertEquals(expected, added);
271 // }
272 //
273 // //-----------------------------------------------------------------------
274 // public void testAddToRI1() {
275 // long expected = TEST_TIME_NOW;
276 // expected = ISOChronology.getInstance().years().add(expected, 1);
277 // expected = ISOChronology.getInstance().months().add(expected, 2);
278 // expected = ISOChronology.getInstance().weeks().add(expected, 3);
279 // expected = ISOChronology.getInstance().days().add(expected, 4);
280 // expected = ISOChronology.getInstance().hours().add(expected, 5);
281 // expected = ISOChronology.getInstance().minutes().add(expected, 6);
282 // expected = ISOChronology.getInstance().seconds().add(expected, 7);
283 // expected = ISOChronology.getInstance().millis().add(expected, 8);
284 //
285 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
286 // DateTime added = test.addTo(new Instant(), 1); // Instant has no time zone, use default
287 // assertEquals(expected, added.getMillis());
288 // assertEquals(ISOChronology.getInstance(), added.getChronology());
289 // }
290 //
291 // public void testAddToRI2() {
292 // long expected = TEST_TIME_NOW;
293 // expected = ISOChronology.getInstance().years().add(expected, -2);
294 // expected = ISOChronology.getInstance().months().add(expected, -4);
295 // expected = ISOChronology.getInstance().weeks().add(expected, -6);
296 // expected = ISOChronology.getInstance().days().add(expected, -8);
297 // expected = ISOChronology.getInstance().hours().add(expected, -10);
298 // expected = ISOChronology.getInstance().minutes().add(expected, -12);
299 // expected = ISOChronology.getInstance().seconds().add(expected, -14);
300 // expected = ISOChronology.getInstance().millis().add(expected, -16);
301 //
302 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
303 // DateTime added = test.addTo(new Instant(), -2); // Instant has no time zone, use default
304 // assertEquals(expected, added.getMillis());
305 // assertEquals(ISOChronology.getInstance(), added.getChronology());
306 // }
307 //
308 // public void testAddToRI3() {
309 // long expected = TEST_TIME_NOW;
310 // expected = ISOChronology.getInstanceUTC().years().add(expected, -2);
311 // expected = ISOChronology.getInstanceUTC().months().add(expected, -4);
312 // expected = ISOChronology.getInstanceUTC().weeks().add(expected, -6);
313 // expected = ISOChronology.getInstanceUTC().days().add(expected, -8);
314 // expected = ISOChronology.getInstanceUTC().hours().add(expected, -10);
315 // expected = ISOChronology.getInstanceUTC().minutes().add(expected, -12);
316 // expected = ISOChronology.getInstanceUTC().seconds().add(expected, -14);
317 // expected = ISOChronology.getInstanceUTC().millis().add(expected, -16);
318 //
319 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
320 // DateTime added = test.addTo(new DateTime(ISOChronology.getInstanceUTC()), -2); // DateTime has UTC time zone
321 // assertEquals(expected, added.getMillis());
322 // assertEquals(ISOChronology.getInstanceUTC(), added.getChronology());
323 // }
324 //
325 // public void testAddToRI4() {
326 // long expected = TEST_TIME_NOW;
327 // expected = ISOChronology.getInstance(PARIS).years().add(expected, -2);
328 // expected = ISOChronology.getInstance(PARIS).months().add(expected, -4);
329 // expected = ISOChronology.getInstance(PARIS).weeks().add(expected, -6);
330 // expected = ISOChronology.getInstance(PARIS).days().add(expected, -8);
331 // expected = ISOChronology.getInstance(PARIS).hours().add(expected, -10);
332 // expected = ISOChronology.getInstance(PARIS).minutes().add(expected, -12);
333 // expected = ISOChronology.getInstance(PARIS).seconds().add(expected, -14);
334 // expected = ISOChronology.getInstance(PARIS).millis().add(expected, -16);
335 //
336 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
337 // DateTime added = test.addTo(new DateTime(PARIS), -2); // DateTime has PARIS time zone
338 // assertEquals(expected, added.getMillis());
339 // assertEquals(ISOChronology.getInstance(PARIS), added.getChronology());
340 // }
341 //
342 // public void testAddToRI5() {
343 // long expected = TEST_TIME_NOW;
344 // expected = ISOChronology.getInstance().years().add(expected, -2);
345 // expected = ISOChronology.getInstance().months().add(expected, -4);
346 // expected = ISOChronology.getInstance().weeks().add(expected, -6);
347 // expected = ISOChronology.getInstance().days().add(expected, -8);
348 // expected = ISOChronology.getInstance().hours().add(expected, -10);
349 // expected = ISOChronology.getInstance().minutes().add(expected, -12);
350 // expected = ISOChronology.getInstance().seconds().add(expected, -14);
351 // expected = ISOChronology.getInstance().millis().add(expected, -16);
352 //
353 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
354 // DateTime added = test.addTo(null, -2); // null has no time zone, use default
355 // assertEquals(expected, added.getMillis());
356 // assertEquals(ISOChronology.getInstance(), added.getChronology());
357 // }
358 //
359 // //-----------------------------------------------------------------------
360 // public void testAddIntoRWI1() {
361 // long expected = TEST_TIME_NOW;
362 // expected = ISOChronology.getInstance().years().add(expected, 1);
363 // expected = ISOChronology.getInstance().months().add(expected, 2);
364 // expected = ISOChronology.getInstance().weeks().add(expected, 3);
365 // expected = ISOChronology.getInstance().days().add(expected, 4);
366 // expected = ISOChronology.getInstance().hours().add(expected, 5);
367 // expected = ISOChronology.getInstance().minutes().add(expected, 6);
368 // expected = ISOChronology.getInstance().seconds().add(expected, 7);
369 // expected = ISOChronology.getInstance().millis().add(expected, 8);
370 //
371 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
372 // MutableDateTime mdt = new MutableDateTime();
373 // test.addInto(mdt, 1);
374 // assertEquals(expected, mdt.getMillis());
375 // }
376 //
377 // public void testAddIntoRWI2() {
378 // long expected = TEST_TIME_NOW;
379 // expected = ISOChronology.getInstance().years().add(expected, -2);
380 // expected = ISOChronology.getInstance().months().add(expected, -4);
381 // expected = ISOChronology.getInstance().weeks().add(expected, -6);
382 // expected = ISOChronology.getInstance().days().add(expected, -8);
383 // expected = ISOChronology.getInstance().hours().add(expected, -10);
384 // expected = ISOChronology.getInstance().minutes().add(expected, -12);
385 // expected = ISOChronology.getInstance().seconds().add(expected, -14);
386 // expected = ISOChronology.getInstance().millis().add(expected, -16);
387 //
388 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8, PeriodType.standard());
389 // MutableDateTime mdt = new MutableDateTime();
390 // test.addInto(mdt, -2); // MutableDateTime has a chronology, use it
391 // assertEquals(expected, mdt.getMillis());
392 // }
393 //
394 // public void testAddIntoRWI3() {
395 // MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
396 // try {
397 // test.addInto(null, 1);
398 // fail();
399 // } catch (IllegalArgumentException ex) {}
400 // }
401
402 //-----------------------------------------------------------------------
403 public void testToString() {
404 MutablePeriod test = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8);
405 assertEquals("P1Y2M3W4DT5H6M7.008S", test.toString());
406
407 test = new MutablePeriod(0, 0, 0, 0, 0, 0, 0, 0);
408 assertEquals("PT0S", test.toString());
409
410 test = new MutablePeriod(12345L);
411 assertEquals("PT12.345S", test.toString());
412 }
413
414 //-----------------------------------------------------------------------
415 public void testToPeriod() {
416 MutablePeriod test = new MutablePeriod(123L);
417 Period result = test.toPeriod();
418 assertEquals(test, result);
419 }
420
421 public void testToMutablePeriod() {
422 MutablePeriod test = new MutablePeriod(123L);
423 MutablePeriod result = test.toMutablePeriod();
424 assertEquals(test, result);
425 }
426
427 //-----------------------------------------------------------------------
428 // public void testToDurationMillisFrom() {
429 // MutablePeriod test = new MutablePeriod(123L);
430 // assertEquals(123L, test.toDurationMillisFrom(0L, null));
431 // }
432
433 public void testToDurationFrom() {
434 MutablePeriod test = new MutablePeriod(123L);
435 assertEquals(new Duration(123L), test.toDurationFrom(new Instant(0L)));
436 }
437
438 //-----------------------------------------------------------------------
439 public void testCopy() {
440 MutablePeriod test = new MutablePeriod(123L);
441 MutablePeriod copy = test.copy();
442 assertEquals(test.getPeriodType(), copy.getPeriodType());
443 assertEquals(test, copy);
444 }
445
446 //-----------------------------------------------------------------------
447 public void testClone() {
448 MutablePeriod test = new MutablePeriod(123L);
449 MutablePeriod copy = (MutablePeriod) test.clone();
450 assertEquals(test.getPeriodType(), copy.getPeriodType());
451 assertEquals(test, copy);
452 }
453
454 }