package net.time4j; import net.time4j.engine.ChronoElement; import net.time4j.engine.ChronoEntity; import net.time4j.engine.ChronoException; import net.time4j.engine.Chronology; import net.time4j.format.Attributes; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.TimeUnit; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class AxisElementTest { private static final ChronoEntity<?> DATA = new RawEntity(); @Test public void getDate() { PlainDate date = PlainDate.of(2015, 8, 24); assertThat(date.get(PlainDate.axis().element()), is(date)); } @Test public void mergeDate() { assertThat( PlainDate.axis().createFrom(DATA, Attributes.empty(), false, false), is(PlainDate.of(2015, 8, 24))); } @Test public void getTime() { PlainTime time = PlainTime.of(15, 30); assertThat(time.get(PlainTime.axis().element()), is(time)); } @Test public void mergeTime() { assertThat( PlainTime.axis().createFrom(DATA, Attributes.empty(), false, false), is(PlainTime.midnightAtEndOfDay())); } @Test public void getTimestamp() { PlainTimestamp tsp = PlainTimestamp.of(2015, 8, 24, 15, 30); assertThat(tsp.get(PlainTimestamp.axis().element()), is(tsp)); } @Test public void mergeTimestamp() { assertThat( PlainTimestamp.axis().createFrom(DATA, Attributes.empty(), false, false), is(PlainTimestamp.of(2015, 8, 24, 17, 45))); } @Test public void getMoment() { Moment moment = Moment.UNIX_EPOCH.plus(4, TimeUnit.SECONDS); assertThat(moment.get(Moment.axis().element()), is(moment)); } @Test public void mergeMoment() { assertThat( Moment.axis().createFrom(DATA, Attributes.empty(), false, false), is(Moment.UNIX_EPOCH)); } @Test public void getRegisteredElements() { assertThat( DATA.getRegisteredElements().contains(PlainDate.axis().element()), is(true)); } private static class RawEntity extends ChronoEntity<RawEntity> { @Override public boolean contains(ChronoElement<?> element) { return ( (element == PlainDate.axis().element()) || (element == PlainTime.axis().element()) || (element == PlainTimestamp.axis().element()) || (element == Moment.axis().element()) ); } @Override public <V> V get(ChronoElement<V> element) { Object ret; if (element == PlainDate.axis().element()) { ret = PlainDate.of(2015, 8, 24); } else if (element == PlainTime.axis().element()) { ret = PlainTime.midnightAtEndOfDay(); } else if (element == PlainTimestamp.axis().element()) { ret = PlainTimestamp.of(2015, 8, 24, 17, 45); } else if (element == Moment.axis().element()) { ret = Moment.UNIX_EPOCH; } else { throw new ChronoException( "Not registered: " + element.name()); } return element.getType().cast(ret); } @Override public int getInt(ChronoElement<Integer> element) { return Integer.MIN_VALUE; } @Override public <V> boolean isValid(ChronoElement<V> element, V value) { return false; } @Override public <V> RawEntity with(ChronoElement<V> element, V value) { throw new UnsupportedOperationException(); } @Override public <V> V getMinimum(ChronoElement<V> element) { throw new UnsupportedOperationException(); } @Override public <V> V getMaximum(ChronoElement<V> element) { throw new UnsupportedOperationException(); } @Override public Set<ChronoElement<?>> getRegisteredElements() { Set<ChronoElement<?>> elements = new HashSet<>(); elements.add(PlainDate.axis().element()); elements.add(PlainTime.axis().element()); elements.add(PlainTimestamp.axis().element()); elements.add(Moment.axis().element()); return Collections.unmodifiableSet(elements); } @Override protected Chronology<RawEntity> getChronology() { throw new UnsupportedOperationException(); } } }