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 }