package net.time4j.tz.threeten;
import net.time4j.Moment;
import net.time4j.PlainDate;
import net.time4j.PlainTime;
import net.time4j.tz.OffsetSign;
import net.time4j.tz.TransitionHistory;
import net.time4j.tz.ZonalOffset;
import net.time4j.tz.ZonalTransition;
import net.time4j.tz.ZoneModelProvider;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.io.IOException;
import static net.time4j.ClockUnit.MINUTES;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
@RunWith(JUnit4.class)
public class JdkZoneProviderTest {
private static ZoneModelProvider zp = null;
@BeforeClass
public static void init() {
zp = new JdkZoneProviderSPI();
System.out.println("Test of Threeten-ZoneProvider: version=" + zp.getVersion());
}
@Test
public void getFallback() {
assertThat(zp.getFallback(), is(""));
}
@Test
public void getLocation() {
assertThat(zp.getLocation(), is("{java.home}/lib/tzdb.dat"));
}
@Test
public void getName() {
assertThat(zp.getName(), is("TZDB"));
}
@Test
public void getAliases() {
assertThat(
zp.getAliases().isEmpty(),
is(true));
}
/*
@Test
public void normalized() {
assertThat(
ZoneId.of("Atlantic/Jan_Mayen").normalized().getId(),
is("Europe/Oslo")); // normalization does not work (is just relevant for resolving fixed offsets)
}
*/
@Test
public void compareAliasWithOriginal() {
TransitionHistory histJanMayen = zp.load("Atlantic/Jan_Mayen");
TransitionHistory histOslo = zp.load("Europe/Oslo");
assertThat(histJanMayen, is(histOslo)); // same rules as expected for an alias
}
@Test
public void loadSystemV() {
TransitionHistory h = zp.load("SystemV/EST5");
assertThat(h.isEmpty(), is(true));
assertThat(
h.getInitialOffset(),
is(ZonalOffset.ofHours(OffsetSign.BEHIND_UTC, 5)));
}
@Test
public void loadAllData() {
for (String tzid : zp.getAvailableIDs()) {
try {
TransitionHistory history = zp.load(tzid);
assertThat(history, notNullValue());
} catch (RuntimeException ex) {
fail("Problem with loading history of: " + tzid);
}
}
}
@Test
public void dumpCasablanca() throws IOException {
System.out.println("Africa/Casablanca ----------------------");
zp.load("Africa/Casablanca").dump(System.out);
}
@Test
public void dumpDhaka() throws IOException {
System.out.println("Asia/Dhaka -----------------------------");
zp.load("Asia/Dhaka").dump(System.out);
}
@Test
public void dumpBerlin() throws IOException {
System.out.println("Europe/Berlin --------------------------");
zp.load("Europe/Berlin").dump(System.out);
}
@Test
public void midsummer() throws IOException {
PlainDate date = PlainDate.of(1945, 5, 24);
PlainTime time = PlainTime.of(2);
Moment m = date.at(time).at(ZonalOffset.ofTotalSeconds(7200));
ZonalTransition conflict =
zp.load("Europe/Berlin").getConflictTransition(date, time);
assertThat(
conflict.getPosixTime(),
is(m.getPosixTime()));
assertThat(
conflict.getPreviousOffset(),
is(2 * 3600));
assertThat(
conflict.getTotalOffset(),
is(3 * 3600));
assertThat(
conflict.getDaylightSavingOffset(),
is(2 * 3600));
}
@Test
public void dhakaInDSTa() throws IOException {
TransitionHistory history = zp.load("Asia/Dhaka");
PlainDate date = PlainDate.of(2009, 6, 19);
PlainTime time = PlainTime.of(23, 0);
Moment m = date.at(time).at(ZonalOffset.ofTotalSeconds(6 * 3600));
ZonalTransition conflict = // at first position in gap
history.getConflictTransition(date, time);
assertThat(
conflict.getPosixTime(),
is(m.getPosixTime()));
assertThat(
conflict.getPreviousOffset(),
is(6 * 3600));
assertThat(
conflict.getTotalOffset(),
is(7 * 3600));
assertThat(
conflict.getDaylightSavingOffset(),
is(3600));
}
@Test
public void dhakaInDSTb() throws IOException {
TransitionHistory history = zp.load("Asia/Dhaka");
PlainDate date = PlainDate.of(2009, 6, 19);
PlainTime time = PlainTime.of(23, 0);
Moment m = date.at(time).at(ZonalOffset.ofTotalSeconds(6 * 3600));
ZonalTransition conflict = // at late position in gap
history.getConflictTransition(date, time.plus(59, MINUTES));
assertThat(
conflict.getPosixTime(),
is(m.getPosixTime()));
assertThat(
conflict.getPreviousOffset(),
is(6 * 3600));
assertThat(
conflict.getTotalOffset(),
is(7 * 3600));
assertThat(
conflict.getDaylightSavingOffset(),
is(3600));
}
@Test
public void dhakaAtEndOf2009a() throws IOException {
TransitionHistory history = zp.load("Asia/Dhaka");
PlainDate date = PlainDate.of(2009, 12, 31);
PlainTime time = PlainTime.midnightAtEndOfDay();
Moment m = date.at(time).at(ZonalOffset.ofTotalSeconds(7 * 3600));
ZonalTransition conflict = // at first ambivalent time
history.getConflictTransition(date, PlainTime.of(23, 0));
assertThat(
conflict.getPosixTime(),
is(m.getPosixTime()));
assertThat(
conflict.getPreviousOffset(),
is(7 * 3600));
assertThat(
conflict.getTotalOffset(),
is(6 * 3600));
assertThat(
conflict.getDaylightSavingOffset(),
is(0));
}
@Test
public void dhakaAtEndOf2009b() throws IOException {
TransitionHistory history = zp.load("Asia/Dhaka");
PlainDate date = PlainDate.of(2009, 12, 31);
PlainTime time = PlainTime.midnightAtEndOfDay();
Moment m = date.at(time).at(ZonalOffset.ofTotalSeconds(7 * 3600));
ZonalTransition conflict = // any ambivalent time
history.getConflictTransition(date, PlainTime.of(23, 30));
assertThat(
conflict.getPosixTime(),
is(m.getPosixTime()));
assertThat(
conflict.getPreviousOffset(),
is(7 * 3600));
assertThat(
conflict.getTotalOffset(),
is(6 * 3600));
assertThat(
conflict.getDaylightSavingOffset(),
is(0));
}
}