Update KeepNonVisibilityBridgeMethodsTest to use new testing API
Change-Id: I29f0c7545a76c9ca751732c962c37d6f32b37166
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index 99cd060..1c2f334 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -157,6 +157,10 @@
return self();
}
+ public T allowAccessModification() {
+ return allowAccessModification(true);
+ }
+
public T allowAccessModification(boolean allowAccessModification) {
if (allowAccessModification) {
return addKeepRules("-allowaccessmodification");
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java
index eae4025..5209511 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/DataAdapter.java
@@ -4,10 +4,12 @@
package com.android.tools.r8.bridgeremoval.bridgestokeep;
+import com.android.tools.r8.NeverMerge;
+
public interface DataAdapter {
- interface Observer extends ObservableList.Observer {
- }
+ @NeverMerge
+ interface Observer extends ObservableList.Observer {}
void registerObserver(Observer observer);
}
\ No newline at end of file
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
index 29437c0..a1a73e9 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
@@ -4,54 +4,63 @@
package com.android.tools.r8.bridgeremoval.bridgestokeep;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.BooleanUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.collect.ImmutableList;
-import java.lang.reflect.Method;
import java.util.List;
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 KeepNonVisibilityBridgeMethodsTest extends TestBase {
- private String keepMainAllowAccessModification(Class<?> clazz, boolean obfuscate) {
- return "-keep public class " + clazz.getCanonicalName() + " {\n"
- + " public static void main(java.lang.String[]);\n"
- + "}\n"
- + "-allowaccessmodification\n"
- + (obfuscate ? "-printmapping" : "-dontobfuscate\n");
+ private final boolean minification;
+ private final TestParameters parameters;
+
+ @Parameters(name = "{1}, minification: {0}")
+ public static List<Object[]> data() {
+ return buildParameters(BooleanUtils.values(), getTestParameters().withDexRuntimes().build());
}
- private void run(boolean obfuscate) throws Exception {
- List<Class<?>> classes =
- ImmutableList.of(
+ public KeepNonVisibilityBridgeMethodsTest(boolean minification, TestParameters parameters) {
+ this.minification = minification;
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void test() throws Exception {
+ testForR8(parameters.getBackend())
+ .addProgramClassesAndInnerClasses(
DataAdapter.class,
SimpleDataAdapter.class,
ObservableList.class,
SimpleObservableList.class,
- Main.class);
- String proguardConfig = keepMainAllowAccessModification(Main.class, obfuscate);
- CodeInspector inspector = new CodeInspector(compileWithR8(classes, proguardConfig));
+ Main.class)
+ .addKeepMainRule(Main.class)
+ .allowAccessModification()
+ // TODO(b/120764902): MemberSubject.getOriginalName() is not working without the @NeverMerge
+ // annotation on DataAdapter.Observer.
+ .enableMergeAnnotations()
+ .minification(minification)
+ .setMinApi(parameters.getRuntime())
+ .compile()
+ .inspect(
+ inspector -> {
+ ClassSubject classSubject = inspector.clazz(SimpleDataAdapter.class);
+ assertThat(classSubject, isPresent());
- // The bridge for registerObserver cannot be removed.
- Method registerObserver =
- SimpleDataAdapter.class.getMethod("registerObserver", DataAdapter.Observer.class);
- MethodSubject subject = inspector.method(registerObserver);
- assertTrue(subject.isPresent());
- // The method is there, but it might be unmarked as a bridge if
- // another method is inlined into it.
- // assertTrue(subject.isBridge());
- }
-
- @Test
- public void testWithObfuscation() throws Exception {
- run(true);
- }
-
- @Test
- public void testWithoutObfuscation() throws Exception {
- run(false);
+ MethodSubject subject = classSubject.uniqueMethodWithName("registerObserver");
+ assertTrue(subject.isPresent());
+ })
+ .run(parameters.getRuntime(), Main.class)
+ .assertSuccess();
}
}
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java
index 5af0ff2..e6eceb7 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/SimpleObservableList.java
@@ -5,12 +5,13 @@
package com.android.tools.r8.bridgeremoval.bridgestokeep;
import com.android.tools.r8.bridgeremoval.bridgestokeep.ObservableList.Observer;
+import java.util.ArrayList;
import java.util.List;
public class SimpleObservableList<O extends Observer>
implements ObservableList<O> {
- private List<O> observers;
+ private List<O> observers = new ArrayList<>();
@Override
public void registerObserver(O observer) {