package net.bytebuddy.implementation.bind;
import net.bytebuddy.test.utility.ObjectPropertyAssertion;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
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 MethodDelegationBinderAmbiguityResolverChainTest extends AbstractAmbiguityResolverTest {
@Mock
private MethodDelegationBinder.AmbiguityResolver first, second, third;
private MethodDelegationBinder.AmbiguityResolver chain;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
chain = new MethodDelegationBinder.AmbiguityResolver.Compound(first, second);
}
@Test
public void testFirstResolves() throws Exception {
when(first.resolve(source, left, right)).thenReturn(MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT);
assertThat(chain.resolve(source, left, right), is(MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT));
verify(first).resolve(source, left, right);
verifyNoMoreInteractions(first);
verifyZeroInteractions(second);
}
@Test
public void testSecondResolves() throws Exception {
when(first.resolve(source, left, right)).thenReturn(MethodDelegationBinder.AmbiguityResolver.Resolution.AMBIGUOUS);
when(second.resolve(source, left, right)).thenReturn(MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT);
assertThat(chain.resolve(source, left, right), is(MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT));
verify(first).resolve(source, left, right);
verifyNoMoreInteractions(first);
verify(second).resolve(source, left, right);
verifyNoMoreInteractions(second);
}
@Test
public void testObjectProperties() throws Exception {
ObjectPropertyAssertion.of(MethodDelegationBinder.AmbiguityResolver.Compound.class).create(new ObjectPropertyAssertion.Creator<List<?>>() {
@Override
public List<?> create() {
return Collections.singletonList(mock(MethodDelegationBinder.AmbiguityResolver.class));
}
}).apply();
}
}