package net.bytebuddy.implementation.bind; import net.bytebuddy.test.utility.ObjectPropertyAssertion; import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; public class MethodNameEqualityResolverTest extends AbstractAmbiguityResolverTest { private static final String FOO = "foo"; private static final String BAR = "bar"; @Test public void testBothEqual() throws Exception { test(FOO, FOO, FOO, MethodDelegationBinder.AmbiguityResolver.Resolution.AMBIGUOUS); } @Test public void testLeftEqual() throws Exception { test(FOO, BAR, FOO, MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT); } @Test public void testRightEqual() throws Exception { test(BAR, FOO, FOO, MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT); } @Test public void testNoneEqual() throws Exception { test(BAR, BAR, FOO, MethodDelegationBinder.AmbiguityResolver.Resolution.AMBIGUOUS); } private void test(String leftName, String rightName, String resultName, MethodDelegationBinder.AmbiguityResolver.Resolution expected) throws Exception { when(leftMethod.getName()).thenReturn(leftName); when(rightMethod.getName()).thenReturn(rightName); when(source.getName()).thenReturn(resultName); MethodDelegationBinder.AmbiguityResolver.Resolution resolution = MethodNameEqualityResolver.INSTANCE.resolve(source, left, right); assertThat(resolution, is(expected)); verify(left, atLeast(1)).getTarget(); verify(leftMethod, atLeast(1)).getName(); verify(right, atLeast(1)).getTarget(); verify(rightMethod, atLeast(1)).getName(); } @Test public void testObjectProperties() throws Exception { ObjectPropertyAssertion.of(MethodNameEqualityResolver.class).apply(); } }