package com.tngtech.archunit.base; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import static org.assertj.core.api.Assertions.assertThat; public class OptionalTest { @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void isPresent_works() { assertThat(Optional.of(4).isPresent()).isTrue(); assertThat(Optional.absent().isPresent()).isFalse(); } @Test public void get_works() { assertThat(Optional.of("test").get()).isEqualTo("test"); thrown.expect(NullPointerException.class); Optional.absent().get(); } @Test public void getOrThrow_works() { assertThat(Optional.of("test").getOrThrow(new IllegalStateException("Bummer"))).isEqualTo("test"); thrown.expect(IllegalStateException.class); thrown.expectMessage("Bummer"); Optional.absent().getOrThrow(new IllegalStateException("Bummer")); } @Test public void transform_works() { assertThat(Optional.of(5).transform(TO_STRING)).isEqualTo(Optional.of("5")); assertThat(Optional.absent().transform(TO_STRING)).isEqualTo(Optional.absent()); } @Test public void orNull_works() { assertThat(Optional.of("test").orNull()).isEqualTo("test"); assertThat(Optional.absent().orNull()).isNull(); } @Test public void or_works() { assertThat(Optional.of("test").or("other")).isEqualTo("test"); assertThat(Optional.absent().or("other")).isEqualTo("other"); assertThat(Optional.of("test").or(Optional.of("other"))).isEqualTo(Optional.of("test")); assertThat(Optional.absent().or(Optional.of("other"))).isEqualTo(Optional.of("other")); } @Test public void equals_and_hashcode() { assertThat(Optional.of(5)).isEqualTo(Optional.of(5)); assertThat(Optional.of(5).hashCode()).as("HashCode").isEqualTo(Optional.of(5).hashCode()); assertThat(Optional.of(5)).isNotEqualTo(Optional.of(4)); assertThat(Optional.absent()).isEqualTo(Optional.absent()); assertThat(Optional.absent().hashCode()).as("HashCode").isEqualTo(Optional.absent().hashCode()); } private static final Function<Object, String> TO_STRING = new Function<Object, String>() { @Override public String apply(Object input) { return "" + input; } }; }