package net.bytebuddy.build.gradle; import net.bytebuddy.test.utility.IntegrationRule; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; import org.gradle.testkit.runner.TaskOutcome; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; import org.junit.rules.MethodRule; import org.junit.rules.TemporaryFolder; import java.io.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.CoreMatchers.is; public class ByteBuddyPluginTest { private static final String BYTE_BUDDY_VERSION = System.getProperty("net.bytebuddy.test.version", "1.4.22"); @ClassRule public static final TemporaryFolder TEMPORARY_FOLDER = new TemporaryFolder(); private static File pluginJar; @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Rule public MethodRule integrationRule = new IntegrationRule(); @BeforeClass public static void createTestPluginJarFile() throws IOException { pluginJar = makePluginJar(); } private static File makePluginJar() throws IOException { File pluginFolder = TEMPORARY_FOLDER.newFolder("test-byte-buddy-plugin"); store("plugins { id 'java' }\n" + "repositories {\n" + " mavenLocal()\n" + " mavenCentral()\n" + "}\n" + "dependencies {\n" + " compile 'net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION + "'\n" + "}\n", new File(pluginFolder, "build.gradle")); File pluginRoot = new File(pluginFolder, "src/main/java/net/bytebuddy/test"); assertThat(pluginRoot.mkdirs(), is(true)); store("package net.bytebuddy.test;\n" + "\n" + "import net.bytebuddy.build.Plugin;\n" + "import net.bytebuddy.description.type.TypeDescription;\n" + "import net.bytebuddy.dynamic.DynamicType;\n" + "import net.bytebuddy.implementation.FixedValue;\n" + "\n" + "import static net.bytebuddy.matcher.ElementMatchers.named;\n" + "\n" + "public class SimplePlugin implements Plugin {\n" + " @Override\n" + " public boolean matches(TypeDescription target) {\n" + " return target.getName().equals(\"net.bytebuddy.test.Sample\");\n" + " }\n" + " @Override\n" + " public DynamicType.Builder<?> apply(DynamicType.Builder<?> builder, TypeDescription typeDescription) {\n" + " return builder.method(named(\"foo\")).intercept(FixedValue.value(\"qux\"));\n" + " }\n" + "}\n", new File(pluginRoot, "SimplePlugin.java")); BuildResult result = GradleRunner.create() .withProjectDir(pluginFolder) .withArguments("jar") .build(); assertThat(result.task(":jar").getOutcome(), is(TaskOutcome.SUCCESS)); return new File(pluginFolder, "build/libs/test-byte-buddy-plugin.jar"); } private static void store(String source, File target) throws IOException { store(source, target, false); } private static void append(String source, File target) throws IOException { store(source, target, true); } private static void store(String source, File target, boolean append) throws IOException { InputStream inputStream = new ByteArrayInputStream(source.getBytes("UTF-8")); try { OutputStream outputStream = new FileOutputStream(target, append); try { byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } } finally { outputStream.close(); } } finally { inputStream.close(); } } }