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.io.CharArrayWriter; 019 import java.util.Locale; 020 import java.util.TimeZone; 021 022 import junit.framework.TestCase; 023 import junit.framework.TestSuite; 024 025 import org.joda.time.Chronology; 026 import org.joda.time.DateTimeConstants; 027 import org.joda.time.DateTimeUtils; 028 import org.joda.time.DateTimeZone; 029 import org.joda.time.MutablePeriod; 030 import org.joda.time.Period; 031 import org.joda.time.PeriodType; 032 import org.joda.time.chrono.BuddhistChronology; 033 import org.joda.time.chrono.ISOChronology; 034 035 /** 036 * This class is a Junit unit test for Period Formating. 037 * 038 * @author Stephen Colebourne 039 */ 040 public class TestPeriodFormatter extends TestCase { 041 042 private static final DateTimeZone UTC = DateTimeZone.UTC; 043 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris"); 044 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London"); 045 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo"); 046 private static final DateTimeZone NEWYORK = DateTimeZone.forID("America/New_York"); 047 private static final Chronology ISO_UTC = ISOChronology.getInstanceUTC(); 048 private static final Chronology ISO_PARIS = ISOChronology.getInstance(PARIS); 049 private static final Chronology BUDDHIST_PARIS = BuddhistChronology.getInstance(PARIS); 050 051 long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 052 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 053 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 054 366 + 365; 055 // 2002-06-09 056 private long TEST_TIME_NOW = 057 (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY; 058 059 private DateTimeZone originalDateTimeZone = null; 060 private TimeZone originalTimeZone = null; 061 private Locale originalLocale = null; 062 private PeriodFormatter f = null; 063 064 public static void main(String[] args) { 065 junit.textui.TestRunner.run(suite()); 066 } 067 068 public static TestSuite suite() { 069 return new TestSuite(TestPeriodFormatter.class); 070 } 071 072 public TestPeriodFormatter(String name) { 073 super(name); 074 } 075 076 protected void setUp() throws Exception { 077 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW); 078 originalDateTimeZone = DateTimeZone.getDefault(); 079 originalTimeZone = TimeZone.getDefault(); 080 originalLocale = Locale.getDefault(); 081 DateTimeZone.setDefault(LONDON); 082 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London")); 083 Locale.setDefault(Locale.UK); 084 f = ISOPeriodFormat.standard(); 085 } 086 087 protected void tearDown() throws Exception { 088 DateTimeUtils.setCurrentMillisSystem(); 089 DateTimeZone.setDefault(originalDateTimeZone); 090 TimeZone.setDefault(originalTimeZone); 091 Locale.setDefault(originalLocale); 092 originalDateTimeZone = null; 093 originalTimeZone = null; 094 originalLocale = null; 095 f = null; 096 } 097 098 //----------------------------------------------------------------------- 099 public void testPrint_simple() { 100 Period p = new Period(1, 2, 3, 4, 5, 6, 7, 8); 101 assertEquals("P1Y2M3W4DT5H6M7.008S", f.print(p)); 102 } 103 104 //----------------------------------------------------------------------- 105 public void testPrint_bufferMethods() throws Exception { 106 Period p = new Period(1, 2, 3, 4, 5, 6, 7, 8); 107 StringBuffer buf = new StringBuffer(); 108 f.printTo(buf, p); 109 assertEquals("P1Y2M3W4DT5H6M7.008S", buf.toString()); 110 111 buf = new StringBuffer(); 112 try { 113 f.printTo(buf, null); 114 fail(); 115 } catch (IllegalArgumentException ex) {} 116 } 117 118 //----------------------------------------------------------------------- 119 public void testPrint_writerMethods() throws Exception { 120 Period p = new Period(1, 2, 3, 4, 5, 6, 7, 8); 121 CharArrayWriter out = new CharArrayWriter(); 122 f.printTo(out, p); 123 assertEquals("P1Y2M3W4DT5H6M7.008S", out.toString()); 124 125 out = new CharArrayWriter(); 126 try { 127 f.printTo(out, null); 128 fail(); 129 } catch (IllegalArgumentException ex) {} 130 } 131 132 //----------------------------------------------------------------------- 133 public void testWithGetLocaleMethods() { 134 PeriodFormatter f2 = f.withLocale(Locale.FRENCH); 135 assertEquals(Locale.FRENCH, f2.getLocale()); 136 assertSame(f2, f2.withLocale(Locale.FRENCH)); 137 138 f2 = f.withLocale(null); 139 assertEquals(null, f2.getLocale()); 140 assertSame(f2, f2.withLocale(null)); 141 } 142 143 public void testWithGetParseTypeMethods() { 144 PeriodFormatter f2 = f.withParseType(PeriodType.dayTime()); 145 assertEquals(PeriodType.dayTime(), f2.getParseType()); 146 assertSame(f2, f2.withParseType(PeriodType.dayTime())); 147 148 f2 = f.withParseType(null); 149 assertEquals(null, f2.getParseType()); 150 assertSame(f2, f2.withParseType(null)); 151 } 152 153 public void testPrinterParserMethods() { 154 Period p = new Period(1, 2, 3, 4, 5, 6, 7, 8); 155 PeriodFormatter f2 = new PeriodFormatter(f.getPrinter(), f.getParser()); 156 assertEquals(f.getPrinter(), f2.getPrinter()); 157 assertEquals(f.getParser(), f2.getParser()); 158 assertEquals(true, f2.isPrinter()); 159 assertEquals(true, f2.isParser()); 160 assertNotNull(f2.print(p)); 161 assertNotNull(f2.parsePeriod("P1Y2M3W4DT5H6M7.008S")); 162 163 f2 = new PeriodFormatter(f.getPrinter(), null); 164 assertEquals(f.getPrinter(), f2.getPrinter()); 165 assertEquals(null, f2.getParser()); 166 assertEquals(true, f2.isPrinter()); 167 assertEquals(false, f2.isParser()); 168 assertNotNull(f2.print(p)); 169 try { 170 assertNotNull(f2.parsePeriod("P1Y2M3W4DT5H6M7.008S")); 171 fail(); 172 } catch (UnsupportedOperationException ex) {} 173 174 f2 = new PeriodFormatter(null, f.getParser()); 175 assertEquals(null, f2.getPrinter()); 176 assertEquals(f.getParser(), f2.getParser()); 177 assertEquals(false, f2.isPrinter()); 178 assertEquals(true, f2.isParser()); 179 try { 180 f2.print(p); 181 fail(); 182 } catch (UnsupportedOperationException ex) {} 183 assertNotNull(f2.parsePeriod("P1Y2M3W4DT5H6M7.008S")); 184 } 185 186 //----------------------------------------------------------------------- 187 public void testParsePeriod_simple() { 188 Period expect = new Period(1, 2, 3, 4, 5, 6, 7, 8); 189 assertEquals(expect, f.parsePeriod("P1Y2M3W4DT5H6M7.008S")); 190 191 try { 192 f.parsePeriod("ABC"); 193 fail(); 194 } catch (IllegalArgumentException ex) {} 195 } 196 197 public void testParsePeriod_parseType() { 198 Period expect = new Period(0, 0, 0, 4, 5, 6, 7, 8, PeriodType.dayTime()); 199 assertEquals(expect, f.withParseType(PeriodType.dayTime()).parsePeriod("P4DT5H6M7.008S")); 200 try { 201 f.withParseType(PeriodType.dayTime()).parsePeriod("P3W4DT5H6M7.008S"); 202 fail(); 203 } catch (IllegalArgumentException ex) {} 204 } 205 206 //----------------------------------------------------------------------- 207 public void testParseMutablePeriod_simple() { 208 MutablePeriod expect = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8); 209 assertEquals(expect, f.parseMutablePeriod("P1Y2M3W4DT5H6M7.008S")); 210 211 try { 212 f.parseMutablePeriod("ABC"); 213 fail(); 214 } catch (IllegalArgumentException ex) {} 215 } 216 217 //----------------------------------------------------------------------- 218 public void testParseInto_simple() { 219 MutablePeriod expect = new MutablePeriod(1, 2, 3, 4, 5, 6, 7, 8); 220 MutablePeriod result = new MutablePeriod(); 221 assertEquals(20, f.parseInto(result, "P1Y2M3W4DT5H6M7.008S", 0)); 222 assertEquals(expect, result); 223 224 try { 225 f.parseInto(null, "P1Y2M3W4DT5H6M7.008S", 0); 226 fail(); 227 } catch (IllegalArgumentException ex) {} 228 229 assertEquals(~0, f.parseInto(result, "ABC", 0)); 230 } 231 232 }