Update tests after running Java 17 tests for real
Bug: b/337801526
Change-Id: Ibb70d7fce06fb23e3a7141a2ec0bfcee0380df1f
diff --git a/src/test/examplesJava17/records/RecordBlogTest.java b/src/test/examplesJava17/records/RecordBlogTest.java
index 1128f07..c28b92b 100644
--- a/src/test/examplesJava17/records/RecordBlogTest.java
+++ b/src/test/examplesJava17/records/RecordBlogTest.java
@@ -33,7 +33,7 @@
ImmutableMap.<String, String>builder()
.put("-dontobfuscate\n-dontoptimize", "RecordBlog$Person[name=%s, age=42]")
.put("", "a[a=%s]")
- .put("-keep,allowshrinking class " + CLASS, "RecordBlog$Person[a=%s]")
+ .put("-keep,allowshrinking class " + CLASS, "RecordBlog$Person[a=%s, b=42]")
.put(
"-keepclassmembers,allowshrinking,allowoptimization class "
+ CLASS
diff --git a/src/test/examplesJava17/records/RecordProfileRewritingTest.java b/src/test/examplesJava17/records/RecordProfileRewritingTest.java
index 13c5b5a..13c487d 100644
--- a/src/test/examplesJava17/records/RecordProfileRewritingTest.java
+++ b/src/test/examplesJava17/records/RecordProfileRewritingTest.java
@@ -241,9 +241,30 @@
equalsMethodSubject,
ifThen(!recordDesugaringIsOff, invokesMethod(equalsHelperMethodSubject)));
+ // Objects.hashCode(Object) (used by helper generated for record hashCode).
+ ClassSubject objectsHashCodeClassSubject =
+ inspector.clazz(SyntheticItemsTestUtils.syntheticBackportClass(PERSON_REFERENCE, 0));
+ assertThat(
+ objectsHashCodeClassSubject,
+ isAbsentIf(recordDesugaringIsOff || canUseJavaUtilObjects(parameters)));
+ MethodSubject objectsHashCodeMethodSubject = objectsHashCodeClassSubject.uniqueMethod();
+ assertThat(objectsHashCodeMethodSubject, isAbsentIf(objectsHashCodeClassSubject.isAbsent()));
+
+ // Objects.equals(Object, Object) (used by helper generated for record compare).
+ ClassSubject objectsEqualsClassSubject =
+ inspector.clazz(SyntheticItemsTestUtils.syntheticBackportClass(PERSON_REFERENCE, 1));
+ assertThat(
+ objectsEqualsClassSubject,
+ isAbsentIf(recordDesugaringIsOff || canUseJavaUtilObjects(parameters)));
+ MethodSubject objectsEqualsMethodSubject = objectsEqualsClassSubject.uniqueMethod();
+ assertThat(objectsEqualsMethodSubject, isAbsentIf(objectsEqualsClassSubject.isAbsent()));
+ assertEquals(objectsHashCodeClassSubject.isPresent(), objectsEqualsClassSubject.isPresent());
+
// int hashCode()
ClassSubject hashCodeHelperClassSubject =
- inspector.clazz(SyntheticItemsTestUtils.syntheticRecordHelperClass(PERSON_REFERENCE, 0));
+ inspector.clazz(
+ SyntheticItemsTestUtils.syntheticRecordHelperClass(
+ PERSON_REFERENCE, objectsHashCodeClassSubject.isAbsent() ? 0 : 2));
assertThat(hashCodeHelperClassSubject, isAbsentIf(recordDesugaringIsOff));
MethodSubject hashCodeHelperMethodSubject = hashCodeHelperClassSubject.uniqueMethod();
@@ -254,14 +275,13 @@
assertThat(hashCodeMethodSubject, isPresent());
assertThat(
hashCodeMethodSubject,
- ifThen(!recordDesugaringIsOff, invokesMethod(getFieldsAsObjectsMethodSubject)));
- assertThat(
- hashCodeMethodSubject,
ifThen(!recordDesugaringIsOff, invokesMethod(hashCodeHelperMethodSubject)));
// String toString()
ClassSubject toStringHelperClassSubject =
- inspector.clazz(SyntheticItemsTestUtils.syntheticRecordHelperClass(PERSON_REFERENCE, 1));
+ inspector.clazz(
+ SyntheticItemsTestUtils.syntheticRecordHelperClass(
+ PERSON_REFERENCE, objectsHashCodeClassSubject.isAbsent() ? 1 : 3));
assertThat(toStringHelperClassSubject, isAbsentIf(recordDesugaringIsOff));
MethodSubject toStringHelperMethodSubject = toStringHelperClassSubject.uniqueMethod();
@@ -288,6 +308,12 @@
hashCodeMethodSubject,
toStringMethodSubject)
.applyIf(
+ !recordDesugaringIsOff && !canUseJavaUtilObjects(parameters),
+ i ->
+ i.assertContainsClassRules(objectsHashCodeClassSubject, objectsEqualsClassSubject)
+ .assertContainsMethodRules(
+ objectsHashCodeMethodSubject, objectsEqualsMethodSubject))
+ .applyIf(
canMergeRecordTag && !partialDesugaring,
i -> i.assertContainsMethodRule(personDefaultInstanceInitializerSubject))
.applyIf(
diff --git a/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java b/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java
index 8bd6851..85caa5c 100644
--- a/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java
+++ b/src/test/java/com/android/tools/r8/JdkClassFileProviderTest.java
@@ -108,7 +108,11 @@
assertJavaUtilConcurrentFlowSubscriber(provider);
CfVersion version = extractClassFileVersion(readJavaLangObject(provider));
// When not passing an explicit JAVA_HOME the underlying test runner JDK is used.
- assertEquals(CfVersion.V11, version);
+ String classFileVersion = System.getProperty("java.class.version");
+ int dotIndex = classFileVersion.indexOf('.');
+ assertTrue(dotIndex > 0);
+ assertEquals(
+ CfVersion.fromRaw(Integer.parseInt(classFileVersion.substring(0, dotIndex))), version);
assert provider instanceof AutoCloseable;
((AutoCloseable) provider).close();
}
diff --git a/src/test/testbase/java/com/android/tools/r8/TestBase.java b/src/test/testbase/java/com/android/tools/r8/TestBase.java
index 58fd949..9722064 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestBase.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestBase.java
@@ -1781,7 +1781,7 @@
}
public static boolean canUseJavaUtilObjects(TestParameters parameters) {
- return parameters.isCfRuntime()
+ return (parameters.isCfRuntime() && parameters.getApiLevel() == null)
|| parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.K);
}