| // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| package com.android.tools.r8.cf; |
| |
| import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer; |
| import com.android.tools.r8.CompilationFailedException; |
| import com.android.tools.r8.CompilationMode; |
| import com.android.tools.r8.R8; |
| import com.android.tools.r8.R8Command; |
| import com.android.tools.r8.ToolHelper; |
| import com.android.tools.r8.ToolHelper.ProcessResult; |
| import com.android.tools.r8.origin.Origin; |
| import com.android.tools.r8.utils.DescriptorUtils; |
| import java.io.IOException; |
| import java.nio.file.Path; |
| import org.junit.Assert; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.TemporaryFolder; |
| |
| public class UninitializedInFrameTestRunner { |
| static final Class CLASS = UninitializedInFrameTest.class; |
| |
| @Rule |
| public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest(); |
| |
| @Test |
| public void test() throws Exception { |
| test(ToolHelper.getClassAsBytes(CLASS)); |
| } |
| |
| @Test |
| public void testDump() throws Exception { |
| test(UninitializedInFrameDump.dump()); |
| } |
| |
| private void test(byte[] clazz) throws CompilationFailedException, IOException { |
| Path input = temp.getRoot().toPath().resolve("input.jar"); |
| Path output = temp.getRoot().toPath().resolve("output.jar"); |
| |
| ArchiveConsumer inputConsumer = new ArchiveConsumer(input); |
| inputConsumer.accept(clazz, DescriptorUtils.javaTypeToDescriptor(CLASS.getName()), null); |
| inputConsumer.finished(null); |
| ProcessResult runInput = ToolHelper.runJava(input, CLASS.getCanonicalName()); |
| if (runInput.exitCode != 0) { |
| System.out.println(runInput); |
| } |
| Assert.assertEquals(0, runInput.exitCode); |
| |
| R8.run( |
| R8Command.builder() |
| .setMode(CompilationMode.DEBUG) |
| .addClassProgramData(clazz, Origin.unknown()) |
| .addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm())) |
| .setProgramConsumer(new ArchiveConsumer(output)) |
| .build()); |
| ProcessResult runOutput = ToolHelper.runJava(output, CLASS.getCanonicalName()); |
| if (runOutput.exitCode != 0) { |
| System.out.println(runOutput); |
| } |
| Assert.assertEquals(runInput.toString(), runOutput.toString()); |
| } |
| } |