package io.norberg.automatter;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.List;
import javax.annotation.Nullable;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class GuavaOptionalTest {
public @Rule ExpectedException expectedException = ExpectedException.none();
@AutoMatter
interface GuavaOptionals {
Optional<String> foo();
Optional<List<String>> bar();
@Nullable Optional<String> baz();
}
GuavaOptionalsBuilder builder;
@Before
public void setup() {
builder = new GuavaOptionalsBuilder();
}
@Test
public void testDefaults() {
final GuavaOptionals foobar = builder.build();
assertThat(foobar.foo(), is(Optional.<String>absent()));
assertThat(foobar.bar(), is(Optional.<List<String>>absent()));
assertThat(foobar.baz(), is(nullValue()));
}
@Test
public void verifySettingNullGivesAbsent() {
builder.foo((String) null);
final GuavaOptionals foobar = builder.build();
assertThat(foobar.foo(), is(Optional.<String>absent()));
}
@Test
public void verifySettingValueGivesPresent() {
builder.foo("bar");
final GuavaOptionals foobar = builder.build();
assertThat(foobar.foo(), is(Optional.of("bar")));
}
@Test
public void verifySettingNonNullableNullNPEs() {
expectedException.expect(NullPointerException.class);
expectedException.expectMessage("foo");
builder.foo((Optional<String>) null);
}
@Test
public void verifySettingNullableNull() {
builder.baz("hello");
builder.baz((Optional<String>) null);
final GuavaOptionals foobar = builder.build();
assertThat(foobar.baz(), is(nullValue()));
}
@Test
public void verifySettingExtendingValue() {
builder.bar(Optional.fromNullable(ImmutableList.of("foo", "bar")));
}
}