View Javadoc

1   /*
2    *  Copyright 2001-2006 Stephen Colebourne
3    *
4    *  Licensed under the Apache License, Version 2.0 (the "License");
5    *  you may not use this file except in compliance with the License.
6    *  You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *  Unless required by applicable law or agreed to in writing, software
11   *  distributed under the License is distributed on an "AS IS" BASIS,
12   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *  See the License for the specific language governing permissions and
14   *  limitations under the License.
15   */
16  package org.joda.time;
17  
18  import java.io.ByteArrayInputStream;
19  import java.io.ByteArrayOutputStream;
20  import java.io.ObjectInputStream;
21  import java.io.ObjectOutputStream;
22  
23  import junit.framework.TestCase;
24  import junit.framework.TestSuite;
25  
26  /**
27   * This class is a Junit unit test for Weeks.
28   *
29   * @author Stephen Colebourne
30   */
31  public class TestWeeks extends TestCase {
32      // Test in 2002/03 as time zones are more well known
33      // (before the late 90's they were all over the place)
34      private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
35  
36      public static void main(String[] args) {
37          junit.textui.TestRunner.run(suite());
38      }
39  
40      public static TestSuite suite() {
41          return new TestSuite(TestWeeks.class);
42      }
43  
44      public TestWeeks(String name) {
45          super(name);
46      }
47  
48      protected void setUp() throws Exception {
49      }
50  
51      protected void tearDown() throws Exception {
52      }
53  
54      //-----------------------------------------------------------------------
55      public void testConstants() {
56          assertEquals(0, Weeks.ZERO.getWeeks());
57          assertEquals(1, Weeks.ONE.getWeeks());
58          assertEquals(2, Weeks.TWO.getWeeks());
59          assertEquals(3, Weeks.THREE.getWeeks());
60          assertEquals(Integer.MAX_VALUE, Weeks.MAX_VALUE.getWeeks());
61          assertEquals(Integer.MIN_VALUE, Weeks.MIN_VALUE.getWeeks());
62      }
63  
64      //-----------------------------------------------------------------------
65      public void testFactory_weeks_int() {
66          assertSame(Weeks.ZERO, Weeks.weeks(0));
67          assertSame(Weeks.ONE, Weeks.weeks(1));
68          assertSame(Weeks.TWO, Weeks.weeks(2));
69          assertSame(Weeks.THREE, Weeks.weeks(3));
70          assertSame(Weeks.MAX_VALUE, Weeks.weeks(Integer.MAX_VALUE));
71          assertSame(Weeks.MIN_VALUE, Weeks.weeks(Integer.MIN_VALUE));
72          assertEquals(-1, Weeks.weeks(-1).getWeeks());
73          assertEquals(4, Weeks.weeks(4).getWeeks());
74      }
75  
76      //-----------------------------------------------------------------------
77      public void testFactory_weeksBetween_RInstant() {
78          DateTime start = new DateTime(2006, 6, 9, 12, 0, 0, 0, PARIS);
79          DateTime end1 = new DateTime(2006, 6, 30, 12, 0, 0, 0, PARIS);
80          DateTime end2 = new DateTime(2006, 7, 21, 12, 0, 0, 0, PARIS);
81          
82          assertEquals(3, Weeks.weeksBetween(start, end1).getWeeks());
83          assertEquals(0, Weeks.weeksBetween(start, start).getWeeks());
84          assertEquals(0, Weeks.weeksBetween(end1, end1).getWeeks());
85          assertEquals(-3, Weeks.weeksBetween(end1, start).getWeeks());
86          assertEquals(6, Weeks.weeksBetween(start, end2).getWeeks());
87      }
88  
89      public void testFactory_weeksBetween_RPartial() {
90          LocalDate start = new LocalDate(2006, 6, 9);
91          LocalDate end1 = new LocalDate(2006, 6, 30);
92          YearMonthDay end2 = new YearMonthDay(2006, 7, 21);
93          
94          assertEquals(3, Weeks.weeksBetween(start, end1).getWeeks());
95          assertEquals(0, Weeks.weeksBetween(start, start).getWeeks());
96          assertEquals(0, Weeks.weeksBetween(end1, end1).getWeeks());
97          assertEquals(-3, Weeks.weeksBetween(end1, start).getWeeks());
98          assertEquals(6, Weeks.weeksBetween(start, end2).getWeeks());
99      }
100 
101     public void testFactory_weeksIn_RInterval() {
102         DateTime start = new DateTime(2006, 6, 9, 12, 0, 0, 0, PARIS);
103         DateTime end1 = new DateTime(2006, 6, 30, 12, 0, 0, 0, PARIS);
104         DateTime end2 = new DateTime(2006, 7, 21, 12, 0, 0, 0, PARIS);
105         
106         assertEquals(0, Weeks.weeksIn((ReadableInterval) null).getWeeks());
107         assertEquals(3, Weeks.weeksIn(new Interval(start, end1)).getWeeks());
108         assertEquals(0, Weeks.weeksIn(new Interval(start, start)).getWeeks());
109         assertEquals(0, Weeks.weeksIn(new Interval(end1, end1)).getWeeks());
110         assertEquals(6, Weeks.weeksIn(new Interval(start, end2)).getWeeks());
111     }
112 
113     public void testFactory_standardWeeksIn_RPeriod() {
114         assertEquals(0, Weeks.standardWeeksIn((ReadablePeriod) null).getWeeks());
115         assertEquals(0, Weeks.standardWeeksIn(Period.ZERO).getWeeks());
116         assertEquals(1, Weeks.standardWeeksIn(new Period(0, 0, 1, 0, 0, 0, 0, 0)).getWeeks());
117         assertEquals(123, Weeks.standardWeeksIn(Period.weeks(123)).getWeeks());
118         assertEquals(-987, Weeks.standardWeeksIn(Period.weeks(-987)).getWeeks());
119         assertEquals(1, Weeks.standardWeeksIn(Period.days(13)).getWeeks());
120         assertEquals(2, Weeks.standardWeeksIn(Period.days(14)).getWeeks());
121         assertEquals(2, Weeks.standardWeeksIn(Period.days(15)).getWeeks());
122         try {
123             Weeks.standardWeeksIn(Period.months(1));
124             fail();
125         } catch (IllegalArgumentException ex) {
126             // expeceted
127         }
128     }
129 
130     public void testFactory_parseWeeks_String() {
131         assertEquals(0, Weeks.parseWeeks((String) null).getWeeks());
132         assertEquals(0, Weeks.parseWeeks("P0W").getWeeks());
133         assertEquals(1, Weeks.parseWeeks("P1W").getWeeks());
134         assertEquals(-3, Weeks.parseWeeks("P-3W").getWeeks());
135         assertEquals(2, Weeks.parseWeeks("P0Y0M2W").getWeeks());
136         assertEquals(2, Weeks.parseWeeks("P2WT0H0M").getWeeks());
137         try {
138             Weeks.parseWeeks("P1Y1D");
139             fail();
140         } catch (IllegalArgumentException ex) {
141             // expeceted
142         }
143         try {
144             Weeks.parseWeeks("P1WT1H");
145             fail();
146         } catch (IllegalArgumentException ex) {
147             // expeceted
148         }
149     }
150 
151     //-----------------------------------------------------------------------
152     public void testGetMethods() {
153         Weeks test = Weeks.weeks(20);
154         assertEquals(20, test.getWeeks());
155     }
156 
157     public void testGetFieldType() {
158         Weeks test = Weeks.weeks(20);
159         assertEquals(DurationFieldType.weeks(), test.getFieldType());
160     }
161 
162     public void testGetPeriodType() {
163         Weeks test = Weeks.weeks(20);
164         assertEquals(PeriodType.weeks(), test.getPeriodType());
165     }
166 
167     //-----------------------------------------------------------------------
168     public void testIsGreaterThan() {
169         assertEquals(true, Weeks.THREE.isGreaterThan(Weeks.TWO));
170         assertEquals(false, Weeks.THREE.isGreaterThan(Weeks.THREE));
171         assertEquals(false, Weeks.TWO.isGreaterThan(Weeks.THREE));
172         assertEquals(true, Weeks.ONE.isGreaterThan(null));
173         assertEquals(false, Weeks.weeks(-1).isGreaterThan(null));
174     }
175 
176     public void testIsLessThan() {
177         assertEquals(false, Weeks.THREE.isLessThan(Weeks.TWO));
178         assertEquals(false, Weeks.THREE.isLessThan(Weeks.THREE));
179         assertEquals(true, Weeks.TWO.isLessThan(Weeks.THREE));
180         assertEquals(false, Weeks.ONE.isLessThan(null));
181         assertEquals(true, Weeks.weeks(-1).isLessThan(null));
182     }
183 
184     //-----------------------------------------------------------------------
185     public void testToString() {
186         Weeks test = Weeks.weeks(20);
187         assertEquals("P20W", test.toString());
188         
189         test = Weeks.weeks(-20);
190         assertEquals("P-20W", test.toString());
191     }
192 
193     //-----------------------------------------------------------------------
194     public void testSerialization() throws Exception {
195         Weeks test = Weeks.THREE;
196         
197         ByteArrayOutputStream baos = new ByteArrayOutputStream();
198         ObjectOutputStream oos = new ObjectOutputStream(baos);
199         oos.writeObject(test);
200         byte[] bytes = baos.toByteArray();
201         oos.close();
202         
203         ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
204         ObjectInputStream ois = new ObjectInputStream(bais);
205         Weeks result = (Weeks) ois.readObject();
206         ois.close();
207         
208         assertSame(test, result);
209     }
210 
211     //-----------------------------------------------------------------------
212     public void testToStandardDays() {
213         Weeks test = Weeks.weeks(2);
214         Days expected = Days.days(14);
215         assertEquals(expected, test.toStandardDays());
216         
217         try {
218             Weeks.MAX_VALUE.toStandardDays();
219             fail();
220         } catch (ArithmeticException ex) {
221             // expected
222         }
223     }
224 
225     public void testToStandardHours() {
226         Weeks test = Weeks.weeks(2);
227         Hours expected = Hours.hours(2 * 7 * 24);
228         assertEquals(expected, test.toStandardHours());
229         
230         try {
231             Weeks.MAX_VALUE.toStandardHours();
232             fail();
233         } catch (ArithmeticException ex) {
234             // expected
235         }
236     }
237 
238     public void testToStandardMinutes() {
239         Weeks test = Weeks.weeks(2);
240         Minutes expected = Minutes.minutes(2 * 7 * 24 * 60);
241         assertEquals(expected, test.toStandardMinutes());
242         
243         try {
244             Weeks.MAX_VALUE.toStandardMinutes();
245             fail();
246         } catch (ArithmeticException ex) {
247             // expected
248         }
249     }
250 
251     public void testToStandardSeconds() {
252         Weeks test = Weeks.weeks(2);
253         Seconds expected = Seconds.seconds(2 * 7 * 24 * 60 * 60);
254         assertEquals(expected, test.toStandardSeconds());
255         
256         try {
257             Weeks.MAX_VALUE.toStandardSeconds();
258             fail();
259         } catch (ArithmeticException ex) {
260             // expected
261         }
262     }
263 
264     public void testToStandardDuration() {
265         Weeks test = Weeks.weeks(20);
266         Duration expected = new Duration(20L * DateTimeConstants.MILLIS_PER_WEEK);
267         assertEquals(expected, test.toStandardDuration());
268         
269         expected = new Duration(((long) Integer.MAX_VALUE) * DateTimeConstants.MILLIS_PER_WEEK);
270         assertEquals(expected, Weeks.MAX_VALUE.toStandardDuration());
271     }
272 
273     //-----------------------------------------------------------------------
274     public void testPlus_int() {
275         Weeks test2 = Weeks.weeks(2);
276         Weeks result = test2.plus(3);
277         assertEquals(2, test2.getWeeks());
278         assertEquals(5, result.getWeeks());
279         
280         assertEquals(1, Weeks.ONE.plus(0).getWeeks());
281         
282         try {
283             Weeks.MAX_VALUE.plus(1);
284             fail();
285         } catch (ArithmeticException ex) {
286             // expected
287         }
288     }
289 
290     public void testPlus_Weeks() {
291         Weeks test2 = Weeks.weeks(2);
292         Weeks test3 = Weeks.weeks(3);
293         Weeks result = test2.plus(test3);
294         assertEquals(2, test2.getWeeks());
295         assertEquals(3, test3.getWeeks());
296         assertEquals(5, result.getWeeks());
297         
298         assertEquals(1, Weeks.ONE.plus(Weeks.ZERO).getWeeks());
299         assertEquals(1, Weeks.ONE.plus((Weeks) null).getWeeks());
300         
301         try {
302             Weeks.MAX_VALUE.plus(Weeks.ONE);
303             fail();
304         } catch (ArithmeticException ex) {
305             // expected
306         }
307     }
308 
309     public void testMinus_int() {
310         Weeks test2 = Weeks.weeks(2);
311         Weeks result = test2.minus(3);
312         assertEquals(2, test2.getWeeks());
313         assertEquals(-1, result.getWeeks());
314         
315         assertEquals(1, Weeks.ONE.minus(0).getWeeks());
316         
317         try {
318             Weeks.MIN_VALUE.minus(1);
319             fail();
320         } catch (ArithmeticException ex) {
321             // expected
322         }
323     }
324 
325     public void testMinus_Weeks() {
326         Weeks test2 = Weeks.weeks(2);
327         Weeks test3 = Weeks.weeks(3);
328         Weeks result = test2.minus(test3);
329         assertEquals(2, test2.getWeeks());
330         assertEquals(3, test3.getWeeks());
331         assertEquals(-1, result.getWeeks());
332         
333         assertEquals(1, Weeks.ONE.minus(Weeks.ZERO).getWeeks());
334         assertEquals(1, Weeks.ONE.minus((Weeks) null).getWeeks());
335         
336         try {
337             Weeks.MIN_VALUE.minus(Weeks.ONE);
338             fail();
339         } catch (ArithmeticException ex) {
340             // expected
341         }
342     }
343 
344     public void testMultipliedBy_int() {
345         Weeks test = Weeks.weeks(2);
346         assertEquals(6, test.multipliedBy(3).getWeeks());
347         assertEquals(2, test.getWeeks());
348         assertEquals(-6, test.multipliedBy(-3).getWeeks());
349         assertSame(test, test.multipliedBy(1));
350         
351         Weeks halfMax = Weeks.weeks(Integer.MAX_VALUE / 2 + 1);
352         try {
353             halfMax.multipliedBy(2);
354             fail();
355         } catch (ArithmeticException ex) {
356             // expected
357         }
358     }
359 
360     public void testDividedBy_int() {
361         Weeks test = Weeks.weeks(12);
362         assertEquals(6, test.dividedBy(2).getWeeks());
363         assertEquals(12, test.getWeeks());
364         assertEquals(4, test.dividedBy(3).getWeeks());
365         assertEquals(3, test.dividedBy(4).getWeeks());
366         assertEquals(2, test.dividedBy(5).getWeeks());
367         assertEquals(2, test.dividedBy(6).getWeeks());
368         assertSame(test, test.dividedBy(1));
369         
370         try {
371             Weeks.ONE.dividedBy(0);
372             fail();
373         } catch (ArithmeticException ex) {
374             // expected
375         }
376     }
377 
378     public void testNegated() {
379         Weeks test = Weeks.weeks(12);
380         assertEquals(-12, test.negated().getWeeks());
381         assertEquals(12, test.getWeeks());
382         
383         try {
384             Weeks.MIN_VALUE.negated();
385             fail();
386         } catch (ArithmeticException ex) {
387             // expected
388         }
389     }
390 
391     //-----------------------------------------------------------------------
392     public void testAddToLocalDate() {
393         Weeks test = Weeks.weeks(3);
394         LocalDate date = new LocalDate(2006, 6, 1);
395         LocalDate expected = new LocalDate(2006, 6, 22);
396         assertEquals(expected, date.plus(test));
397     }
398 
399 }