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 Minutes.
028     *
029     * @author Stephen Colebourne
030     */
031    public class TestMinutes 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(TestMinutes.class);
042        }
043    
044        public TestMinutes(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, Minutes.ZERO.getMinutes());
057            assertEquals(1, Minutes.ONE.getMinutes());
058            assertEquals(2, Minutes.TWO.getMinutes());
059            assertEquals(3, Minutes.THREE.getMinutes());
060            assertEquals(Integer.MAX_VALUE, Minutes.MAX_VALUE.getMinutes());
061            assertEquals(Integer.MIN_VALUE, Minutes.MIN_VALUE.getMinutes());
062        }
063    
064        //-----------------------------------------------------------------------
065        public void testFactory_minutes_int() {
066            assertSame(Minutes.ZERO, Minutes.minutes(0));
067            assertSame(Minutes.ONE, Minutes.minutes(1));
068            assertSame(Minutes.TWO, Minutes.minutes(2));
069            assertSame(Minutes.THREE, Minutes.minutes(3));
070            assertSame(Minutes.MAX_VALUE, Minutes.minutes(Integer.MAX_VALUE));
071            assertSame(Minutes.MIN_VALUE, Minutes.minutes(Integer.MIN_VALUE));
072            assertEquals(-1, Minutes.minutes(-1).getMinutes());
073            assertEquals(4, Minutes.minutes(4).getMinutes());
074        }
075    
076        //-----------------------------------------------------------------------
077        public void testFactory_minutesBetween_RInstant() {
078            DateTime start = new DateTime(2006, 6, 9, 12, 3, 0, 0, PARIS);
079            DateTime end1 = new DateTime(2006, 6, 9, 12, 6, 0, 0, PARIS);
080            DateTime end2 = new DateTime(2006, 6, 9, 12, 9, 0, 0, PARIS);
081            
082            assertEquals(3, Minutes.minutesBetween(start, end1).getMinutes());
083            assertEquals(0, Minutes.minutesBetween(start, start).getMinutes());
084            assertEquals(0, Minutes.minutesBetween(end1, end1).getMinutes());
085            assertEquals(-3, Minutes.minutesBetween(end1, start).getMinutes());
086            assertEquals(6, Minutes.minutesBetween(start, end2).getMinutes());
087        }
088    
089        public void testFactory_minutesBetween_RPartial() {
090            LocalTime start = new LocalTime(12, 3);
091            LocalTime end1 = new LocalTime(12, 6);
092            TimeOfDay end2 = new TimeOfDay(12, 9);
093            
094            assertEquals(3, Minutes.minutesBetween(start, end1).getMinutes());
095            assertEquals(0, Minutes.minutesBetween(start, start).getMinutes());
096            assertEquals(0, Minutes.minutesBetween(end1, end1).getMinutes());
097            assertEquals(-3, Minutes.minutesBetween(end1, start).getMinutes());
098            assertEquals(6, Minutes.minutesBetween(start, end2).getMinutes());
099        }
100    
101        public void testFactory_minutesIn_RInterval() {
102            DateTime start = new DateTime(2006, 6, 9, 12, 3, 0, 0, PARIS);
103            DateTime end1 = new DateTime(2006, 6, 9, 12, 6, 0, 0, PARIS);
104            DateTime end2 = new DateTime(2006, 6, 9, 12, 9, 0, 0, PARIS);
105            
106            assertEquals(0, Minutes.minutesIn((ReadableInterval) null).getMinutes());
107            assertEquals(3, Minutes.minutesIn(new Interval(start, end1)).getMinutes());
108            assertEquals(0, Minutes.minutesIn(new Interval(start, start)).getMinutes());
109            assertEquals(0, Minutes.minutesIn(new Interval(end1, end1)).getMinutes());
110            assertEquals(6, Minutes.minutesIn(new Interval(start, end2)).getMinutes());
111        }
112    
113        public void testFactory_standardMinutesIn_RPeriod() {
114            assertEquals(0, Minutes.standardMinutesIn((ReadablePeriod) null).getMinutes());
115            assertEquals(0, Minutes.standardMinutesIn(Period.ZERO).getMinutes());
116            assertEquals(1, Minutes.standardMinutesIn(new Period(0, 0, 0, 0, 0, 1, 0, 0)).getMinutes());
117            assertEquals(123, Minutes.standardMinutesIn(Period.minutes(123)).getMinutes());
118            assertEquals(-987, Minutes.standardMinutesIn(Period.minutes(-987)).getMinutes());
119            assertEquals(1, Minutes.standardMinutesIn(Period.seconds(119)).getMinutes());
120            assertEquals(2, Minutes.standardMinutesIn(Period.seconds(120)).getMinutes());
121            assertEquals(2, Minutes.standardMinutesIn(Period.seconds(121)).getMinutes());
122            assertEquals(120, Minutes.standardMinutesIn(Period.hours(2)).getMinutes());
123            try {
124                Minutes.standardMinutesIn(Period.months(1));
125                fail();
126            } catch (IllegalArgumentException ex) {
127                // expeceted
128            }
129        }
130    
131        public void testFactory_parseMinutes_String() {
132            assertEquals(0, Minutes.parseMinutes((String) null).getMinutes());
133            assertEquals(0, Minutes.parseMinutes("PT0M").getMinutes());
134            assertEquals(1, Minutes.parseMinutes("PT1M").getMinutes());
135            assertEquals(-3, Minutes.parseMinutes("PT-3M").getMinutes());
136            assertEquals(2, Minutes.parseMinutes("P0Y0M0DT2M").getMinutes());
137            assertEquals(2, Minutes.parseMinutes("PT0H2M").getMinutes());
138            try {
139                Minutes.parseMinutes("P1Y1D");
140                fail();
141            } catch (IllegalArgumentException ex) {
142                // expeceted
143            }
144            try {
145                Minutes.parseMinutes("P1DT1M");
146                fail();
147            } catch (IllegalArgumentException ex) {
148                // expeceted
149            }
150        }
151    
152        //-----------------------------------------------------------------------
153        public void testGetMethods() {
154            Minutes test = Minutes.minutes(20);
155            assertEquals(20, test.getMinutes());
156        }
157    
158        public void testGetFieldType() {
159            Minutes test = Minutes.minutes(20);
160            assertEquals(DurationFieldType.minutes(), test.getFieldType());
161        }
162    
163        public void testGetPeriodType() {
164            Minutes test = Minutes.minutes(20);
165            assertEquals(PeriodType.minutes(), test.getPeriodType());
166        }
167    
168        //-----------------------------------------------------------------------
169        public void testIsGreaterThan() {
170            assertEquals(true, Minutes.THREE.isGreaterThan(Minutes.TWO));
171            assertEquals(false, Minutes.THREE.isGreaterThan(Minutes.THREE));
172            assertEquals(false, Minutes.TWO.isGreaterThan(Minutes.THREE));
173            assertEquals(true, Minutes.ONE.isGreaterThan(null));
174            assertEquals(false, Minutes.minutes(-1).isGreaterThan(null));
175        }
176    
177        public void testIsLessThan() {
178            assertEquals(false, Minutes.THREE.isLessThan(Minutes.TWO));
179            assertEquals(false, Minutes.THREE.isLessThan(Minutes.THREE));
180            assertEquals(true, Minutes.TWO.isLessThan(Minutes.THREE));
181            assertEquals(false, Minutes.ONE.isLessThan(null));
182            assertEquals(true, Minutes.minutes(-1).isLessThan(null));
183        }
184    
185        //-----------------------------------------------------------------------
186        public void testToString() {
187            Minutes test = Minutes.minutes(20);
188            assertEquals("PT20M", test.toString());
189            
190            test = Minutes.minutes(-20);
191            assertEquals("PT-20M", test.toString());
192        }
193    
194        //-----------------------------------------------------------------------
195        public void testSerialization() throws Exception {
196            Minutes test = Minutes.THREE;
197            
198            ByteArrayOutputStream baos = new ByteArrayOutputStream();
199            ObjectOutputStream oos = new ObjectOutputStream(baos);
200            oos.writeObject(test);
201            byte[] bytes = baos.toByteArray();
202            oos.close();
203            
204            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
205            ObjectInputStream ois = new ObjectInputStream(bais);
206            Minutes result = (Minutes) ois.readObject();
207            ois.close();
208            
209            assertSame(test, result);
210        }
211    
212        //-----------------------------------------------------------------------
213        public void testToStandardWeeks() {
214            Minutes test = Minutes.minutes(60 * 24 * 7 * 2);
215            Weeks expected = Weeks.weeks(2);
216            assertEquals(expected, test.toStandardWeeks());
217        }
218    
219        public void testToStandardDays() {
220            Minutes test = Minutes.minutes(60 * 24 * 2);
221            Days expected = Days.days(2);
222            assertEquals(expected, test.toStandardDays());
223        }
224    
225        public void testToStandardHours() {
226            Minutes test = Minutes.minutes(3 * 60);
227            Hours expected = Hours.hours(3);
228            assertEquals(expected, test.toStandardHours());
229        }
230    
231        public void testToStandardSeconds() {
232            Minutes test = Minutes.minutes(3);
233            Seconds expected = Seconds.seconds(3 * 60);
234            assertEquals(expected, test.toStandardSeconds());
235            
236            try {
237                Minutes.MAX_VALUE.toStandardSeconds();
238                fail();
239            } catch (ArithmeticException ex) {
240                // expected
241            }
242        }
243    
244        public void testToStandardDuration() {
245            Minutes test = Minutes.minutes(20);
246            Duration expected = new Duration(20L * DateTimeConstants.MILLIS_PER_MINUTE);
247            assertEquals(expected, test.toStandardDuration());
248            
249            expected = new Duration(((long) Integer.MAX_VALUE) * DateTimeConstants.MILLIS_PER_MINUTE);
250            assertEquals(expected, Minutes.MAX_VALUE.toStandardDuration());
251        }
252    
253        //-----------------------------------------------------------------------
254        public void testPlus_int() {
255            Minutes test2 = Minutes.minutes(2);
256            Minutes result = test2.plus(3);
257            assertEquals(2, test2.getMinutes());
258            assertEquals(5, result.getMinutes());
259            
260            assertEquals(1, Minutes.ONE.plus(0).getMinutes());
261            
262            try {
263                Minutes.MAX_VALUE.plus(1);
264                fail();
265            } catch (ArithmeticException ex) {
266                // expected
267            }
268        }
269    
270        public void testPlus_Minutes() {
271            Minutes test2 = Minutes.minutes(2);
272            Minutes test3 = Minutes.minutes(3);
273            Minutes result = test2.plus(test3);
274            assertEquals(2, test2.getMinutes());
275            assertEquals(3, test3.getMinutes());
276            assertEquals(5, result.getMinutes());
277            
278            assertEquals(1, Minutes.ONE.plus(Minutes.ZERO).getMinutes());
279            assertEquals(1, Minutes.ONE.plus((Minutes) null).getMinutes());
280            
281            try {
282                Minutes.MAX_VALUE.plus(Minutes.ONE);
283                fail();
284            } catch (ArithmeticException ex) {
285                // expected
286            }
287        }
288    
289        public void testMinus_int() {
290            Minutes test2 = Minutes.minutes(2);
291            Minutes result = test2.minus(3);
292            assertEquals(2, test2.getMinutes());
293            assertEquals(-1, result.getMinutes());
294            
295            assertEquals(1, Minutes.ONE.minus(0).getMinutes());
296            
297            try {
298                Minutes.MIN_VALUE.minus(1);
299                fail();
300            } catch (ArithmeticException ex) {
301                // expected
302            }
303        }
304    
305        public void testMinus_Minutes() {
306            Minutes test2 = Minutes.minutes(2);
307            Minutes test3 = Minutes.minutes(3);
308            Minutes result = test2.minus(test3);
309            assertEquals(2, test2.getMinutes());
310            assertEquals(3, test3.getMinutes());
311            assertEquals(-1, result.getMinutes());
312            
313            assertEquals(1, Minutes.ONE.minus(Minutes.ZERO).getMinutes());
314            assertEquals(1, Minutes.ONE.minus((Minutes) null).getMinutes());
315            
316            try {
317                Minutes.MIN_VALUE.minus(Minutes.ONE);
318                fail();
319            } catch (ArithmeticException ex) {
320                // expected
321            }
322        }
323    
324        public void testMultipliedBy_int() {
325            Minutes test = Minutes.minutes(2);
326            assertEquals(6, test.multipliedBy(3).getMinutes());
327            assertEquals(2, test.getMinutes());
328            assertEquals(-6, test.multipliedBy(-3).getMinutes());
329            assertSame(test, test.multipliedBy(1));
330            
331            Minutes halfMax = Minutes.minutes(Integer.MAX_VALUE / 2 + 1);
332            try {
333                halfMax.multipliedBy(2);
334                fail();
335            } catch (ArithmeticException ex) {
336                // expected
337            }
338        }
339    
340        public void testDividedBy_int() {
341            Minutes test = Minutes.minutes(12);
342            assertEquals(6, test.dividedBy(2).getMinutes());
343            assertEquals(12, test.getMinutes());
344            assertEquals(4, test.dividedBy(3).getMinutes());
345            assertEquals(3, test.dividedBy(4).getMinutes());
346            assertEquals(2, test.dividedBy(5).getMinutes());
347            assertEquals(2, test.dividedBy(6).getMinutes());
348            assertSame(test, test.dividedBy(1));
349            
350            try {
351                Minutes.ONE.dividedBy(0);
352                fail();
353            } catch (ArithmeticException ex) {
354                // expected
355            }
356        }
357    
358        public void testNegated() {
359            Minutes test = Minutes.minutes(12);
360            assertEquals(-12, test.negated().getMinutes());
361            assertEquals(12, test.getMinutes());
362            
363            try {
364                Minutes.MIN_VALUE.negated();
365                fail();
366            } catch (ArithmeticException ex) {
367                // expected
368            }
369        }
370    
371        //-----------------------------------------------------------------------
372        public void testAddToLocalDate() {
373            Minutes test = Minutes.minutes(26);
374            LocalDateTime date = new LocalDateTime(2006, 6, 1, 0, 0, 0, 0);
375            LocalDateTime expected = new LocalDateTime(2006, 6, 1, 0, 26, 0, 0);
376            assertEquals(expected, date.plus(test));
377        }
378    
379    }