package net.bytebuddy.implementation.bind;
import org.junit.Test;
import org.omg.CORBA.UNKNOWN;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public class MethodBindingAmbiguityResolutionTest {
private static void testConflictMerge(MethodDelegationBinder.AmbiguityResolver.Resolution first,
MethodDelegationBinder.AmbiguityResolver.Resolution second) {
assertThat(first.merge(second), is(MethodDelegationBinder.AmbiguityResolver.Resolution.AMBIGUOUS));
}
private static void testSelfMerge(MethodDelegationBinder.AmbiguityResolver.Resolution resolution) {
assertThat(resolution.merge(resolution), is(resolution));
}
private static void testUnknownMerge(MethodDelegationBinder.AmbiguityResolver.Resolution resolution) {
assertThat(MethodDelegationBinder.AmbiguityResolver.Resolution.UNKNOWN.merge(resolution), is(resolution));
assertThat(resolution.merge(MethodDelegationBinder.AmbiguityResolver.Resolution.UNKNOWN), is(resolution));
}
@Test
public void testUnknownMerge() throws Exception {
testUnknownMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT);
testUnknownMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT);
testUnknownMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.UNKNOWN);
}
@Test
public void testSelfMerge() throws Exception {
testSelfMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT);
testSelfMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT);
testSelfMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.UNKNOWN);
}
@Test
public void testConflictMerge() throws Exception {
testConflictMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT, MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT);
testConflictMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT, MethodDelegationBinder.AmbiguityResolver.Resolution.AMBIGUOUS);
testConflictMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.AMBIGUOUS, MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT);
testConflictMerge(MethodDelegationBinder.AmbiguityResolver.Resolution.RIGHT, MethodDelegationBinder.AmbiguityResolver.Resolution.LEFT);
}
}