package net.bytebuddy.matcher; import net.bytebuddy.description.ModifierReviewable; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.mockito.Mock; import org.objectweb.asm.Opcodes; 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.*; @RunWith(Parameterized.class) public class ModifierMatcherTest extends AbstractElementMatcherTest<ModifierMatcher<?>> { private final ModifierMatcher.Mode mode; private final int modifiers; @Mock private ModifierReviewable modifierReviewable; @SuppressWarnings("unchecked") public ModifierMatcherTest(ModifierMatcher.Mode mode, int modifiers) { super((Class<ModifierMatcher<?>>) (Object) ModifierMatcher.class, mode.getDescription()); this.mode = mode; this.modifiers = modifiers; } @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {ModifierMatcher.Mode.ABSTRACT, Opcodes.ACC_ABSTRACT}, {ModifierMatcher.Mode.ANNOTATION, Opcodes.ACC_ANNOTATION}, {ModifierMatcher.Mode.BRIDGE, Opcodes.ACC_BRIDGE}, {ModifierMatcher.Mode.ENUMERATION, Opcodes.ACC_ENUM}, {ModifierMatcher.Mode.FINAL, Opcodes.ACC_FINAL}, {ModifierMatcher.Mode.INTERFACE, Opcodes.ACC_INTERFACE}, {ModifierMatcher.Mode.MANDATED, Opcodes.ACC_MANDATED}, {ModifierMatcher.Mode.NATIVE, Opcodes.ACC_NATIVE}, {ModifierMatcher.Mode.PRIVATE, Opcodes.ACC_PRIVATE}, {ModifierMatcher.Mode.PROTECTED, Opcodes.ACC_PROTECTED}, {ModifierMatcher.Mode.PUBLIC, Opcodes.ACC_PUBLIC}, {ModifierMatcher.Mode.STATIC, Opcodes.ACC_STATIC}, {ModifierMatcher.Mode.STRICT, Opcodes.ACC_STRICT}, {ModifierMatcher.Mode.SYNCHRONIZED, Opcodes.ACC_SYNCHRONIZED}, {ModifierMatcher.Mode.SYNTHETIC, Opcodes.ACC_SYNTHETIC}, {ModifierMatcher.Mode.TRANSIENT, Opcodes.ACC_TRANSIENT} }); } @Test public void testMatch() throws Exception { when(modifierReviewable.getModifiers()).thenReturn(modifiers); assertThat(new ModifierMatcher<ModifierReviewable>(mode).matches(modifierReviewable), is(true)); verify(modifierReviewable).getModifiers(); verifyNoMoreInteractions(modifierReviewable); } @Test public void testNoMatch() throws Exception { when(modifierReviewable.getModifiers()).thenReturn(0); assertThat(new ModifierMatcher<ModifierReviewable>(mode).matches(modifierReviewable), is(false)); verify(modifierReviewable).getModifiers(); verifyNoMoreInteractions(modifierReviewable); } @Override protected String makeRegex(String startsWith) { return null; } @Test public void testToString() throws Exception { assertThat(new ModifierMatcher<ModifierReviewable>(mode).toString(), is(mode.getDescription())); } }