--- old/test/jdk/java/time/test/java/time/zone/TestZoneRules.java 2020-03-02 10:34:03.000000000 -0800 +++ new/test/jdk/java/time/test/java/time/zone/TestZoneRules.java 2020-03-02 10:34:03.000000000 -0800 @@ -24,6 +24,7 @@ package test.java.time.zone; import java.time.DayOfWeek; +import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; @@ -36,6 +37,7 @@ import java.time.zone.ZoneOffsetTransition; import java.time.zone.ZoneOffsetTransitionRule; import java.time.zone.ZoneRules; +import java.util.Arrays; import java.util.Collections; import org.testng.annotations.Test; @@ -46,7 +48,7 @@ /** * @summary Tests for ZoneRules class. * - * @bug 8212970 8236903 + * @bug 8212970 8236903 8239836 */ @Test public class TestZoneRules { @@ -108,6 +110,15 @@ }; } + @DataProvider + private Object[][] emptyTransitionList() { + return new Object[][] { + // days, offset, std offset, savings, isDST + {7, 1, 2, -1, true}, + {-7, 1, 1, 0, false}, + }; + } + /** * Test ZoneRules whether the savings are positive in time zones that have * negative savings in the source TZ files. @@ -171,4 +182,27 @@ ZoneOffset offsetB = zoneRulesB.getOffset(maxLocalDateTime); assertEquals(offsetA, offsetB); } + + /** + * Tests whether empty "transitionList" is correctly interpreted. + * @bug 8239836 + */ + @Test(dataProvider="emptyTransitionList") + public void test_EmptyTransitionList(int days, int offset, int stdOffset, int savings, boolean isDST) { + LocalDateTime transitionDay = LocalDateTime.of(2020, 1, 1, 2, 0); + Instant testDay = transitionDay.plusDays(days).toInstant(ZoneOffset.UTC); + ZoneOffsetTransition trans = ZoneOffsetTransition.of( + transitionDay, + ZoneOffset.ofHours(1), + ZoneOffset.ofHours(2)); + ZoneRules rules = ZoneRules.of(ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), + Arrays.asList(trans), + Collections.emptyList(), Collections.emptyList()); + + assertEquals(rules.getOffset(testDay), ZoneOffset.ofHours(offset)); + assertEquals(rules.getStandardOffset(testDay), ZoneOffset.ofHours(stdOffset)); + assertEquals(rules.getDaylightSavings(testDay), Duration.ofHours(savings)); + assertEquals(rules.isDaylightSavings(testDay), isDST); + assertTrue(!rules.isFixedOffset()); + } }