Add a few inspections to Gson tests
Bug: b/295302135
Change-Id: I04db65871e4e759f2ff72ddff2c9fcb22adf1086
diff --git a/src/test/java/com/android/tools/r8/gson/GsonDefaultConstructorTest.java b/src/test/java/com/android/tools/r8/gson/GsonDefaultConstructorTest.java
index 5c61354..9d0b65d 100644
--- a/src/test/java/com/android/tools/r8/gson/GsonDefaultConstructorTest.java
+++ b/src/test/java/com/android/tools/r8/gson/GsonDefaultConstructorTest.java
@@ -3,11 +3,19 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.gson;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
+import static org.hamcrest.MatcherAssert.assertThat;
+
import com.android.tools.r8.ProguardVersion;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.gson.GsonNoDefaultConstructorTest.Data;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
@@ -41,6 +49,14 @@
private static final String EXPECTED_OUTPUT = StringUtils.lines("Hello, world!");
+ private void inspect(CodeInspector inspector) {
+ ClassSubject dataSubject = inspector.clazz(Data.class);
+ assertThat(dataSubject, isPresentAndRenamed());
+ assertThat(dataSubject.uniqueFieldWithOriginalName("s"), isPresentAndRenamed());
+ assertThat(dataSubject.init(), isPresent());
+ assertThat(dataSubject.init("java.lang.String"), isAbsent());
+ }
+
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
@@ -51,6 +67,8 @@
.addKeepMainRule(TestClass.class)
.setMinApi(parameters)
.run(parameters.getRuntime(), TestClass.class, enableUnsafe ? "enable" : "disable")
+ .inspect(this::serializedNamePresentAndRenamed)
+ .inspect(this::inspect)
.assertSuccessWithOutput(EXPECTED_OUTPUT);
}
diff --git a/src/test/java/com/android/tools/r8/gson/GsonNoDefaultConstructorTest.java b/src/test/java/com/android/tools/r8/gson/GsonNoDefaultConstructorTest.java
index 5a0244a..b536709 100644
--- a/src/test/java/com/android/tools/r8/gson/GsonNoDefaultConstructorTest.java
+++ b/src/test/java/com/android/tools/r8/gson/GsonNoDefaultConstructorTest.java
@@ -3,13 +3,19 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.gson;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
import com.android.tools.r8.ProguardVersion;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
@@ -43,6 +49,13 @@
private static final String EXPECTED_OUTPUT = StringUtils.lines("Hello, world!");
+ private void inspect(CodeInspector inspector) {
+ ClassSubject dataSubject = inspector.clazz(Data.class);
+ assertThat(dataSubject, isPresentAndRenamed());
+ assertThat(dataSubject.uniqueFieldWithOriginalName("s"), isPresentAndRenamed());
+ assertTrue(dataSubject.allMethods(FoundMethodSubject::isInstanceInitializer).isEmpty());
+ }
+
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
@@ -52,6 +65,9 @@
.apply(GsonTestBase::addGsonLibraryAndKeepRules)
.addKeepMainRule(TestClass.class)
.setMinApi(parameters)
+ .compile()
+ .inspect(this::serializedNamePresentAndRenamed)
+ .inspect(this::inspect)
.run(parameters.getRuntime(), TestClass.class, enableUnsafe ? "enable" : "disable")
.applyIf(
enableUnsafe,
diff --git a/src/test/java/com/android/tools/r8/gson/GsonTestBase.java b/src/test/java/com/android/tools/r8/gson/GsonTestBase.java
index 970450c..f0029f4 100644
--- a/src/test/java/com/android/tools/r8/gson/GsonTestBase.java
+++ b/src/test/java/com/android/tools/r8/gson/GsonTestBase.java
@@ -3,6 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.gson;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndRenamed;
+import static org.hamcrest.MatcherAssert.assertThat;
+
import com.android.tools.r8.ArchiveProgramResourceProvider;
import com.android.tools.r8.ProguardTestBuilder;
import com.android.tools.r8.R8FullTestBuilder;
@@ -10,9 +13,16 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestShrinkerBuilder;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
public class GsonTestBase extends TestBase {
+ public static String SERIALIZED_NAME_CLASS_NAME = "com.google.gson.annotations.SerializedName";
+
+ public void serializedNamePresentAndRenamed(CodeInspector inspector) {
+ assertThat(inspector.clazz(SERIALIZED_NAME_CLASS_NAME), isPresentAndRenamed());
+ }
+
static void addRuntimeLibrary(TestShrinkerBuilder builder, TestParameters parameters) {
// Gson use java.lang.ReflectiveOperationException.
builder.addDefaultRuntimeLibraryWithReflectiveOperationException(parameters);