package de.is24.guava; import com.google.common.base.Optional; import de.is24.deadcode4j.junit.AUtilityClass; import org.junit.Test; import static com.google.common.base.Optional.absent; import static com.google.common.base.Optional.of; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.*; public class A_NonNullFunctions extends AUtilityClass { @Test @SuppressWarnings("unchecked") public void callsEachFunction() { Object expectedReturnValue = new Object(); NonNullFunction<Object, Optional<Object>> first = mock(NonNullFunction.class, "firstFunction"); when(first.apply(anyObject())).thenReturn(absent()); NonNullFunction<Object, Optional<Object>> second = mock(NonNullFunction.class, "secondFunction"); when(second.apply(anyObject())).thenReturn(of(expectedReturnValue)); Optional<Object> result = NonNullFunctions.or(first, second).apply(new Object()); assertThat(result.isPresent(), is(true)); assertThat(result.get(), is(expectedReturnValue)); verify(first).apply(anyObject()); } @Test @SuppressWarnings("unchecked") public void stopsAfterResultIsPresent() { Object expectedReturnValue = new Object(); NonNullFunction<Object, Optional<Object>> first = mock(NonNullFunction.class, "firstFunction"); when(first.apply(anyObject())).thenReturn(of(expectedReturnValue)); NonNullFunction<Object, Optional<Object>> second = mock(NonNullFunction.class, "secondFunction"); when(second.apply(anyObject())).thenReturn(absent()); Optional<Object> result = NonNullFunctions.or(first, second).apply(new Object()); assertThat(result.isPresent(), is(true)); assertThat(result.get(), is(expectedReturnValue)); verify(second, never()).apply(anyObject()); } @Override protected Class<?> getType() { return NonNullFunctions.class; } }