package net.bytebuddy.matcher; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import java.util.Arrays; import java.util.Collections; import java.util.List; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; public class CollectionOneToOneMatcherTest extends AbstractElementMatcherTest<CollectionOneToOneMatcher<?>> { private Iterable<Object> iterable; private Object first, second; @Mock private ElementMatcher<Object> firstMatcher, secondMatcher; @SuppressWarnings("unchecked") public CollectionOneToOneMatcherTest() { super((Class<CollectionOneToOneMatcher<?>>) (Object) CollectionOneToOneMatcher.class, "containing"); } @Before public void setUp() throws Exception { first = new Object(); second = new Object(); iterable = Arrays.asList(first, second); } @Test @SuppressWarnings("unchecked") public void testMatch() throws Exception { when(firstMatcher.matches(first)).thenReturn(true); when(secondMatcher.matches(second)).thenReturn(true); assertThat(new CollectionOneToOneMatcher<Object>(Arrays.asList(firstMatcher, secondMatcher)).matches(iterable), is(true)); verify(firstMatcher).matches(first); verifyNoMoreInteractions(firstMatcher); verify(secondMatcher).matches(second); verifyNoMoreInteractions(secondMatcher); } @Test @SuppressWarnings("unchecked") public void testNoMatchFirst() throws Exception { when(firstMatcher.matches(first)).thenReturn(false); assertThat(new CollectionOneToOneMatcher<Object>(Arrays.asList(firstMatcher, secondMatcher)).matches(iterable), is(false)); verify(firstMatcher).matches(first); verifyNoMoreInteractions(firstMatcher); verifyZeroInteractions(secondMatcher); } @Test @SuppressWarnings("unchecked") public void testNoMatchSecond() throws Exception { when(firstMatcher.matches(first)).thenReturn(true); when(secondMatcher.matches(second)).thenReturn(false); assertThat(new CollectionOneToOneMatcher<Object>(Arrays.asList(firstMatcher, secondMatcher)).matches(iterable), is(false)); verify(firstMatcher).matches(first); verifyNoMoreInteractions(firstMatcher); verify(secondMatcher).matches(second); verifyNoMoreInteractions(secondMatcher); } @Test @SuppressWarnings("unchecked") public void testNoMatchSize() throws Exception { assertThat(new CollectionOneToOneMatcher<Object>(Arrays.asList(firstMatcher, secondMatcher)).matches(Collections.singletonList(firstMatcher)), is(false)); verifyZeroInteractions(firstMatcher); verifyZeroInteractions(secondMatcher); } @Override protected <S> ObjectPropertyAssertion<S> modify(ObjectPropertyAssertion<S> propertyAssertion) { return propertyAssertion.create(new ObjectPropertyAssertion.Creator<List<?>>() { @Override @SuppressWarnings("unchecked") public List<?> create() { return Arrays.asList(mock(ElementMatcher.class), mock(ElementMatcher.class)); } }); } }