[dart2js] Use NNBD subtyping in new RTI tests.
Change-Id: Iee39310fdd85da47bffb62faa7234b2bd6dee7ca
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/159182
Reviewed-by: Stephen Adams <sra@google.com>
Commit-Queue: Mayank Patke <fishythefish@google.com>
diff --git a/tests/dart2js/internal/rti/constant_type_test.dart b/tests/dart2js/internal/rti/constant_type_test.dart
index cd08db5..7e71eb7 100644
--- a/tests/dart2js/internal/rti/constant_type_test.dart
+++ b/tests/dart2js/internal/rti/constant_type_test.dart
@@ -26,9 +26,9 @@
check<Generic<int>>(const Generic<int>());
check<Generic<dynamic>>(const Generic<dynamic>());
- check<Generic<Object>>(const Generic<Object>());
- check<Generic<Object>>(const Generic<dynamic>());
- check<Generic<dynamic>>(const Generic<Object>());
+ check<Generic<Object?>>(const Generic<Object?>());
+ check<Generic<Object?>>(const Generic<dynamic>());
+ check<Generic<dynamic>>(const Generic<Object?>());
check<List<int>>(const [1]);
check<List<String>>(const ['one']);
diff --git a/tests/dart2js/internal/rti/simple_is_test.dart b/tests/dart2js/internal/rti/simple_is_test.dart
index 6b79c94..fb82ac4 100644
--- a/tests/dart2js/internal/rti/simple_is_test.dart
+++ b/tests/dart2js/internal/rti/simple_is_test.dart
@@ -25,9 +25,9 @@
check<Generic<int>>(Generic<int>());
check<Generic<dynamic>>(Generic<dynamic>());
- check<Generic<Object>>(Generic<Object>());
- check<Generic<Object>>(Generic<dynamic>());
- check<Generic<dynamic>>(Generic<Object>());
+ check<Generic<Object?>>(Generic<Object?>());
+ check<Generic<Object?>>(Generic<dynamic>());
+ check<Generic<dynamic>>(Generic<Object?>());
Expect.isTrue(Generic<Thingy>().checkMethod(Thingy()));
Expect.isTrue(Generic<Object>().checkMethod(Object()));
diff --git a/tests/dart2js/internal/rti/subtype_test.dart b/tests/dart2js/internal/rti/subtype_test.dart
index e4222c4..68f4de7 100644
--- a/tests/dart2js/internal/rti/subtype_test.dart
+++ b/tests/dart2js/internal/rti/subtype_test.dart
@@ -5,6 +5,7 @@
import 'dart:_foreign_helper' show JS, JS_GET_NAME, TYPE_REF;
import 'dart:_js_embedded_names' show JsGetName;
import 'dart:_rti' as rti;
+import 'package:expect/expect.dart';
import 'subtype_utils.dart';
@@ -12,6 +13,8 @@
final String futureName = JS_GET_NAME(JsGetName.FUTURE_CLASS_TYPE_NAME);
final String nullName = JS_GET_NAME(JsGetName.NULL_CLASS_TYPE_NAME);
+final String nullableObject = "$objectName?";
+
const typeRulesJson = r'''
{
"int": {"num": []},
@@ -27,6 +30,8 @@
main() {
rti.testingAddRules(universe, typeRules);
+ rti.testingUniverseEvalOverride(
+ universe, nullableObject, TYPE_REF<Object?>());
rti.testingUniverseEvalOverride(universe, objectName, TYPE_REF<Object>());
rti.testingUniverseEvalOverride(universe, nullName, TYPE_REF<Null>());
runTests();
@@ -53,35 +58,46 @@
}
void testTopTypes() {
- strictSubtype('List<int>', objectName);
- equivalent(objectName, objectName);
+ strictSubtype('List<int>', nullableObject);
+ equivalent(nullableObject, nullableObject);
equivalent('@', '@');
equivalent('~', '~');
equivalent('1&', '1&');
- equivalent(objectName, '@');
- equivalent(objectName, '~');
- equivalent(objectName, '1&');
+ equivalent(nullableObject, '@');
+ equivalent(nullableObject, '~');
+ equivalent(nullableObject, '1&');
equivalent('@', '~');
equivalent('@', '1&');
equivalent('~', '1&');
- equivalent('List<$objectName>', 'List<@>');
- equivalent('List<$objectName>', 'List<~>');
- equivalent('List<$objectName>', 'List<1&>');
+ equivalent('List<$nullableObject>', 'List<@>');
+ equivalent('List<$nullableObject>', 'List<~>');
+ equivalent('List<$nullableObject>', 'List<1&>');
equivalent('List<@>', 'List<~>');
equivalent('List<@>', 'List<1&>');
equivalent('List<~>', 'List<1&>');
}
void testNull() {
- strictSubtype(nullName, 'int');
- strictSubtype(nullName, 'Iterable<CodeUnits>');
- strictSubtype(nullName, objectName);
+ if (isStrongMode) {
+ unrelated(nullName, 'int');
+ unrelated(nullName, 'Iterable<CodeUnits>');
+ unrelated(nullName, objectName);
+ } else {
+ strictSubtype(nullName, 'int');
+ strictSubtype(nullName, 'Iterable<CodeUnits>');
+ strictSubtype(nullName, objectName);
+ }
+ strictSubtype(nullName, nullableObject);
equivalent(nullName, nullName);
}
void testBottom() {
String never = '0&';
- equivalent(nullName, never); // This test is run with legacy subtyping
+ if (isStrongMode) {
+ strictSubtype(never, nullName);
+ } else {
+ equivalent(never, nullName);
+ }
}
void testFutureOr() {