package net.time4j; import java.text.ParseException; import java.util.Arrays; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(Parameterized.class) public class DurationFormatterTest { @Parameterized.Parameters (name= "{index}: " + "(pattern={0},value={1},text={2})") public static Iterable<Object[]> data() { return Arrays.asList( new Object[][] { {"'P'[-###Y'Y'][-#M'M'][-#D'D']['T'[-#h'H'][-#m'M']]", "-P2Y7M15DT30H5M", "P-2Y-7M-15DT-30H-5M"}, {"'P'[-###Y'Y'][-#M'M'][-#D'D']['T'[-#h'H'][-#m'M']]", "P2Y7M15DT30H5M", "P2Y7M15DT30H5M"}, {"'P'[-###Y'Y'][-#M'M'][-#D'D']['T'[-#h'H'][-#m'M']]", "-P2Y7M15DT0H5M", // optional test for zero hours "P-2Y-7M-15DT-5M"}, {"'P'[-###Y'Y'][-#M'M'][-#D'D']['T'[-#h'H'][-#m'M']]", "P2Y7M15DT0H5M", // optional test for zero hours "P2Y7M15DT5M"}, {"[+hh:mm:ss]", "PT0S", ""}, {"+[hh:mm:ss]", "PT0S", "+"}, {"-[hh:mm:ss]", "PT0S", ""}, {"+hh:mm:ss", "PT5H30M34S", "+05:30:34"}, {"+hh:mm:ss", "-PT5H30M34S", "-05:30:34"}, {"-hh:mm:ss", "PT5H30M34S", "05:30:34"}, {"-hh:mm:ss", "-PT5H30M34S", "-05:30:34"}, {"+hh:mm:ss.fff", "PT5H30M34,012S", "+05:30:34.012"}, {"+hh:mm:ss,fff", "PT5H30M34,012S", "+05:30:34,012"}, {"[#D:]hh:mm", "PT17H45M", "17:45"}, {"[#D:]hh:mm", "P1DT17H45M", "1:17:45"}, {"[#D]hhmm", // adjacent digit parsing "PT17H45M", "1745"}, {"[#D]hhmm", // adjacent digit parsing "P1DT17H45M", "11745"}, {"[##D]hhmm", // adjacent digit parsing "P15DT17H45M", "151745"}, {"{D: :en:ONE=day:OTHER=days}", "P3D", "3 days"}, {"-{W: :en:ONE=week:OTHER=weeks}", "-P3W", "-3 weeks"}, {"{s:::ONE=sec:OTHER=secs}", "PT3S", "3secs"}, {"{s:::ONE=sec:OTHER=secs}' per run'", "PT1S", "1sec per run"}, {"{Y: :en:ONE=year:OTHER=years}', '" + "{M: :en:ONE=month:OTHER=months}', '" + "{D: :en:ONE=day:OTHER=days}", "P1Y0M3D", "1 year, 0 months, 3 days"}, {"[{Y: :en:ONE=year:OTHER=years}', ']" + "[{M: :en:ONE=month:OTHER=months}', ']" + "{D: :en:ONE=day:OTHER=days}", "P1Y0M3D", "1 year, 3 days"}, {"{Y:_:en:ONE=Y:OTHER=YY}' + '" + "{M:_:en:ONE=M:OTHER=MM}' + '" + "{D:_:en:ONE=D:OTHER=DD}", "P1Y0M3D", "1_Y + 0_MM + 3_DD"}, } ); } private Duration.Formatter<IsoUnit> formatter; private Duration<IsoUnit> value; private String text; public DurationFormatterTest( String pattern, String value, String text ) throws ParseException { super(); this.formatter = Duration.Formatter.ofPattern(IsoUnit.class, pattern); this.value = Duration.parsePeriod(value); this.text = text; } @Test public void print() { assertThat( this.formatter.format(this.value), is(this.text)); } @Test public void parse() throws ParseException { assertThat( this.formatter.parse(this.text), is(this.value)); } }