blob: 2687c27447a6f04822237db2470e3ce65d5a60cc [file] [log] [blame]
// 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.ir.optimize.checkcast;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.AsmTestBase;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.AndroidApp;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
class NonAccessible {
// because it's package-private
}
@RunWith(Parameterized.class)
public class IllegalAccessErrorTest extends AsmTestBase {
private final Backend backend;
@Parameterized.Parameters(name = "backend: {0}")
public static Backend[] data() {
return ToolHelper.getBackends();
}
public IllegalAccessErrorTest(Backend backend) {
this.backend = backend;
}
@Test
public void runTest() throws Exception {
String main = "Test";
AndroidApp input =
buildAndroidApp(
IllegalAccessErrorTestDump.dump(),
ToolHelper.getClassAsBytes(NonAccessible.class));
AndroidApp processedApp =
compileWithR8(input, keepMainProguardConfiguration(main), null, backend);
List<byte[]> classBytes = ImmutableList.of(
IllegalAccessErrorTestDump.dump(),
ToolHelper.getClassAsBytes(NonAccessible.class)
);
ProcessResult javaOutput = runOnJavaRaw(main, classBytes, ImmutableList.of());
assertEquals(0, javaOutput.exitCode);
ProcessResult output = runOnVMRaw(processedApp, main, backend);
assertEquals(0, output.exitCode);
if (backend == Backend.DEX) {
assertEquals(IllegalAccessErrorTestDump.MESSAGE, output.stdout.trim());
} else {
assert backend == Backend.CF;
assertEquals(javaOutput.stdout.trim(), output.stdout.trim());
assertEquals("null", output.stdout.trim());
}
}
}