Refactorings to make progress on having no default min-api in tests.
There are still 500+ failures if the assert is in place. This CL
refactors the builders and updates a handful of tests. Remaining tests
are postponed to follow-ups.
Bug: 186010707
Bug: 167145686
Change-Id: I28884869080081953b44e9945101da5a754ba626
diff --git a/src/test/java/com/android/tools/r8/D8TestBuilder.java b/src/test/java/com/android/tools/r8/D8TestBuilder.java
index c988660..b39af91 100644
--- a/src/test/java/com/android/tools/r8/D8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/D8TestBuilder.java
@@ -71,7 +71,7 @@
return new D8TestCompileResult(
getState(),
app.get(),
- minApiLevel,
+ getMinApiLevel(),
getOutputMode(),
libraryDesugaringTestConfiguration,
getMapContent());
diff --git a/src/test/java/com/android/tools/r8/DXTestBuilder.java b/src/test/java/com/android/tools/r8/DXTestBuilder.java
index 2459f1d..436f1e7 100644
--- a/src/test/java/com/android/tools/r8/DXTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/DXTestBuilder.java
@@ -52,7 +52,7 @@
Path outJar = dxOutputFolder.resolve("output.jar");
List<String> args = new ArrayList<>();
- args.add("--min-sdk-version=" + minApiLevel);
+ args.add("--min-sdk-version=" + getMinApiLevel());
args.add("--output=" + outJar.toString());
args.addAll(injars.stream().map(Path::toString).collect(Collectors.toList()));
ProcessResult result =
@@ -63,7 +63,7 @@
throw new CompilationFailedException(result.toString());
}
return new DXTestCompileResult(
- getState(), AndroidApp.builder().addProgramFile(outJar).build(), minApiLevel);
+ getState(), AndroidApp.builder().addProgramFile(outJar).build(), getMinApiLevel());
} catch (IOException e) {
throw new CompilationFailedException(e);
}
diff --git a/src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java b/src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
index 85e7ca6..6d34346 100644
--- a/src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/ExternalR8TestBuilder.java
@@ -190,7 +190,7 @@
? FileUtils.readTextFile(proguardMapFile, Charsets.UTF_8)
: "";
return new ExternalR8TestCompileResult(
- getState(), outputJar, processResult, proguardMap, minApiLevel, getOutputMode());
+ getState(), outputJar, processResult, proguardMap, getMinApiLevel(), getOutputMode());
} catch (IOException e) {
throw new CompilationFailedException(e);
}
diff --git a/src/test/java/com/android/tools/r8/ProguardTestBuilder.java b/src/test/java/com/android/tools/r8/ProguardTestBuilder.java
index 8791b27..8d5bdea 100644
--- a/src/test/java/com/android/tools/r8/ProguardTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/ProguardTestBuilder.java
@@ -114,7 +114,7 @@
}
String proguardMap =
Files.exists(mapFile) ? FileUtils.readTextFile(mapFile, Charsets.UTF_8) : "";
- return new ProguardTestCompileResult(getState(), outJar, minApiLevel, proguardMap);
+ return new ProguardTestCompileResult(getState(), outJar, getMinApiLevel(), proguardMap);
} catch (IOException e) {
throw new CompilationFailedException(e);
}
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index 2db1e9d..0f72c5a 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -127,7 +127,7 @@
box.syntheticProguardRules,
createDefaultProguardMapConsumer ? proguardMapBuilder.toString() : null,
graphConsumer,
- minApiLevel,
+ getMinApiLevel(),
features);
switch (allowedDiagnosticMessages) {
case ALL:
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
index fbe6f27..2fe8ae0 100644
--- a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
@@ -68,7 +68,7 @@
private ProgramConsumer programConsumer;
private MainDexClassesCollector mainDexClassesCollector;
private StringConsumer mainDexListConsumer;
- protected int minApiLevel = ToolHelper.getMinApiLevelForDexVm().getLevel();
+ private int minApiLevel = -1;
private boolean optimizeMultidexForLinearAlloc = false;
private Consumer<InternalOptions> optionsConsumer = DEFAULT_OPTIONS;
private ByteArrayOutputStream stdout = null;
@@ -103,6 +103,11 @@
}
}
+ protected int getMinApiLevel() {
+ // TODO(b/186010707): Enable assert minApiLevel != -1;
+ return minApiLevel;
+ }
+
abstract CR internalCompile(
B builder, Consumer<InternalOptions> optionsConsumer, Supplier<AndroidApp> app)
throws CompilationFailedException;
@@ -190,7 +195,12 @@
if (backend.isDex() || !isTestShrinkerBuilder()) {
assert !builder.isMinApiLevelSet()
: "Don't set the API level directly through BaseCompilerCommand.Builder in tests";
- builder.setMinApiLevel(minApiLevel);
+ // TODO(b/186010707): This will always be set when fixed.
+ int minApi =
+ getMinApiLevel() == -1
+ ? ToolHelper.getMinApiLevelForDexVm().getLevel()
+ : getMinApiLevel();
+ builder.setMinApiLevel(minApi);
}
builder.setOptimizeMultidexForLinearAlloc(optimizeMultidexForLinearAlloc);
if (useDefaultRuntimeLibrary) {
@@ -203,7 +213,6 @@
builder.addLibraryFiles(TestBase.runtimeJar(backend));
}
}
- List<String> mainDexClasses = null;
assertNull(oldStdout);
oldStdout = System.out;
assertNull(oldStderr);
@@ -321,6 +330,7 @@
}
public T setMinApi(int minApiLevel) {
+ assert minApiLevel != -1;
this.minApiLevel = minApiLevel;
return self();
}
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index beb7da4..acd96aa 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -58,10 +58,12 @@
@Override
public T setMinApi(AndroidApiLevel minApiLevel) {
- if (backend == Backend.DEX) {
- return super.setMinApi(minApiLevel.getLevel());
- }
- return self();
+ return backend == Backend.DEX ? super.setMinApi(minApiLevel.getLevel()) : self();
+ }
+
+ @Override
+ protected int getMinApiLevel() {
+ return backend == Backend.DEX ? super.getMinApiLevel() : -1;
}
public T treeShaking(boolean enable) {
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationProguardCompatTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationProguardCompatTest.java
index 11bf740..1307d62 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationProguardCompatTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationProguardCompatTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FieldSubject;
@@ -46,6 +47,7 @@
" private int field;",
"}")
.allowAccessModification()
+ .setMinApi(AndroidApiLevel.B)
.compile()
.inspect(inspector -> inspect(inspector, true));
}
diff --git a/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java b/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java
index 18ae157..9242d61 100644
--- a/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/LoadInvokeLoadOptimizationTestRunner.java
@@ -5,6 +5,7 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.debug.DebugTestBase.JUnit3Wrapper.FrameInspector;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.DescriptorUtils;
import java.util.List;
import org.apache.harmony.jpda.tests.framework.jdwp.Value;
@@ -20,6 +21,7 @@
static final String NAME = CLASS.getCanonicalName();
static final String DESC = DescriptorUtils.javaTypeToDescriptor(NAME);
static final String FILE = CLASS.getSimpleName() + ".java";
+ static final AndroidApiLevel minApi = AndroidApiLevel.B;
private final String name;
private final DebugTestConfig config;
@@ -29,7 +31,9 @@
DebugTestParameters parameters =
parameters()
.add("CF", temp -> testForJvm(temp).addTestClasspath().debugConfig())
- .add("D8", temp -> testForD8(temp).addProgramClasses(CLASS).debugConfig());
+ .add(
+ "D8",
+ temp -> testForD8(temp).setMinApi(minApi).addProgramClasses(CLASS).debugConfig());
for (Backend backend : ToolHelper.getBackends()) {
parameters.add(
"R8/" + backend,
@@ -39,6 +43,7 @@
.noMinification()
.addKeepRules("-keepattributes SourceFile,LineNumberTable")
.addProgramClasses(CLASS)
+ .setMinApi(minApi)
.debug()
.debugConfig());
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
index da19669..868a400 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
@@ -7,6 +7,8 @@
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ThrowableConsumer;
import com.android.tools.r8.ir.optimize.nonnull.FieldAccessTest;
import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterArrayAccess;
@@ -20,9 +22,21 @@
import com.google.common.collect.Streams;
import java.util.List;
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;
+@RunWith(Parameterized.class)
public class SimplifyIfNotNullTest extends TestBase {
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ @Parameter public TestParameters parameters;
+
private void verifyAbsenceOfIf(
CodeInspector codeInspector, Class<?> testClass, List<MethodSignature> signatures) {
for (MethodSignature signature : signatures) {
@@ -43,11 +57,14 @@
ThrowableConsumer<R8FullTestBuilder> configuration)
throws Exception {
CodeInspector codeInspector =
- testForR8(Backend.DEX)
+ testForR8(parameters.getBackend())
+ .setMinApi(parameters.getApiLevel())
.addProgramClasses(testClass)
.addKeepRules("-keep class " + testClass.getCanonicalName() + " { *; }")
.apply(configuration)
.compile()
+ .run(parameters.getRuntime(), testClass)
+ .assertSuccessWithOutput("")
.inspector();
verifyAbsenceOfIf(codeInspector, testClass, signatures);
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
index 282371b..4d4654d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
@@ -9,23 +9,17 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import java.util.Collection;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsDoubleTest extends UnusedArgumentsTestBase {
- public UnusedArgumentsDoubleTest(boolean minification) {
- super(minification);
- }
-
- @Parameters(name = "minification:{0}")
- public static Collection<Object[]> data() {
- return UnusedArgumentsTestBase.data();
+ public UnusedArgumentsDoubleTest(TestParameters parameters, boolean minification) {
+ super(parameters, minification);
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
index 80309b2..c1a0a21 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
@@ -9,26 +9,20 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
import java.util.Set;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsIntTest extends UnusedArgumentsTestBase {
private static final Set<String> methodsThatWontBeOptimized = ImmutableSet.of("main", "iinc");
- public UnusedArgumentsIntTest(boolean minification) {
- super(minification);
- }
-
- @Parameters(name = "minification:{0}")
- public static Collection<Object[]> data() {
- return UnusedArgumentsTestBase.data();
+ public UnusedArgumentsIntTest(TestParameters parameters, boolean minification) {
+ super(parameters, minification);
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
index 0dba75b..8723f36 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
@@ -9,23 +9,17 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import java.util.Collection;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsLongTest extends UnusedArgumentsTestBase {
- public UnusedArgumentsLongTest(boolean minification) {
- super(minification);
- }
-
- @Parameters(name = "minification:{0}")
- public static Collection<Object[]> data() {
- return UnusedArgumentsTestBase.data();
+ public UnusedArgumentsLongTest(TestParameters parameters, boolean minification) {
+ super(parameters, minification);
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
index dd63e78..78a0882 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
@@ -9,23 +9,17 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import java.util.Collection;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsMixedTest extends UnusedArgumentsTestBase {
- public UnusedArgumentsMixedTest(boolean minification) {
- super(minification);
- }
-
- @Parameters(name = "minification:{0}")
- public static Collection<Object[]> data() {
- return UnusedArgumentsTestBase.data();
+ public UnusedArgumentsMixedTest(TestParameters parameters, boolean minification) {
+ super(parameters, minification);
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
index 7ed9021..175d3ba 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
@@ -9,23 +9,17 @@
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
-import java.util.Collection;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsMixedWidthTest extends UnusedArgumentsTestBase {
- public UnusedArgumentsMixedWidthTest(boolean minification) {
- super(minification);
- }
-
- @Parameters(name = "minification:{0}")
- public static Collection<Object[]> data() {
- return UnusedArgumentsTestBase.data();
+ public UnusedArgumentsMixedWidthTest(TestParameters parameters, boolean minification) {
+ super(parameters, minification);
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
index 3a4eeda..c06823f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsObjectTest.java
@@ -9,24 +9,19 @@
import com.android.tools.r8.NeverClassInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
+import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsObjectTest extends UnusedArgumentsTestBase {
- public UnusedArgumentsObjectTest(boolean minification) {
- super(minification);
- }
-
- @Parameters(name = "minification:{0}")
- public static Collection<Object[]> data() {
- return UnusedArgumentsTestBase.data();
+ public UnusedArgumentsObjectTest(TestParameters parameters, boolean minification) {
+ super(parameters, minification);
}
@NeverClassInline
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java
index 946cc63..d88a978 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsTestBase.java
@@ -6,27 +6,38 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assume.assumeFalse;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersBuilder;
+import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public abstract class UnusedArgumentsTestBase extends TestBase {
+ private final TestParameters parameters;
private final boolean minification;
- public UnusedArgumentsTestBase(boolean minification) {
+ public UnusedArgumentsTestBase(TestParameters parameters, boolean minification) {
+ this.parameters = parameters;
this.minification = minification;
}
- @Parameters(name = "minification:{0}")
+ @Parameters(name = "{0}, minification:{1}")
public static Collection<Object[]> data() {
- return ImmutableList.of(new Object[] {true}, new Object[] {false});
+ return buildParameters(
+ TestParametersBuilder.builder().withAllRuntimesAndApiLevels().build(),
+ BooleanUtils.values());
}
public void configure(R8FullTestBuilder builder) {
@@ -50,21 +61,26 @@
}
@Test
- public void test() throws Throwable {
- testForJvm()
- .addTestClasspath()
- .run(getTestClass())
+ public void testReference() throws Exception {
+ assumeFalse(minification);
+ testForRuntime(parameters)
+ .addProgramClasses(getTestClass())
+ .addProgramClasses(getAdditionalClasses())
+ .run(parameters.getRuntime(), getTestClass())
.assertSuccessWithOutput(getExpectedResult());
+ }
- testForR8(Backend.DEX)
+ @Test
+ public void testR8() throws Throwable {
+ testForR8(parameters.getBackend())
+ .setMinApi(parameters.getApiLevel())
.addProgramClasses(getTestClass())
.addProgramClasses(getAdditionalClasses())
.addKeepMainRule(getTestClass())
.minification(minification)
.addOptionsModification(options -> options.enableSideEffectAnalysis = false)
.apply(this::configure)
- .compile()
- .run(getTestClass())
+ .run(parameters.getRuntime(), getTestClass())
.inspect(this::inspect)
.assertSuccessWithOutput(getExpectedResult());
}
diff --git a/src/test/java/com/android/tools/r8/proguard/configuration/ProguardRuleWithEllipsisForReturnTypeTest.java b/src/test/java/com/android/tools/r8/proguard/configuration/ProguardRuleWithEllipsisForReturnTypeTest.java
index 33b7f00..17b13cf 100644
--- a/src/test/java/com/android/tools/r8/proguard/configuration/ProguardRuleWithEllipsisForReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/proguard/configuration/ProguardRuleWithEllipsisForReturnTypeTest.java
@@ -6,34 +6,50 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
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;
+@RunWith(Parameterized.class)
public class ProguardRuleWithEllipsisForReturnTypeTest extends TestBase {
private static final Class<?> clazz = ProguardRuleWithEllipsisForReturnTypeTestClass.class;
private static final String expectedOutput = StringUtils.lines("Hello world!");
+
+ @Parameter public TestParameters parameters;
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
@Test
public void testR8() throws Exception {
- testForR8(Backend.DEX)
+ testForR8(parameters.getBackend())
.addProgramClasses(clazz)
.addKeepRules(
"-keep class " + clazz.getTypeName() + " {",
" private static ... unused;",
" public static ... main(...);",
"}")
- .run(clazz)
+ .run(parameters.getRuntime(), clazz)
.assertSuccessWithOutput(expectedOutput)
.inspect(this::inspect);
}
@Test
public void testProguard() throws Exception {
+ assumeTrue(parameters.isCfRuntime());
testForProguard()
.addProgramClasses(clazz)
.addKeepRules(
@@ -41,7 +57,7 @@
" private static ... unused;",
" public static ... main(...);",
"}")
- .run(clazz)
+ .run(parameters.getRuntime(), clazz)
.assertSuccessWithOutput(expectedOutput)
.inspect(this::inspect);
}
diff --git a/src/test/java/com/android/tools/r8/proguard/configuration/UnusedKeepRuleTest.java b/src/test/java/com/android/tools/r8/proguard/configuration/UnusedKeepRuleTest.java
index a391a21..e258520 100644
--- a/src/test/java/com/android/tools/r8/proguard/configuration/UnusedKeepRuleTest.java
+++ b/src/test/java/com/android/tools/r8/proguard/configuration/UnusedKeepRuleTest.java
@@ -5,15 +5,32 @@
package com.android.tools.r8.proguard.configuration;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class UnusedKeepRuleTest extends TestBase {
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withNoneRuntime().build();
+ }
+
+ public UnusedKeepRuleTest(TestParameters parameters) {
+ parameters.assertNoneRuntime();
+ }
+
@Test
public void test() throws Exception {
testForR8(Backend.DEX)
.addKeepRules("-keep class NotPresent")
.allowUnusedProguardConfigurationRules()
+ .setMinApi(AndroidApiLevel.B)
.compile()
.assertInfosCount(1);
}
diff --git a/src/test/java/com/android/tools/r8/proguard/printmapping/PrintMappingTest.java b/src/test/java/com/android/tools/r8/proguard/printmapping/PrintMappingTest.java
index 378cf0e..689904c 100644
--- a/src/test/java/com/android/tools/r8/proguard/printmapping/PrintMappingTest.java
+++ b/src/test/java/com/android/tools/r8/proguard/printmapping/PrintMappingTest.java
@@ -7,11 +7,27 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
import java.nio.file.Path;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class PrintMappingTest extends TestBase {
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withNoneRuntime().build();
+ }
+
+ public PrintMappingTest(TestParameters parameters) {
+ parameters.assertNoneRuntime();
+ }
+
@Test
public void testWithExistingDirectory() throws Exception {
Path mapping = temp.getRoot().toPath().resolve("existing/directory/mapping.txt");
@@ -29,6 +45,7 @@
.addInnerClasses(PrintMappingTest.class)
.addKeepRules("-keep,allowobfuscation class " + TestClass.class.getTypeName())
.addKeepRules("-printmapping " + mapping)
+ .setMinApi(AndroidApiLevel.B)
.compile();
assertTrue(mapping.toFile().exists());
}
diff --git a/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java b/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java
index 5e93601..4fb3d8b 100644
--- a/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/PublicFieldInnerClassTest.java
@@ -5,7 +5,9 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersBuilder;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.utils.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -69,24 +71,25 @@
private static final Class CLASS = PublicFieldInnerClassTestMain.class;
private static final String EXPECTED_OUTPUT = StringUtils.lines("0", "0", "0", "0");
- private final Backend backend;
+ private final TestParameters parameters;
@Parameterized.Parameters(name = "Backend: {0}")
- public static Object[] data() {
- return ToolHelper.getBackends();
+ public static TestParametersCollection data() {
+ return TestParametersBuilder.builder().withAllRuntimesAndApiLevels().build();
}
- public PublicFieldInnerClassTest(Backend backend) {
- this.backend = backend;
+ public PublicFieldInnerClassTest(TestParameters parameters) {
+ this.parameters = parameters;
}
@Test
public void test() throws Exception {
- testForR8(backend)
+ testForR8(parameters.getBackend())
.setMode(CompilationMode.DEBUG)
.addProgramClassesAndInnerClasses(CLASS)
.addKeepMainRule(CLASS)
- .run(CLASS)
+ .setMinApi(parameters.getApiLevel())
+ .run(parameters.getRuntime(), CLASS)
.assertSuccessWithOutput(EXPECTED_OUTPUT);
}
}
diff --git a/src/test/java/com/android/tools/r8/resolution/b123730538/B123730538.java b/src/test/java/com/android/tools/r8/resolution/b123730538/B123730538.java
index 4cb3b17..c61d7fa 100644
--- a/src/test/java/com/android/tools/r8/resolution/b123730538/B123730538.java
+++ b/src/test/java/com/android/tools/r8/resolution/b123730538/B123730538.java
@@ -7,8 +7,12 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersBuilder;
+import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.resolution.b123730538.runner.PublicClassExtender;
import com.android.tools.r8.resolution.b123730538.runner.Runner;
@@ -32,15 +36,15 @@
private static List<Path> CLASSES;
private static final String EXPECTED_OUTPUT = StringUtils.lines("pkg.AbstractClass::foo");
- private final Backend backend;
+ private final TestParameters parameters;
@Parameterized.Parameters(name = "Backend: {0}")
- public static Object[] data() {
- return ToolHelper.getBackends();
+ public static TestParametersCollection data() {
+ return TestParametersBuilder.builder().withAllRuntimesAndApiLevels().build();
}
- public B123730538(Backend backend) {
- this.backend = backend;
+ public B123730538(TestParameters parameters) {
+ this.parameters = parameters;
}
@BeforeClass
@@ -53,24 +57,26 @@
@Test
public void testProguard() throws Exception {
+ assumeTrue(parameters.isCfRuntime());
Path inJar = temp.newFile("input.jar").toPath().toAbsolutePath();
writeClassFilesToJar(inJar, CLASSES);
testForProguard()
.addProgramFiles(inJar)
.addKeepMainRule(MAIN)
.addKeepRules("-dontoptimize")
- .run(MAIN)
+ .run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutput(EXPECTED_OUTPUT)
.inspect(this::inspect);
}
@Test
public void testR8() throws Exception {
- testForR8(backend)
+ testForR8(parameters.getBackend())
.addProgramFiles(CLASSES)
.addKeepMainRule(MAIN)
.addKeepRules("-dontoptimize")
- .run(MAIN)
+ .setMinApi(parameters.getApiLevel())
+ .run(parameters.getRuntime(), MAIN)
.assertSuccessWithOutput(EXPECTED_OUTPUT)
.inspect(this::inspect);
}
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
index 7452a5a..adeb90f 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
@@ -166,6 +166,7 @@
@RunWith(Parameterized.class)
public class RemoveAssertionsTest extends TestBase {
+ private static final AndroidApiLevel minApi = AndroidApiLevel.B;
private final TestParameters parameters;
@Parameterized.Parameters(name = "{0}")
@@ -190,6 +191,7 @@
.addOptionsModification(o -> o.inlinerOptions().enableInlining = false)
.allowAccessModification()
.noMinification()
+ .setMinApi(minApi)
.compile();
}
@@ -225,6 +227,7 @@
.debug()
.noTreeShaking()
.noMinification()
+ .setMinApi(minApi)
.compile();
}
@@ -337,7 +340,7 @@
return testForD8()
.addProgramClasses(ClassWithAssertions.class)
.debug()
- .setMinApi(AndroidApiLevel.B)
+ .setMinApi(minApi)
.addAssertionsConfiguration(
builder -> builder.setTransformation(transformation).setScopeAll().build())
.compile();
@@ -349,7 +352,7 @@
testForR8(Backend.CF)
.addProgramClasses(ClassWithAssertions.class)
.debug()
- .setMinApi(AndroidApiLevel.B)
+ .setMinApi(minApi)
.noTreeShaking()
.noMinification()
.compile()
@@ -358,7 +361,7 @@
return testForD8()
.addProgramFiles(program)
.debug()
- .setMinApi(AndroidApiLevel.B)
+ .setMinApi(minApi)
.addAssertionsConfiguration(
builder -> builder.setTransformation(transformation).setScopeAll().build())
.compile();
@@ -379,7 +382,7 @@
rewriter.apply(ToolHelper.getClassAsBytes(ClassWithAssertions.class)),
rewriter.apply(ToolHelper.getClassAsBytes(ChromuimAssertionHookMock.class)))
.debug()
- .setMinApi(AndroidApiLevel.B)
+ .setMinApi(minApi)
.compile();
}
diff --git a/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java b/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java
index dddb176..cfffbac 100644
--- a/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersBuilder;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.nio.file.Paths;
import java.util.List;
@@ -45,6 +46,7 @@
testForR8(backend)
.addProgramFiles(Paths.get(ToolHelper.EXAMPLES_BUILD_DIR).resolve(JAR_FILE))
.addKeepRules(PG_CONFIG)
+ .setMinApi(AndroidApiLevel.B)
.compile()
.inspect(
inspector -> {
diff --git a/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesMissingReferencesInDexTest.java b/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesMissingReferencesInDexTest.java
index b1e75c2..356bfab 100644
--- a/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesMissingReferencesInDexTest.java
+++ b/src/test/java/com/android/tools/r8/tracereferences/TraceReferencesMissingReferencesInDexTest.java
@@ -31,6 +31,8 @@
return getTestParameters().withNoneRuntime().build();
}
+ private static final AndroidApiLevel minApi = AndroidApiLevel.B;
+
public TraceReferencesMissingReferencesInDexTest(TestParameters parameters) {
parameters.assertNoneRuntime();
}
@@ -91,7 +93,11 @@
@Test
public void missingClassReferencedInDexArchive() throws Throwable {
missingClassReferenced(
- testForD8(Backend.DEX).addProgramClasses(Source.class).compile().writeToZip());
+ testForD8(Backend.DEX)
+ .addProgramClasses(Source.class)
+ .setMinApi(minApi)
+ .compile()
+ .writeToZip());
}
@Test
@@ -99,6 +105,7 @@
missingClassReferenced(
testForD8(Backend.DEX)
.addProgramClasses(Source.class)
+ .setMinApi(minApi)
.compile()
.writeToDirectory()
.resolve("classes.dex"));
@@ -131,6 +138,7 @@
testForD8(Backend.DEX)
.addProgramClasses(Source.class)
.addProgramClassFileData(getClassWithTargetRemoved())
+ .setMinApi(minApi)
.compile()
.writeToZip());
}
@@ -141,6 +149,7 @@
testForD8(Backend.DEX)
.addProgramClasses(Source.class)
.addProgramClassFileData(getClassWithTargetRemoved())
+ .setMinApi(minApi)
.compile()
.writeToDirectory()
.resolve("classes.dex"));