package net.bytebuddy.build.gradle; import groovy.lang.Closure; import net.bytebuddy.build.EntryPoint; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.test.utility.MockitoRule; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.Task; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestRule; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.io.File; import java.util.Collections; import static org.hamcrest.CoreMatchers.endsWith; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; public class ByteBuddyExtensionTest { private static final String FOO = "foo", BAR = "bar"; @Rule public TestRule mockitoRule = new MockitoRule(this); @Mock private Project project; @Mock private MethodDescription methodDescription; @Mock private Closure<?> closure; @Mock private Task task; @Test public void testLiveInitializer() throws Exception { ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.setFailOnLiveInitializer(false); assertThat(byteBuddyExtension.isFailOnLiveInitializer(), is(false)); } @Test public void testLiveInitializerDefault() throws Exception { assertThat(new ByteBuddyExtension(project).isFailOnLiveInitializer(), is(true)); } @Test public void testSuffix() throws Exception { when(methodDescription.getName()).thenReturn(BAR); ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.setSuffix(FOO); assertThat(byteBuddyExtension.getMethodNameTransformer().transform(methodDescription), endsWith(FOO)); } @Test public void testSuffixEmpty() throws Exception { when(methodDescription.getName()).thenReturn(BAR); ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.setSuffix(""); assertThat(byteBuddyExtension.getMethodNameTransformer().transform(methodDescription), not(BAR)); } @Test public void testSuffixDefault() throws Exception { when(methodDescription.getName()).thenReturn(BAR); assertThat(new ByteBuddyExtension(project).getMethodNameTransformer().transform(methodDescription), not(BAR)); } @Test public void testTransformation() throws Exception { when(project.configure(any(Transformation.class), eq(closure))).then(new Answer<Transformation>() { @Override public Transformation answer(InvocationOnMock invocationOnMock) throws Throwable { return invocationOnMock.getArgument(0); } }); ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.transformation(closure); assertThat(byteBuddyExtension.getTransformations().size(), is(1)); } @Test public void testInitialization() throws Exception { when(project.configure(any(Initialization.class), eq(closure))).then(new Answer<Initialization>() { @Override public Initialization answer(InvocationOnMock invocationOnMock) throws Throwable { return invocationOnMock.getArgument(0); } }); ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.initialization(closure); assertThat(byteBuddyExtension.getInitialization(), notNullValue(Initialization.class)); } @Test public void testInitializationDefault() throws Exception { assertThat(new ByteBuddyExtension(project).getInitialization().getEntryPoint(mock(ClassLoaderResolver.class), mock(File.class), Collections.<File>emptySet()), is((EntryPoint) EntryPoint.Default.REBASE)); } @Test(expected = GradleException.class) public void testInitializationDuplicate() throws Exception { when(project.configure(any(Initialization.class), eq(closure))).then(new Answer<Initialization>() { @Override public Initialization answer(InvocationOnMock invocationOnMock) throws Throwable { return invocationOnMock.getArgument(0); } }); ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.initialization(closure); byteBuddyExtension.initialization(closure); } @Test public void testTasks() throws Exception { assertThat(new ByteBuddyExtension(project).implies(task), is(true)); verifyZeroInteractions(task); } @Test public void testTaskExplicitIncluded() throws Exception { ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.setTasks(Collections.singleton(FOO)); when(task.getName()).thenReturn(FOO); assertThat(byteBuddyExtension.implies(task), is(true)); } @Test public void testTaskExplicitExcluded() throws Exception { ByteBuddyExtension byteBuddyExtension = new ByteBuddyExtension(project); byteBuddyExtension.setTasks(Collections.singleton(FOO)); when(task.getName()).thenReturn(BAR); assertThat(byteBuddyExtension.implies(task), is(false)); } }