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.format;
017    
018    import java.util.Locale;
019    import java.util.TimeZone;
020    
021    import junit.framework.TestCase;
022    import junit.framework.TestSuite;
023    
024    import org.joda.time.DateTimeConstants;
025    import org.joda.time.DateTimeUtils;
026    import org.joda.time.DateTimeZone;
027    import org.joda.time.Period;
028    import org.joda.time.PeriodType;
029    
030    /**
031     * This class is a Junit unit test for ISOPeriodFormat.
032     *
033     * @author Stephen Colebourne
034     */
035    public class TestISOPeriodFormatParsing extends TestCase {
036    
037        private static final Period PERIOD = new Period(1, 2, 3, 4, 5, 6, 7, 8);
038        private static final Period EMPTY_PERIOD = new Period(0, 0, 0, 0, 0, 0, 0, 0);
039        private static final Period YEAR_DAY_PERIOD = new Period(1, 0, 0, 4, 5, 6, 7, 8, PeriodType.yearDayTime());
040        private static final Period EMPTY_YEAR_DAY_PERIOD = new Period(0, 0, 0, 0, 0, 0, 0, 0, PeriodType.yearDayTime());
041        private static final Period TIME_PERIOD = new Period(0, 0, 0, 0, 5, 6, 7, 8);
042        private static final Period DATE_PERIOD = new Period(1, 2, 3, 4, 0, 0, 0, 0);
043    
044        private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
045        private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
046        private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
047    
048        long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 
049                         366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 
050                         365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
051                         366 + 365;
052        // 2002-06-09
053        private long TEST_TIME_NOW = (y2002days + 31L + 28L + 31L + 30L + 31L + 9L - 1L) * DateTimeConstants.MILLIS_PER_DAY;
054    
055        private DateTimeZone originalDateTimeZone = null;
056        private TimeZone originalTimeZone = null;
057        private Locale originalLocale = null;
058    
059        public static void main(String[] args) {
060            junit.textui.TestRunner.run(suite());
061        }
062    
063        public static TestSuite suite() {
064            return new TestSuite(TestISOPeriodFormatParsing.class);
065        }
066    
067        public TestISOPeriodFormatParsing(String name) {
068            super(name);
069        }
070    
071        protected void setUp() throws Exception {
072            DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
073            originalDateTimeZone = DateTimeZone.getDefault();
074            originalTimeZone = TimeZone.getDefault();
075            originalLocale = Locale.getDefault();
076            DateTimeZone.setDefault(LONDON);
077            TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
078            Locale.setDefault(Locale.UK);
079        }
080    
081        protected void tearDown() throws Exception {
082            DateTimeUtils.setCurrentMillisSystem();
083            DateTimeZone.setDefault(originalDateTimeZone);
084            TimeZone.setDefault(originalTimeZone);
085            Locale.setDefault(originalLocale);
086            originalDateTimeZone = null;
087            originalTimeZone = null;
088            originalLocale = null;
089        }
090    
091        //-----------------------------------------------------------------------
092        public void testParseStandard1() {
093            PeriodFormatter parser = ISOPeriodFormat.standard();
094            Period p = parser.parsePeriod("P1Y2M3W4DT5H6M7.008S");
095            assertEquals(new Period(1, 2, 3, 4, 5, 6, 7, 8), p);
096        }
097    
098        //-----------------------------------------------------------------------
099        public void testParseStandard2() {
100            PeriodFormatter parser = ISOPeriodFormat.standard();
101            Period p = parser.parsePeriod("P0Y0M0W0DT5H6M7.008S");
102            assertEquals(new Period(0, 0, 0, 0, 5, 6, 7, 8), p);
103        }
104    
105        //-----------------------------------------------------------------------
106        public void testParseStandard3() {
107            PeriodFormatter parser = ISOPeriodFormat.standard();
108            Period p = parser.parsePeriod("P0DT5H6M7.008S");
109            assertEquals(new Period(0, 0, 0, 0, 5, 6, 7, 8), p);
110        }
111    
112        //-----------------------------------------------------------------------
113        public void testParseStandard4() {
114            PeriodFormatter parser = ISOPeriodFormat.standard();
115            Period p = parser.parsePeriod("P2Y3DT5H6M7.008S");
116            assertEquals(new Period(2, 0, 0, 3, 5, 6, 7, 8), p);
117        }
118    
119        //-----------------------------------------------------------------------
120        public void testParseStandard5() {
121            PeriodFormatter parser = ISOPeriodFormat.standard();
122            Period p = parser.parsePeriod("P2YT5H6M7.008S");
123            assertEquals(new Period(2, 0, 0, 0, 5, 6, 7, 8), p);
124        }
125    
126        //-----------------------------------------------------------------------
127        public void testParseStandard6() {
128            PeriodFormatter parser = ISOPeriodFormat.standard();
129            Period p = parser.parsePeriod("PT5H6M7.008S");
130            assertEquals(new Period(0, 0, 0, 0, 5, 6, 7, 8), p);
131        }
132    
133        //-----------------------------------------------------------------------
134        public void testParseStandard7() {
135            PeriodFormatter parser = ISOPeriodFormat.standard();
136            Period p = parser.parsePeriod("P1Y2M3W4D");
137            assertEquals(new Period(1, 2, 3, 4, 0, 0, 0, 0), p);
138        }
139    
140        //-----------------------------------------------------------------------
141        public void testParseStandard8() {
142            PeriodFormatter parser = ISOPeriodFormat.standard();
143            Period p = parser.parsePeriod("PT5H6M7S");
144            assertEquals(new Period(0, 0, 0, 0, 5, 6, 7, 0), p);
145        }
146    
147        //-----------------------------------------------------------------------
148        public void testParseStandard9() {
149            PeriodFormatter parser = ISOPeriodFormat.standard();
150            Period p = parser.parsePeriod("PT0S");
151            assertEquals(new Period(0, 0, 0, 0, 0, 0, 0, 0), p);
152        }
153    
154        //-----------------------------------------------------------------------
155        public void testParseStandard10() {
156            PeriodFormatter parser = ISOPeriodFormat.standard();
157            Period p = parser.parsePeriod("P0D");
158            assertEquals(new Period(0, 0, 0, 0, 0, 0, 0, 0), p);
159        }
160    
161        //-----------------------------------------------------------------------
162        public void testParseStandard11() {
163            PeriodFormatter parser = ISOPeriodFormat.standard();
164            Period p = parser.parsePeriod("P0Y");
165            assertEquals(new Period(0, 0, 0, 0, 0, 0, 0, 0), p);
166        }
167    
168        //-----------------------------------------------------------------------
169        public void testParseStandardFail1() {
170            PeriodFormatter parser = ISOPeriodFormat.standard();
171            try {
172                parser.parsePeriod("P1Y2S");
173                fail();
174            } catch (IllegalArgumentException ex) {}
175        }
176    
177        //-----------------------------------------------------------------------
178        public void testParseStandardFail2() {
179            PeriodFormatter parser = ISOPeriodFormat.standard();
180            try {
181                parser.parsePeriod("PS");
182                fail();
183            } catch (IllegalArgumentException ex) {}
184        }
185    
186        //-----------------------------------------------------------------------
187        public void testParseStandardFail3() {
188            PeriodFormatter parser = ISOPeriodFormat.standard();
189            try {
190                parser.parsePeriod("PTS");
191                fail();
192            } catch (IllegalArgumentException ex) {}
193        }
194    
195        //-----------------------------------------------------------------------
196        public void testParseStandardFail4() {
197            PeriodFormatter parser = ISOPeriodFormat.standard();
198            try {
199                parser.parsePeriod("PXS");
200                fail();
201            } catch (IllegalArgumentException ex) {}
202        }
203    
204    }