blob: 014f5d3c7300531f0811e0908f24c84eca8221cb [file] [log] [blame]
// Copyright (c) 2016, 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.internal;
import com.android.tools.r8.Disassemble;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.file.Paths;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
// Invoke R8 on the dex files extracted from GMSCore.apk to disassemble the dex code.
@RunWith(Parameterized.class)
public class GMSCoreV10DisassemblerTest extends GMSCoreCompilationTestBase {
private static final String APP_DIR = "third_party/gmscore/gmscore_v10/";
@Parameters(name = "deobfuscate: {0} smali: {1}")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][] {{false, false}, {false, true}, {true, false}, {true, true}});
}
@Parameter(0)
public boolean deobfuscate;
@Parameter(1)
public boolean smali;
@Test
public void testDisassemble() throws Exception {
// This test only ensures that we do not break disassembling of dex code. It does not
// check the generated code. To make it fast, we get rid of the output.
PrintStream originalOut = System.out;
System.setOut(
new PrintStream(
new OutputStream() {
@Override
public void write(int b) {
// Intentionally empty.
}
}));
try {
Disassemble.DisassembleCommand.Builder builder = Disassemble.DisassembleCommand.builder();
builder.setUseSmali(smali);
if (deobfuscate) {
builder.setProguardMapFile(Paths.get(APP_DIR, PG_MAP));
}
builder.addProgramFiles(Paths.get(APP_DIR).resolve(RELEASE_APK_X86));
Disassemble.DisassembleCommand command = builder.build();
Disassemble.disassemble(command);
} finally {
// Restore System.out for good measure.
System.setOut(originalOut);
}
}
}