package net.bytebuddy.matcher; import net.bytebuddy.description.method.MethodDescription; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.mockito.Mock; import java.util.Arrays; import java.util.Collection; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.when; @RunWith(Parameterized.class) public class MethodSortMatcherTest extends AbstractElementMatcherTest<MethodSortMatcher<?>> { private static final String FOO = "foo", BAR = "bar"; private final MethodSortMatcher.Sort sort; private final MockImplementation mockImplementation; @Mock private MethodDescription methodDescription; @SuppressWarnings("unchecked") public MethodSortMatcherTest(MethodSortMatcher.Sort sort, MockImplementation mockImplementation) { super((Class<MethodSortMatcher<?>>) (Object) MethodSortMatcher.class, sort.getDescription()); this.sort = sort; this.mockImplementation = mockImplementation; } @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {MethodSortMatcher.Sort.CONSTRUCTOR, MockImplementation.CONSTRUCTOR}, {MethodSortMatcher.Sort.DEFAULT_METHOD, MockImplementation.DEFAULT_METHOD}, {MethodSortMatcher.Sort.METHOD, MockImplementation.METHOD}, {MethodSortMatcher.Sort.VIRTUAL, MockImplementation.VIRTUAL}, {MethodSortMatcher.Sort.TYPE_INITIALIZER, MockImplementation.TYPE_INITIALIZER}, }); } @Test public void testMatch() throws Exception { mockImplementation.prepare(methodDescription); assertThat(new MethodSortMatcher<MethodDescription>(sort).matches(methodDescription), is(true)); } @Test public void testNoMatch() throws Exception { assertThat(new MethodSortMatcher<MethodDescription>(sort).matches(methodDescription), is(false)); } @Override protected String makeRegex(String startsWith) { return null; } @Test public void testToString() throws Exception { assertThat(new MethodSortMatcher<MethodDescription>(sort).toString(), is(sort.getDescription())); } private enum MockImplementation { CONSTRUCTOR { @Override protected void prepare(MethodDescription target) { when(target.isConstructor()).thenReturn(true); } }, DEFAULT_METHOD { @Override protected void prepare(MethodDescription target) { when(target.isDefaultMethod()).thenReturn(true); } }, METHOD { @Override protected void prepare(MethodDescription target) { when(target.isMethod()).thenReturn(true); } }, VIRTUAL { @Override protected void prepare(MethodDescription target) { when(target.isVirtual()).thenReturn(true); } }, TYPE_INITIALIZER { @Override protected void prepare(MethodDescription target) { when(target.isTypeInitializer()).thenReturn(true); } }; protected abstract void prepare(MethodDescription target); } }