001 /* 002 * Copyright 2001-2006 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 023 import junit.framework.TestCase; 024 import junit.framework.TestSuite; 025 026 /** 027 * This class is a Junit unit test for Days. 028 * 029 * @author Stephen Colebourne 030 */ 031 public class TestDays extends TestCase { 032 // Test in 2002/03 as time zones are more well known 033 // (before the late 90's they were all over the place) 034 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris"); 035 036 public static void main(String[] args) { 037 junit.textui.TestRunner.run(suite()); 038 } 039 040 public static TestSuite suite() { 041 return new TestSuite(TestDays.class); 042 } 043 044 public TestDays(String name) { 045 super(name); 046 } 047 048 protected void setUp() throws Exception { 049 } 050 051 protected void tearDown() throws Exception { 052 } 053 054 //----------------------------------------------------------------------- 055 public void testConstants() { 056 assertEquals(0, Days.ZERO.getDays()); 057 assertEquals(1, Days.ONE.getDays()); 058 assertEquals(2, Days.TWO.getDays()); 059 assertEquals(3, Days.THREE.getDays()); 060 assertEquals(4, Days.FOUR.getDays()); 061 assertEquals(5, Days.FIVE.getDays()); 062 assertEquals(6, Days.SIX.getDays()); 063 assertEquals(7, Days.SEVEN.getDays()); 064 assertEquals(Integer.MAX_VALUE, Days.MAX_VALUE.getDays()); 065 assertEquals(Integer.MIN_VALUE, Days.MIN_VALUE.getDays()); 066 } 067 068 //----------------------------------------------------------------------- 069 public void testFactory_days_int() { 070 assertSame(Days.ZERO, Days.days(0)); 071 assertSame(Days.ONE, Days.days(1)); 072 assertSame(Days.TWO, Days.days(2)); 073 assertSame(Days.THREE, Days.days(3)); 074 assertSame(Days.FOUR, Days.days(4)); 075 assertSame(Days.FIVE, Days.days(5)); 076 assertSame(Days.SIX, Days.days(6)); 077 assertSame(Days.SEVEN, Days.days(7)); 078 assertSame(Days.MAX_VALUE, Days.days(Integer.MAX_VALUE)); 079 assertSame(Days.MIN_VALUE, Days.days(Integer.MIN_VALUE)); 080 assertEquals(-1, Days.days(-1).getDays()); 081 assertEquals(8, Days.days(8).getDays()); 082 } 083 084 //----------------------------------------------------------------------- 085 public void testFactory_daysBetween_RInstant() { 086 DateTime start = new DateTime(2006, 6, 9, 12, 0, 0, 0, PARIS); 087 DateTime end1 = new DateTime(2006, 6, 12, 12, 0, 0, 0, PARIS); 088 DateTime end2 = new DateTime(2006, 6, 15, 18, 0, 0, 0, PARIS); 089 090 assertEquals(3, Days.daysBetween(start, end1).getDays()); 091 assertEquals(0, Days.daysBetween(start, start).getDays()); 092 assertEquals(0, Days.daysBetween(end1, end1).getDays()); 093 assertEquals(-3, Days.daysBetween(end1, start).getDays()); 094 assertEquals(6, Days.daysBetween(start, end2).getDays()); 095 } 096 097 public void testFactory_daysBetween_RPartial() { 098 LocalDate start = new LocalDate(2006, 6, 9); 099 LocalDate end1 = new LocalDate(2006, 6, 12); 100 YearMonthDay end2 = new YearMonthDay(2006, 6, 15); 101 102 assertEquals(3, Days.daysBetween(start, end1).getDays()); 103 assertEquals(0, Days.daysBetween(start, start).getDays()); 104 assertEquals(0, Days.daysBetween(end1, end1).getDays()); 105 assertEquals(-3, Days.daysBetween(end1, start).getDays()); 106 assertEquals(6, Days.daysBetween(start, end2).getDays()); 107 } 108 109 public void testFactory_daysIn_RInterval() { 110 DateTime start = new DateTime(2006, 6, 9, 12, 0, 0, 0, PARIS); 111 DateTime end1 = new DateTime(2006, 6, 12, 12, 0, 0, 0, PARIS); 112 DateTime end2 = new DateTime(2006, 6, 15, 18, 0, 0, 0, PARIS); 113 114 assertEquals(0, Days.daysIn((ReadableInterval) null).getDays()); 115 assertEquals(3, Days.daysIn(new Interval(start, end1)).getDays()); 116 assertEquals(0, Days.daysIn(new Interval(start, start)).getDays()); 117 assertEquals(0, Days.daysIn(new Interval(end1, end1)).getDays()); 118 assertEquals(6, Days.daysIn(new Interval(start, end2)).getDays()); 119 } 120 121 public void testFactory_standardDaysIn_RPeriod() { 122 assertEquals(0, Days.standardDaysIn((ReadablePeriod) null).getDays()); 123 assertEquals(0, Days.standardDaysIn(Period.ZERO).getDays()); 124 assertEquals(1, Days.standardDaysIn(new Period(0, 0, 0, 1, 0, 0, 0, 0)).getDays()); 125 assertEquals(123, Days.standardDaysIn(Period.days(123)).getDays()); 126 assertEquals(-987, Days.standardDaysIn(Period.days(-987)).getDays()); 127 assertEquals(1, Days.standardDaysIn(Period.hours(47)).getDays()); 128 assertEquals(2, Days.standardDaysIn(Period.hours(48)).getDays()); 129 assertEquals(2, Days.standardDaysIn(Period.hours(49)).getDays()); 130 assertEquals(14, Days.standardDaysIn(Period.weeks(2)).getDays()); 131 try { 132 Days.standardDaysIn(Period.months(1)); 133 fail(); 134 } catch (IllegalArgumentException ex) { 135 // expeceted 136 } 137 } 138 139 public void testFactory_parseDays_String() { 140 assertEquals(0, Days.parseDays((String) null).getDays()); 141 assertEquals(0, Days.parseDays("P0D").getDays()); 142 assertEquals(1, Days.parseDays("P1D").getDays()); 143 assertEquals(-3, Days.parseDays("P-3D").getDays()); 144 assertEquals(2, Days.parseDays("P0Y0M2D").getDays()); 145 assertEquals(2, Days.parseDays("P2DT0H0M").getDays()); 146 try { 147 Days.parseDays("P1Y1D"); 148 fail(); 149 } catch (IllegalArgumentException ex) { 150 // expeceted 151 } 152 try { 153 Days.parseDays("P1DT1H"); 154 fail(); 155 } catch (IllegalArgumentException ex) { 156 // expeceted 157 } 158 } 159 160 //----------------------------------------------------------------------- 161 public void testGetMethods() { 162 Days test = Days.days(20); 163 assertEquals(20, test.getDays()); 164 } 165 166 public void testGetFieldType() { 167 Days test = Days.days(20); 168 assertEquals(DurationFieldType.days(), test.getFieldType()); 169 } 170 171 public void testGetPeriodType() { 172 Days test = Days.days(20); 173 assertEquals(PeriodType.days(), test.getPeriodType()); 174 } 175 176 //----------------------------------------------------------------------- 177 public void testIsGreaterThan() { 178 assertEquals(true, Days.THREE.isGreaterThan(Days.TWO)); 179 assertEquals(false, Days.THREE.isGreaterThan(Days.THREE)); 180 assertEquals(false, Days.TWO.isGreaterThan(Days.THREE)); 181 assertEquals(true, Days.ONE.isGreaterThan(null)); 182 assertEquals(false, Days.days(-1).isGreaterThan(null)); 183 } 184 185 public void testIsLessThan() { 186 assertEquals(false, Days.THREE.isLessThan(Days.TWO)); 187 assertEquals(false, Days.THREE.isLessThan(Days.THREE)); 188 assertEquals(true, Days.TWO.isLessThan(Days.THREE)); 189 assertEquals(false, Days.ONE.isLessThan(null)); 190 assertEquals(true, Days.days(-1).isLessThan(null)); 191 } 192 193 //----------------------------------------------------------------------- 194 public void testToString() { 195 Days test = Days.days(20); 196 assertEquals("P20D", test.toString()); 197 198 test = Days.days(-20); 199 assertEquals("P-20D", test.toString()); 200 } 201 202 //----------------------------------------------------------------------- 203 public void testSerialization() throws Exception { 204 Days test = Days.SEVEN; 205 206 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 207 ObjectOutputStream oos = new ObjectOutputStream(baos); 208 oos.writeObject(test); 209 byte[] bytes = baos.toByteArray(); 210 oos.close(); 211 212 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 213 ObjectInputStream ois = new ObjectInputStream(bais); 214 Days result = (Days) ois.readObject(); 215 ois.close(); 216 217 assertSame(test, result); 218 } 219 220 //----------------------------------------------------------------------- 221 public void testToStandardWeeks() { 222 Days test = Days.days(14); 223 Weeks expected = Weeks.weeks(2); 224 assertEquals(expected, test.toStandardWeeks()); 225 } 226 227 public void testToStandardHours() { 228 Days test = Days.days(2); 229 Hours expected = Hours.hours(2 * 24); 230 assertEquals(expected, test.toStandardHours()); 231 232 try { 233 Days.MAX_VALUE.toStandardHours(); 234 fail(); 235 } catch (ArithmeticException ex) { 236 // expected 237 } 238 } 239 240 public void testToStandardMinutes() { 241 Days test = Days.days(2); 242 Minutes expected = Minutes.minutes(2 * 24 * 60); 243 assertEquals(expected, test.toStandardMinutes()); 244 245 try { 246 Days.MAX_VALUE.toStandardMinutes(); 247 fail(); 248 } catch (ArithmeticException ex) { 249 // expected 250 } 251 } 252 253 public void testToStandardSeconds() { 254 Days test = Days.days(2); 255 Seconds expected = Seconds.seconds(2 * 24 * 60 * 60); 256 assertEquals(expected, test.toStandardSeconds()); 257 258 try { 259 Days.MAX_VALUE.toStandardSeconds(); 260 fail(); 261 } catch (ArithmeticException ex) { 262 // expected 263 } 264 } 265 266 public void testToStandardDuration() { 267 Days test = Days.days(20); 268 Duration expected = new Duration(20L * DateTimeConstants.MILLIS_PER_DAY); 269 assertEquals(expected, test.toStandardDuration()); 270 271 expected = new Duration(((long) Integer.MAX_VALUE) * DateTimeConstants.MILLIS_PER_DAY); 272 assertEquals(expected, Days.MAX_VALUE.toStandardDuration()); 273 } 274 275 //----------------------------------------------------------------------- 276 public void testPlus_int() { 277 Days test2 = Days.days(2); 278 Days result = test2.plus(3); 279 assertEquals(2, test2.getDays()); 280 assertEquals(5, result.getDays()); 281 282 assertEquals(1, Days.ONE.plus(0).getDays()); 283 284 try { 285 Days.MAX_VALUE.plus(1); 286 fail(); 287 } catch (ArithmeticException ex) { 288 // expected 289 } 290 } 291 292 public void testPlus_Days() { 293 Days test2 = Days.days(2); 294 Days test3 = Days.days(3); 295 Days result = test2.plus(test3); 296 assertEquals(2, test2.getDays()); 297 assertEquals(3, test3.getDays()); 298 assertEquals(5, result.getDays()); 299 300 assertEquals(1, Days.ONE.plus(Days.ZERO).getDays()); 301 assertEquals(1, Days.ONE.plus((Days) null).getDays()); 302 303 try { 304 Days.MAX_VALUE.plus(Days.ONE); 305 fail(); 306 } catch (ArithmeticException ex) { 307 // expected 308 } 309 } 310 311 public void testMinus_int() { 312 Days test2 = Days.days(2); 313 Days result = test2.minus(3); 314 assertEquals(2, test2.getDays()); 315 assertEquals(-1, result.getDays()); 316 317 assertEquals(1, Days.ONE.minus(0).getDays()); 318 319 try { 320 Days.MIN_VALUE.minus(1); 321 fail(); 322 } catch (ArithmeticException ex) { 323 // expected 324 } 325 } 326 327 public void testMinus_Days() { 328 Days test2 = Days.days(2); 329 Days test3 = Days.days(3); 330 Days result = test2.minus(test3); 331 assertEquals(2, test2.getDays()); 332 assertEquals(3, test3.getDays()); 333 assertEquals(-1, result.getDays()); 334 335 assertEquals(1, Days.ONE.minus(Days.ZERO).getDays()); 336 assertEquals(1, Days.ONE.minus((Days) null).getDays()); 337 338 try { 339 Days.MIN_VALUE.minus(Days.ONE); 340 fail(); 341 } catch (ArithmeticException ex) { 342 // expected 343 } 344 } 345 346 public void testMultipliedBy_int() { 347 Days test = Days.days(2); 348 assertEquals(6, test.multipliedBy(3).getDays()); 349 assertEquals(2, test.getDays()); 350 assertEquals(-6, test.multipliedBy(-3).getDays()); 351 assertSame(test, test.multipliedBy(1)); 352 353 Days halfMax = Days.days(Integer.MAX_VALUE / 2 + 1); 354 try { 355 halfMax.multipliedBy(2); 356 fail(); 357 } catch (ArithmeticException ex) { 358 // expected 359 } 360 } 361 362 public void testDividedBy_int() { 363 Days test = Days.days(12); 364 assertEquals(6, test.dividedBy(2).getDays()); 365 assertEquals(12, test.getDays()); 366 assertEquals(4, test.dividedBy(3).getDays()); 367 assertEquals(3, test.dividedBy(4).getDays()); 368 assertEquals(2, test.dividedBy(5).getDays()); 369 assertEquals(2, test.dividedBy(6).getDays()); 370 assertSame(test, test.dividedBy(1)); 371 372 try { 373 Days.ONE.dividedBy(0); 374 fail(); 375 } catch (ArithmeticException ex) { 376 // expected 377 } 378 } 379 380 public void testNegated() { 381 Days test = Days.days(12); 382 assertEquals(-12, test.negated().getDays()); 383 assertEquals(12, test.getDays()); 384 385 try { 386 Days.MIN_VALUE.negated(); 387 fail(); 388 } catch (ArithmeticException ex) { 389 // expected 390 } 391 } 392 393 //----------------------------------------------------------------------- 394 public void testAddToLocalDate() { 395 Days test = Days.days(20); 396 LocalDate date = new LocalDate(2006, 6, 1); 397 LocalDate expected = new LocalDate(2006, 6, 21); 398 assertEquals(expected, date.plus(test)); 399 } 400 401 }