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 }