test/java/time/tck/java/time/TCKDuration.java

Print this page

        

*** 67,89 **** import static java.time.temporal.ChronoUnit.MINUTES; import static java.time.temporal.ChronoUnit.NANOS; import static java.time.temporal.ChronoUnit.SECONDS; import static java.time.temporal.ChronoUnit.WEEKS; import static org.testng.Assert.assertEquals; import static org.testng.Assert.fail; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; - import java.time.DateTimeException; import java.time.Duration; import java.time.Instant; import java.time.format.DateTimeParseException; import java.time.temporal.TemporalUnit; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** --- 67,95 ---- import static java.time.temporal.ChronoUnit.MINUTES; import static java.time.temporal.ChronoUnit.NANOS; import static java.time.temporal.ChronoUnit.SECONDS; import static java.time.temporal.ChronoUnit.WEEKS; import static org.testng.Assert.assertEquals; + import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.time.DateTimeException; import java.time.Duration; import java.time.Instant; + import java.time.LocalTime; + import java.time.ZoneOffset; + import java.time.ZonedDateTime; import java.time.format.DateTimeParseException; + import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalUnit; + import java.util.List; + import java.util.Locale; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /**
*** 434,491 **** } //----------------------------------------------------------------------- // between() //----------------------------------------------------------------------- ! @DataProvider(name="DurationBetween") ! Object[][] provider_factory_between_Instant_Instant() { return new Object[][] { {0, 0, 0, 0, 0, 0}, {3, 0, 7, 0, 4, 0}, {3, 20, 7, 50, 4, 30}, {3, 80, 7, 50, 3, 999999970}, {7, 0, 3, 0, -4, 0}, }; } ! @Test(dataProvider="DurationBetween", groups={"tck"}) ! public void factory_between_Instant_Instant(long secs1, int nanos1, long secs2, int nanos2, long expectedSeconds, int expectedNanoOfSecond) { Instant start = Instant.ofEpochSecond(secs1, nanos1); Instant end = Instant.ofEpochSecond(secs2, nanos2); Duration t = Duration.between(start, end); assertEquals(t.getSeconds(), expectedSeconds); assertEquals(t.getNano(), expectedNanoOfSecond); } ! @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) ! public void factory_between_Instant_Instant_startNull() { Instant end = Instant.ofEpochSecond(1); Duration.between(null, end); } ! @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) ! public void factory_between_Instant_Instant_endNull() { Instant start = Instant.ofEpochSecond(1); Duration.between(start, null); } //----------------------------------------------------------------------- // parse(String) //----------------------------------------------------------------------- ! @DataProvider(name="Parse") ! Object[][] provider_factory_parse() { return new Object[][] { {"PT0S", 0, 0}, - {"pT0S", 0, 0}, - {"Pt0S", 0, 0}, - {"PT0s", 0, 0}, - {"PT1S", 1, 0}, {"PT12S", 12, 0}, {"PT123456789S", 123456789, 0}, {"PT" + Long.MAX_VALUE + "S", Long.MAX_VALUE, 0}, {"PT-1S", -1, 0}, {"PT-12S", -12, 0}, {"PT-123456789S", -123456789, 0}, {"PT" + Long.MIN_VALUE + "S", Long.MIN_VALUE, 0}, --- 440,520 ---- } //----------------------------------------------------------------------- // between() //----------------------------------------------------------------------- ! @DataProvider(name="durationBetweenInstant") ! Object[][] data_durationBetweenInstant() { return new Object[][] { {0, 0, 0, 0, 0, 0}, {3, 0, 7, 0, 4, 0}, {3, 20, 7, 50, 4, 30}, {3, 80, 7, 50, 3, 999999970}, {7, 0, 3, 0, -4, 0}, }; } ! @Test(dataProvider="durationBetweenInstant") ! public void factory_between_TemporalTemporal_Instant(long secs1, int nanos1, long secs2, int nanos2, long expectedSeconds, int expectedNanoOfSecond) { Instant start = Instant.ofEpochSecond(secs1, nanos1); Instant end = Instant.ofEpochSecond(secs2, nanos2); Duration t = Duration.between(start, end); assertEquals(t.getSeconds(), expectedSeconds); assertEquals(t.getNano(), expectedNanoOfSecond); } ! @DataProvider(name="durationBetweenLocalTime") ! Object[][] data_durationBetweenLocalTime() { ! return new Object[][] { ! {LocalTime.of(11, 0, 30), LocalTime.of(11, 0, 45), 15L, 0}, ! {LocalTime.of(11, 0, 30), LocalTime.of(11, 0, 25), -5L, 0}, ! }; ! } ! ! @Test(dataProvider="durationBetweenLocalTime") ! public void factory_between_TemporalTemporal_LT(LocalTime start, LocalTime end, long expectedSeconds, int expectedNanoOfSecond) { ! Duration t = Duration.between(start, end); ! assertEquals(t.getSeconds(), expectedSeconds); ! assertEquals(t.getNano(), expectedNanoOfSecond); ! } ! ! @Test(expectedExceptions=DateTimeException.class) ! public void factory_between_TemporalTemporal_mixedTypes() { ! Instant start = Instant.ofEpochSecond(1); ! ZonedDateTime end = Instant.ofEpochSecond(4).atZone(ZoneOffset.UTC); ! Duration.between(start, end); ! } ! ! @Test(expectedExceptions=NullPointerException.class) ! public void factory_between__TemporalTemporal_startNull() { Instant end = Instant.ofEpochSecond(1); Duration.between(null, end); } ! @Test(expectedExceptions=NullPointerException.class) ! public void factory_between__TemporalTemporal_endNull() { Instant start = Instant.ofEpochSecond(1); Duration.between(start, null); } //----------------------------------------------------------------------- // parse(String) //----------------------------------------------------------------------- ! @DataProvider(name="parseSuccess") ! Object[][] data_parseSuccess() { return new Object[][] { {"PT0S", 0, 0}, {"PT1S", 1, 0}, {"PT12S", 12, 0}, {"PT123456789S", 123456789, 0}, {"PT" + Long.MAX_VALUE + "S", Long.MAX_VALUE, 0}, + {"PT+1S", 1, 0}, + {"PT+12S", 12, 0}, + {"PT+123456789S", 123456789, 0}, + {"PT+" + Long.MAX_VALUE + "S", Long.MAX_VALUE, 0}, + {"PT-1S", -1, 0}, {"PT-12S", -12, 0}, {"PT-123456789S", -123456789, 0}, {"PT" + Long.MIN_VALUE + "S", Long.MIN_VALUE, 0},
*** 509,612 **** {"PT-1.12345678S", -2, 1000000000 - 123456780}, {"PT-1.123456789S", -2, 1000000000 - 123456789}, {"PT" + Long.MAX_VALUE + ".123456789S", Long.MAX_VALUE, 123456789}, {"PT" + Long.MIN_VALUE + ".000000000S", Long.MIN_VALUE, 0}, }; } ! @Test(dataProvider="Parse", groups={"tck"}) public void factory_parse(String text, long expectedSeconds, int expectedNanoOfSecond) { ! Duration t = Duration.parse(text); ! assertEquals(t.getSeconds(), expectedSeconds); ! assertEquals(t.getNano(), expectedNanoOfSecond); } ! @Test(dataProvider="Parse", groups={"tck"}) public void factory_parse_comma(String text, long expectedSeconds, int expectedNanoOfSecond) { text = text.replace('.', ','); ! Duration t = Duration.parse(text); ! assertEquals(t.getSeconds(), expectedSeconds); ! assertEquals(t.getNano(), expectedNanoOfSecond); } ! @DataProvider(name="ParseFailures") ! Object[][] provider_factory_parseFailures() { return new Object[][] { {""}, {"PTS"}, {"AT0S"}, {"PA0S"}, {"PT0A"}, {"PT+S"}, {"PT-S"}, {"PT.S"}, {"PTAS"}, - {"PT+0S"}, - {"PT+00S"}, - {"PT+000S"}, - {"PT-0S"}, - {"PT-00S"}, - {"PT-000S"}, - {"PT+1S"}, {"PT-.S"}, {"PT+.S"}, {"PT1ABC2S"}, {"PT1.1ABC2S"}, {"PT123456789123456789123456789S"}, {"PT0.1234567891S"}, - {"PT1.S"}, - {"PT.1S"}, {"PT2.-3"}, {"PT-2.-3"}, {"PT2.+3"}, {"PT-2.+3"}, }; } ! @Test(dataProvider="ParseFailures", expectedExceptions=DateTimeParseException.class, groups={"tck"}) public void factory_parseFailures(String text) { Duration.parse(text); } ! @Test(dataProvider="ParseFailures", expectedExceptions=DateTimeParseException.class, groups={"tck"}) public void factory_parseFailures_comma(String text) { text = text.replace('.', ','); Duration.parse(text); } ! @Test(expectedExceptions=DateTimeParseException.class, groups={"tck"}) public void factory_parse_tooBig() { Duration.parse("PT" + Long.MAX_VALUE + "1S"); } ! @Test(expectedExceptions=DateTimeParseException.class, groups={"tck"}) public void factory_parse_tooBig_decimal() { Duration.parse("PT" + Long.MAX_VALUE + "1.1S"); } ! @Test(expectedExceptions=DateTimeParseException.class, groups={"tck"}) public void factory_parse_tooSmall() { Duration.parse("PT" + Long.MIN_VALUE + "1S"); } ! @Test(expectedExceptions=DateTimeParseException.class, groups={"tck"}) public void factory_parse_tooSmall_decimal() { Duration.parse("PT" + Long.MIN_VALUE + ".1S"); } ! @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) public void factory_parse_nullText() { ! Duration.parse((String) null); } ! @Test(groups={"tck"}) public void test_deserialization() throws Exception { Duration orginal = Duration.ofSeconds(2); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(baos); out.writeObject(orginal); --- 538,757 ---- {"PT-1.12345678S", -2, 1000000000 - 123456780}, {"PT-1.123456789S", -2, 1000000000 - 123456789}, {"PT" + Long.MAX_VALUE + ".123456789S", Long.MAX_VALUE, 123456789}, {"PT" + Long.MIN_VALUE + ".000000000S", Long.MIN_VALUE, 0}, + + {"PT01S", 1, 0}, + {"PT001S", 1, 0}, + {"PT000S", 0, 0}, + {"PT+01S", 1, 0}, + {"PT-01S", -1, 0}, + + {"PT1.S", 1, 0}, + {"PT+1.S", 1, 0}, + {"PT-1.S", -1, 0}, + + {"P0D", 0, 0}, + {"P0DT0H", 0, 0}, + {"P0DT0M", 0, 0}, + {"P0DT0S", 0, 0}, + {"P0DT0H0S", 0, 0}, + {"P0DT0M0S", 0, 0}, + {"P0DT0H0M0S", 0, 0}, + + {"P1D", 86400, 0}, + {"P1DT0H", 86400, 0}, + {"P1DT0M", 86400, 0}, + {"P1DT0S", 86400, 0}, + {"P1DT0H0S", 86400, 0}, + {"P1DT0M0S", 86400, 0}, + {"P1DT0H0M0S", 86400, 0}, + + {"P3D", 86400 * 3, 0}, + {"P3DT2H", 86400 * 3 + 3600 * 2, 0}, + {"P3DT2M", 86400 * 3 + 60 * 2, 0}, + {"P3DT2S", 86400 * 3 + 2, 0}, + {"P3DT2H1S", 86400 * 3 + 3600 * 2 + 1, 0}, + {"P3DT2M1S", 86400 * 3 + 60 * 2 + 1, 0}, + {"P3DT2H1M1S", 86400 * 3 + 3600 * 2 + 60 + 1, 0}, + + {"P-3D", -86400 * 3, 0}, + {"P-3DT2H", -86400 * 3 + 3600 * 2, 0}, + {"P-3DT2M", -86400 * 3 + 60 * 2, 0}, + {"P-3DT2S", -86400 * 3 + 2, 0}, + {"P-3DT2H1S", -86400 * 3 + 3600 * 2 + 1, 0}, + {"P-3DT2M1S", -86400 * 3 + 60 * 2 + 1, 0}, + {"P-3DT2H1M1S", -86400 * 3 + 3600 * 2 + 60 + 1, 0}, + + {"P-3DT-2H", -86400 * 3 - 3600 * 2, 0}, + {"P-3DT-2M", -86400 * 3 - 60 * 2, 0}, + {"P-3DT-2S", -86400 * 3 - 2, 0}, + {"P-3DT-2H1S", -86400 * 3 - 3600 * 2 + 1, 0}, + {"P-3DT-2M1S", -86400 * 3 - 60 * 2 + 1, 0}, + {"P-3DT-2H1M1S", -86400 * 3 - 3600 * 2 + 60 + 1, 0}, + + {"PT0H", 0, 0}, + {"PT0H0M", 0, 0}, + {"PT0H0S", 0, 0}, + {"PT0H0M0S", 0, 0}, + + {"PT1H", 3600, 0}, + {"PT3H", 3600 * 3, 0}, + {"PT-1H", -3600, 0}, + {"PT-3H", -3600 * 3, 0}, + + {"PT2H5M", 3600 * 2 + 60 * 5, 0}, + {"PT2H5S", 3600 * 2 + 5, 0}, + {"PT2H5M8S", 3600 * 2 + 60 * 5 + 8, 0}, + {"PT-2H5M", -3600 * 2 + 60 * 5, 0}, + {"PT-2H5S", -3600 * 2 + 5, 0}, + {"PT-2H5M8S", -3600 * 2 + 60 * 5 + 8, 0}, + {"PT-2H-5M", -3600 * 2 - 60 * 5, 0}, + {"PT-2H-5S", -3600 * 2 - 5, 0}, + {"PT-2H-5M8S", -3600 * 2 - 60 * 5 + 8, 0}, + {"PT-2H-5M-8S", -3600 * 2 - 60 * 5 - 8, 0}, + + {"PT0M", 0, 0}, + {"PT1M", 60, 0}, + {"PT3M", 60 * 3, 0}, + {"PT-1M", -60, 0}, + {"PT-3M", -60 * 3, 0}, + {"P0DT3M", 60 * 3, 0}, + {"P0DT-3M", -60 * 3, 0}, }; } ! @Test(dataProvider="parseSuccess") public void factory_parse(String text, long expectedSeconds, int expectedNanoOfSecond) { ! Duration test = Duration.parse(text); ! assertEquals(test.getSeconds(), expectedSeconds); ! assertEquals(test.getNano(), expectedNanoOfSecond); ! } ! ! @Test(dataProvider="parseSuccess") ! public void factory_parse_plus(String text, long expectedSeconds, int expectedNanoOfSecond) { ! Duration test = Duration.parse("+" + text); ! assertEquals(test.getSeconds(), expectedSeconds); ! assertEquals(test.getNano(), expectedNanoOfSecond); } ! @Test(dataProvider="parseSuccess") ! public void factory_parse_minus(String text, long expectedSeconds, int expectedNanoOfSecond) { ! Duration test; ! try { ! test = Duration.parse("-" + text); ! } catch (DateTimeParseException ex) { ! assertEquals(expectedSeconds == Long.MIN_VALUE, true); ! return; ! } ! // not inside try/catch or it breaks test ! assertEquals(test, Duration.ofSeconds(expectedSeconds, expectedNanoOfSecond).negated()); ! } ! ! @Test(dataProvider="parseSuccess") public void factory_parse_comma(String text, long expectedSeconds, int expectedNanoOfSecond) { text = text.replace('.', ','); ! Duration test = Duration.parse(text); ! assertEquals(test.getSeconds(), expectedSeconds); ! assertEquals(test.getNano(), expectedNanoOfSecond); ! } ! ! @Test(dataProvider="parseSuccess") ! public void factory_parse_lowerCase(String text, long expectedSeconds, int expectedNanoOfSecond) { ! Duration test = Duration.parse(text.toLowerCase(Locale.ENGLISH)); ! assertEquals(test.getSeconds(), expectedSeconds); ! assertEquals(test.getNano(), expectedNanoOfSecond); } ! @DataProvider(name="parseFailure") ! Object[][] data_parseFailure() { return new Object[][] { {""}, + {"ABCDEF"}, + {" PT0S"}, + {"PT0S "}, + {"PTS"}, {"AT0S"}, {"PA0S"}, {"PT0A"}, + {"P0Y"}, + {"P1Y"}, + {"P-2Y"}, + {"P0M"}, + {"P1M"}, + {"P-2M"}, + {"P3Y2D"}, + {"P3M2D"}, + {"P3W"}, + {"P-3W"}, + {"P2YT30S"}, + {"P2MT30S"}, + + {"P1DT"}, + {"PT+S"}, {"PT-S"}, {"PT.S"}, {"PTAS"}, {"PT-.S"}, {"PT+.S"}, {"PT1ABC2S"}, {"PT1.1ABC2S"}, {"PT123456789123456789123456789S"}, {"PT0.1234567891S"}, {"PT2.-3"}, {"PT-2.-3"}, {"PT2.+3"}, {"PT-2.+3"}, }; } ! @Test(dataProvider="parseFailure", expectedExceptions=DateTimeParseException.class) public void factory_parseFailures(String text) { Duration.parse(text); } ! @Test(dataProvider="parseFailure", expectedExceptions=DateTimeParseException.class) public void factory_parseFailures_comma(String text) { text = text.replace('.', ','); Duration.parse(text); } ! @Test(expectedExceptions=DateTimeParseException.class) public void factory_parse_tooBig() { Duration.parse("PT" + Long.MAX_VALUE + "1S"); } ! @Test(expectedExceptions=DateTimeParseException.class) public void factory_parse_tooBig_decimal() { Duration.parse("PT" + Long.MAX_VALUE + "1.1S"); } ! @Test(expectedExceptions=DateTimeParseException.class) public void factory_parse_tooSmall() { Duration.parse("PT" + Long.MIN_VALUE + "1S"); } ! @Test(expectedExceptions=DateTimeParseException.class) public void factory_parse_tooSmall_decimal() { Duration.parse("PT" + Long.MIN_VALUE + ".1S"); } ! @Test(expectedExceptions=NullPointerException.class) public void factory_parse_nullText() { ! Duration.parse(null); } ! //----------------------------------------------------------------------- ! @Test public void test_deserialization() throws Exception { Duration orginal = Duration.ofSeconds(2); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(baos); out.writeObject(orginal);
*** 618,628 **** } //----------------------------------------------------------------------- // isZero(), isPositive(), isPositiveOrZero(), isNegative(), isNegativeOrZero() //----------------------------------------------------------------------- ! @Test(groups={"tck"}) public void test_isZero() { assertEquals(Duration.ofNanos(0).isZero(), true); assertEquals(Duration.ofSeconds(0).isZero(), true); assertEquals(Duration.ofNanos(1).isZero(), false); assertEquals(Duration.ofSeconds(1).isZero(), false); --- 763,773 ---- } //----------------------------------------------------------------------- // isZero(), isPositive(), isPositiveOrZero(), isNegative(), isNegativeOrZero() //----------------------------------------------------------------------- ! @Test public void test_isZero() { assertEquals(Duration.ofNanos(0).isZero(), true); assertEquals(Duration.ofSeconds(0).isZero(), true); assertEquals(Duration.ofNanos(1).isZero(), false); assertEquals(Duration.ofSeconds(1).isZero(), false);
*** 630,652 **** assertEquals(Duration.ofNanos(-1).isZero(), false); assertEquals(Duration.ofSeconds(-1).isZero(), false); assertEquals(Duration.ofSeconds(-1, -1).isZero(), false); } ! @Test(groups={"tck"}) ! public void test_isPositive() { ! assertEquals(Duration.ofNanos(0).isPositive(), false); ! assertEquals(Duration.ofSeconds(0).isPositive(), false); ! assertEquals(Duration.ofNanos(1).isPositive(), true); ! assertEquals(Duration.ofSeconds(1).isPositive(), true); ! assertEquals(Duration.ofSeconds(1, 1).isPositive(), true); ! assertEquals(Duration.ofNanos(-1).isPositive(), false); ! assertEquals(Duration.ofSeconds(-1).isPositive(), false); ! assertEquals(Duration.ofSeconds(-1, -1).isPositive(), false); ! } ! ! @Test(groups={"tck"}) public void test_isNegative() { assertEquals(Duration.ofNanos(0).isNegative(), false); assertEquals(Duration.ofSeconds(0).isNegative(), false); assertEquals(Duration.ofNanos(1).isNegative(), false); assertEquals(Duration.ofSeconds(1).isNegative(), false); --- 775,785 ---- assertEquals(Duration.ofNanos(-1).isZero(), false); assertEquals(Duration.ofSeconds(-1).isZero(), false); assertEquals(Duration.ofSeconds(-1, -1).isZero(), false); } ! @Test public void test_isNegative() { assertEquals(Duration.ofNanos(0).isNegative(), false); assertEquals(Duration.ofSeconds(0).isNegative(), false); assertEquals(Duration.ofNanos(1).isNegative(), false); assertEquals(Duration.ofSeconds(1).isNegative(), false);
*** 1987,2008 **** Duration a = durations[i]; for (int j = 0; j < durations.length; j++) { Duration b = durations[j]; if (i < j) { assertEquals(a.compareTo(b)< 0, true, a + " <=> " + b); - assertEquals(a.isLessThan(b), true, a + " <=> " + b); - assertEquals(a.isGreaterThan(b), false, a + " <=> " + b); assertEquals(a.equals(b), false, a + " <=> " + b); } else if (i > j) { assertEquals(a.compareTo(b) > 0, true, a + " <=> " + b); - assertEquals(a.isLessThan(b), false, a + " <=> " + b); - assertEquals(a.isGreaterThan(b), true, a + " <=> " + b); assertEquals(a.equals(b), false, a + " <=> " + b); } else { assertEquals(a.compareTo(b), 0, a + " <=> " + b); - assertEquals(a.isLessThan(b), false, a + " <=> " + b); - assertEquals(a.isGreaterThan(b), false, a + " <=> " + b); assertEquals(a.equals(b), true, a + " <=> " + b); } } } } --- 2120,2135 ----
*** 2011,2032 **** public void test_compareTo_ObjectNull() { Duration a = Duration.ofSeconds(0L, 0); a.compareTo(null); } - @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) - public void test_isLessThan_ObjectNull() { - Duration a = Duration.ofSeconds(0L, 0); - a.isLessThan(null); - } - - @Test(expectedExceptions=NullPointerException.class, groups={"tck"}) - public void test_isGreaterThan_ObjectNull() { - Duration a = Duration.ofSeconds(0L, 0); - a.isGreaterThan(null); - } - @Test(expectedExceptions=ClassCastException.class, groups={"tck"}) @SuppressWarnings({ "unchecked", "rawtypes" }) public void compareToNonDuration() { Comparable c = Duration.ofSeconds(0L); c.compareTo(new Object()); --- 2138,2147 ----
*** 2094,2104 **** } //----------------------------------------------------------------------- // toString() //----------------------------------------------------------------------- ! @DataProvider(name="ToString") Object[][] provider_toString() { return new Object[][] { {0, 0, "PT0S"}, {0, 1, "PT0.000000001S"}, {0, 10, "PT0.00000001S"}, --- 2209,2219 ---- } //----------------------------------------------------------------------- // toString() //----------------------------------------------------------------------- ! @DataProvider(name="toString") Object[][] provider_toString() { return new Object[][] { {0, 0, "PT0S"}, {0, 1, "PT0.000000001S"}, {0, 10, "PT0.00000001S"},
*** 2116,2135 **** {0, 123456000, "PT0.123456S"}, {0, 123456700, "PT0.1234567S"}, {0, 123456780, "PT0.12345678S"}, {0, 123456789, "PT0.123456789S"}, {1, 0, "PT1S"}, {-1, 0, "PT-1S"}, {-1, 1000, "PT-0.999999S"}, {-1, 900000000, "PT-0.1S"}, ! {Long.MAX_VALUE, 0, "PT9223372036854775807S"}, ! {Long.MIN_VALUE, 0, "PT-9223372036854775808S"}, }; } ! @Test(dataProvider="ToString", groups={"tck"}) public void test_toString(long seconds, int nanos, String expected) { Duration t = Duration.ofSeconds(seconds, nanos); assertEquals(t.toString(), expected); } } --- 2231,2304 ---- {0, 123456000, "PT0.123456S"}, {0, 123456700, "PT0.1234567S"}, {0, 123456780, "PT0.12345678S"}, {0, 123456789, "PT0.123456789S"}, {1, 0, "PT1S"}, + {59, 0, "PT59S"}, + {60, 0, "PT1M"}, + {61, 0, "PT1M1S"}, + {3599, 0, "PT59M59S"}, + {3600, 0, "PT1H"}, + {3601, 0, "PT1H1S"}, + {3661, 0, "PT1H1M1S"}, + {86399, 0, "PT23H59M59S"}, + {86400, 0, "PT24H"}, + {59, 0, "PT59S"}, + {59, 0, "PT59S"}, {-1, 0, "PT-1S"}, {-1, 1000, "PT-0.999999S"}, {-1, 900000000, "PT-0.1S"}, ! {Long.MAX_VALUE, 0, "PT" + (Long.MAX_VALUE / 3600) + "H" + ! ((Long.MAX_VALUE % 3600) / 60) + "M" + (Long.MAX_VALUE % 60) + "S"}, ! {Long.MIN_VALUE, 0, "PT" + (Long.MIN_VALUE / 3600) + "H" + ! ((Long.MIN_VALUE % 3600) / 60) + "M" + (Long.MIN_VALUE % 60) + "S"}, }; } ! @Test(dataProvider="toString") public void test_toString(long seconds, int nanos, String expected) { Duration t = Duration.ofSeconds(seconds, nanos); assertEquals(t.toString(), expected); } + //----------------------------------------------------------------------- + @Test(groups="{tck}") + public void test_duration_getUnits() { + Duration duration = Duration.ofSeconds(5000, 1000); + List<TemporalUnit> units = duration.getUnits(); + assertEquals(units.size(), 2, "Period.getUnits length"); + assertTrue(units.contains(ChronoUnit.SECONDS), "Period.getUnits contains ChronoUnit.SECONDS"); + assertTrue(units.contains(ChronoUnit.NANOS), "contains ChronoUnit.NANOS"); + } + + @Test() + public void test_getUnit() { + Duration test = Duration.ofSeconds(2000, 1000); + long seconds = test.get(ChronoUnit.SECONDS); + assertEquals(seconds, 2000, "duration.get(SECONDS)"); + long nanos = test.get(ChronoUnit.NANOS); + assertEquals(nanos, 1000, "duration.get(NANOS)"); + } + + @DataProvider(name="BadTemporalUnit") + Object[][] provider_factory_of_badTemporalUnit() { + return new Object[][] { + {0, MICROS}, + {0, MILLIS}, + {0, MINUTES}, + {0, HOURS}, + {0, HALF_DAYS}, + {0, DAYS}, + {0, ChronoUnit.MONTHS}, + {0, ChronoUnit.YEARS}, + {0, ChronoUnit.DECADES}, + {0, ChronoUnit.CENTURIES}, + {0, ChronoUnit.MILLENNIA}, + }; + } + + @Test(dataProvider="BadTemporalUnit", expectedExceptions=DateTimeException.class) + public void test_bad_getUnit(long amount, TemporalUnit unit) { + Duration t = Duration.of(amount, unit); + long actual = t.get(unit); + } }