diff options
Diffstat (limited to 'src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java')
-rw-r--r-- | src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java b/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java index 6962f976f..15cf848b2 100644 --- a/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java +++ b/src/test/java/com/android/tools/r8/jasmin/JasminTestBase.java @@ -8,6 +8,7 @@ import static org.junit.Assert.assertTrue; import com.android.tools.r8.CompilationException; import com.android.tools.r8.R8; +import com.android.tools.r8.Resource; import com.android.tools.r8.ToolHelper; import com.android.tools.r8.ToolHelper.ProcessResult; import com.android.tools.r8.dex.ApplicationReader; @@ -27,10 +28,13 @@ import com.android.tools.r8.utils.OutputMode; import com.android.tools.r8.utils.StringUtils; import com.android.tools.r8.utils.Timing; import com.google.common.collect.ImmutableList; +import com.google.common.io.ByteStreams; import jasmin.ClassFile; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.StringReader; import java.nio.file.Files; import java.nio.file.Path; @@ -48,20 +52,37 @@ public class JasminTestBase { @Rule public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest(); + public static String getPathFromDescriptor(String classDescriptor) { + assert classDescriptor.startsWith("L"); + assert classDescriptor.endsWith(";"); + return classDescriptor.substring(1, classDescriptor.length() - 1) + ".class"; + } + protected ProcessResult runOnJavaRaw(JasminBuilder builder, String main) throws Exception { - File out = temp.newFolder("classes"); - for (ClassBuilder clazz : builder.getClasses()) { - ClassFile file = new ClassFile(); - file.readJasmin(new StringReader(clazz.toString()), clazz.name, false); - Path path = out.toPath().resolve(clazz.name + ".class"); + return runOnJavaRaw(builder.build(), main); + } + + protected ProcessResult runOnJavaRaw(AndroidApp app, String main) throws Exception { + File out = temp.newFolder(); + for (Resource clazz : app.getClassProgramResources()) { + assert clazz.getClassDescriptors().size() == 1; + String desc = clazz.getClassDescriptors().iterator().next(); + Path path = out.toPath().resolve(getPathFromDescriptor(desc)); Files.createDirectories(path.getParent()); - file.write(new FileOutputStream(path.toFile())); + try (InputStream input = clazz.getStream(); + OutputStream output = Files.newOutputStream(path)) { + ByteStreams.copy(input, output); + } } return ToolHelper.runJava(ImmutableList.of(out.getPath()), main); } protected String runOnJava(JasminBuilder builder, String main) throws Exception { - ProcessResult result = runOnJavaRaw(builder, main); + return runOnJava(builder.build(), main); + } + + protected String runOnJava(AndroidApp app, String main) throws Exception { + ProcessResult result = runOnJavaRaw(app, main); if (result.exitCode != 0) { System.out.println("Std out:"); System.out.println(result.stdout); @@ -111,7 +132,10 @@ public class JasminTestBase { for (ClassBuilder clazz : builder.getClasses()) { ClassFile file = new ClassFile(); file.readJasmin(new StringReader(clazz.toString()), clazz.name, false); - file.write(new FileOutputStream(classes.toPath().resolve(clazz.name + ".class").toFile())); + try (OutputStream outputStream = + Files.newOutputStream(classes.toPath().resolve(clazz.name + ".class"))) { + file.write(outputStream); + } } List<String> args = new ArrayList<>(); args.add("--output=" + dex.toString()); |