Add numbers for added rewritten strings when processing kotlin stdlib
Bug: 185756596
Change-Id: I1c14dd04978bf28fccbd33dade023caa32a366cc
diff --git a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
index 70ae682..7f59069 100644
--- a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
@@ -92,7 +92,9 @@
"org.junit.runners.model.Statement",
"org.junit.runners.model.TestTimedOutException")
.compile()
- .inspect(inspector -> assertEqualMetadata(new CodeInspector(BASE_LIBRARY), inspector))
+ .inspect(
+ inspector ->
+ assertEqualMetadata(new CodeInspector(BASE_LIBRARY), inspector, i -> {}))
.writeToZip();
Path testJar = compileTestSources(baseJar);
runTestsInJar(testJar, baseJar);
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java b/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
index e9324e9..8178717 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/KotlinMetadataTestBase.java
@@ -15,9 +15,13 @@
import com.android.tools.r8.TestCompileResult;
import com.android.tools.r8.kotlin.KotlinMetadataWriter;
import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.IntBox;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.function.IntConsumer;
import junit.framework.TestCase;
import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
@@ -44,7 +48,10 @@
static final String KT_COMPARABLE = "Lkotlin/Comparable;";
public void assertEqualMetadata(
- CodeInspector originalInspector, CodeInspector rewrittenInspector) {
+ CodeInspector originalInspector,
+ CodeInspector rewrittenInspector,
+ IntConsumer addedStringsInspector) {
+ IntBox addedStrings = new IntBox();
for (FoundClassSubject clazzSubject : originalInspector.allClasses()) {
ClassSubject r8Clazz = rewrittenInspector.clazz(clazzSubject.getOriginalName());
assertThat(r8Clazz, isPresent());
@@ -60,12 +67,23 @@
TestCase.assertEquals(originalHeader.getKind(), rewrittenHeader.getKind());
// TODO(b/154199572): Should we check for meta-data version?
TestCase.assertEquals(originalHeader.getPackageName(), rewrittenHeader.getPackageName());
+
+ HashSet<String> originalStrings = new HashSet<>(Arrays.asList(originalHeader.getData2()));
+ HashSet<String> rewrittenStrings = new HashSet<>(Arrays.asList(rewrittenHeader.getData2()));
+ rewrittenStrings.forEach(
+ rewrittenString -> {
+ if (originalStrings.contains(rewrittenString)) {
+ return;
+ }
+ addedStrings.increment();
+ });
// We cannot assert equality of the data since it may be ordered differently. Instead we use
// the KotlinMetadataWriter.
String expected = KotlinMetadataWriter.kotlinMetadataToString("", originalMetadata);
String actual = KotlinMetadataWriter.kotlinMetadataToString("", rewrittenMetadata);
TestCase.assertEquals(expected, actual);
}
+ addedStringsInspector.accept(addedStrings.get());
}
public static void verifyExpectedWarningsFromKotlinReflectAndStdLib(
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
index 3752a9e..12c1934 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
@@ -60,7 +60,6 @@
.assertSuccessWithOutput(EXPECTED_MAIN);
}
-
@Test
public void testMetadataForLib() throws Exception {
Path outputJar =
@@ -77,7 +76,8 @@
inspector ->
assertEqualMetadata(
new CodeInspector(jars.getForConfiguration(kotlinc, targetVersion)),
- inspector))
+ inspector,
+ i -> {}))
.writeToZip();
testForJvm()
.addRunClasspathFiles(getKotlinStdlibJar(kotlinc), getKotlinReflectJar(kotlinc))
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
index 137d6f5..4da59e8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
@@ -7,9 +7,12 @@
import static com.android.tools.r8.ToolHelper.getKotlinAnnotationJar;
import static com.android.tools.r8.ToolHelper.getKotlinStdlibJar;
import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompilerVersion;
import com.android.tools.r8.KotlinTestParameters;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.Collection;
@@ -35,6 +38,18 @@
this.parameters = parameters;
}
+ public int getExpectedAddedCount() {
+ if (kotlinParameters.getCompiler().is(KotlinCompilerVersion.KOTLINC_1_3_72)) {
+ return 2441;
+ } else if (kotlinParameters.getCompiler().is(KotlinCompilerVersion.KOTLINC_1_4_20)) {
+ return 2561;
+ } else if (kotlinParameters.getCompiler().is(KotlinCompilerVersion.KOTLINC_1_5_0_M2)) {
+ return 2594;
+ } else {
+ throw new Unreachable("Should not compile in this configuration");
+ }
+ }
+
@Test
public void testKotlinStdLib() throws Exception {
testForR8(parameters.getBackend())
@@ -48,6 +63,11 @@
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
.inspect(
inspector ->
- assertEqualMetadata(new CodeInspector(getKotlinStdlibJar(kotlinc)), inspector));
+ assertEqualMetadata(
+ new CodeInspector(getKotlinStdlibJar(kotlinc)),
+ inspector,
+ addedStrings -> {
+ assertEquals(getExpectedAddedCount(), addedStrings);
+ }));
}
}