[cfe] Use macro_api_test to test ClassIntrospector.superclassOf
Change-Id: I0d74773c27e1fce0d84243c507af7cb2d32a1aa9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/234160
Reviewed-by: Jake Macdonald <jakemac@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
index 82c2e5f..b0fca36 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
@@ -12,6 +12,14 @@
@ClassMacro()
abstract class Class2 {}
+@ClassMacro()
+class Class3 extends Class2 {}
+
+mixin Mixin {}
+
+@ClassMacro()
+class Class4 extends Class1 with Mixin {}
+
@FunctionMacro()
void topLevelFunction1(Class1 a, {Class1? b, required Class2? c}) {}
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
index b43d1e6..388a6cc 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
@@ -5,8 +5,10 @@
import 'package:_fe_analyzer_shared/src/macros/api.dart';
const Map<String, ClassData> expectedClassData = {
- 'Class1': ClassData(),
- 'Class2': ClassData(isAbstract: true),
+ 'Class1': ClassData(superclassOf: 'Object'),
+ 'Class2': ClassData(isAbstract: true, superclassOf: 'Object'),
+ 'Class3': ClassData(superclassOf: 'Class2', superSuperclassOf: 'Object'),
+ 'Class4': ClassData(superclassOf: 'Class1', superSuperclassOf: 'Object'),
};
const Map<String, FunctionData> expectedFunctionData = {
@@ -61,12 +63,25 @@
checkTypeAnnotation(expected.type, declaration.type, '$context.type');
}
-void checkClassDeclaration(ClassDeclaration declaration) {
+Future<void> checkClassDeclaration(ClassDeclaration declaration,
+ {ClassIntrospector? classIntrospector}) async {
String name = declaration.identifier.name;
ClassData? expected = expectedClassData[name];
if (expected != null) {
expect(expected.isAbstract, declaration.isAbstract, '$name.isAbstract');
expect(expected.isExternal, declaration.isExternal, '$name.isExternal');
+ if (classIntrospector != null) {
+ ClassDeclaration? superclassOf =
+ await classIntrospector.superclassOf(declaration);
+ expect(expected.superclassOf, superclassOf?.identifier.name,
+ '$name.superclassOf');
+ if (superclassOf != null) {
+ ClassDeclaration? superSuperclassOf =
+ await classIntrospector.superclassOf(superclassOf);
+ expect(expected.superSuperclassOf, superSuperclassOf?.identifier.name,
+ '$name.superSuperclassOf');
+ }
+ }
// TODO(johnniwinther): Test more properties when there are supported.
} else {
throw 'Unexpected class declaration "${name}"';
@@ -109,8 +124,14 @@
class ClassData {
final bool isAbstract;
final bool isExternal;
+ final String superclassOf;
+ final String? superSuperclassOf;
- const ClassData({this.isAbstract: false, this.isExternal: false});
+ const ClassData(
+ {this.isAbstract: false,
+ this.isExternal: false,
+ required this.superclassOf,
+ this.superSuperclassOf});
}
class FunctionData {
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
index 2110615..de593f8 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
@@ -13,18 +13,18 @@
const ClassMacro();
FutureOr<void> buildTypesForClass(
- ClassDeclaration clazz, TypeBuilder builder) {
- checkClassDeclaration(clazz);
+ ClassDeclaration clazz, TypeBuilder builder) async {
+ await checkClassDeclaration(clazz);
}
FutureOr<void> buildDeclarationsForClass(
- ClassDeclaration clazz, ClassMemberDeclarationBuilder builder) {
- checkClassDeclaration(clazz);
+ ClassDeclaration clazz, ClassMemberDeclarationBuilder builder) async {
+ await checkClassDeclaration(clazz, classIntrospector: builder);
}
FutureOr<void> buildDefinitionForClass(
- ClassDeclaration clazz, ClassDefinitionBuilder builder) {
- checkClassDeclaration(clazz);
+ ClassDeclaration clazz, ClassDefinitionBuilder builder) async {
+ await checkClassDeclaration(clazz, classIntrospector: builder);
}
}