[analyzer] Add tests for null-aware elements and LSP navigation
Part of https://github.com/dart-lang/sdk/issues/56989
Change-Id: I24b121ee476f42b2108daddf6c0b63525052434f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399080
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/analysis_server/test/lsp/definition_test.dart b/pkg/analysis_server/test/lsp/definition_test.dart
index 7abe000..5b653d9 100644
--- a/pkg/analysis_server/test/lsp/definition_test.dart
+++ b/pkg/analysis_server/test/lsp/definition_test.dart
@@ -387,6 +387,54 @@
await testContents(contents);
}
+ Future<void> test_function_inNullAwareElement_inList() async {
+ var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+ return [?fo^o()];
+}
+''';
+
+ await testContents(contents);
+ }
+
+ Future<void> test_function_inNullAwareElement_inSet() async {
+ var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+ return {?fo^o()};
+}
+''';
+
+ await testContents(contents);
+ }
+
+ Future<void> test_function_inNullAwareKey_inMap() async {
+ var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+ return {?fo^o(): "value"};
+}
+''';
+
+ await testContents(contents);
+ }
+
+ Future<void> test_function_inNullAwareValue_inMap() async {
+ var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+ return {"key": ?fo^o()};
+}
+''';
+
+ await testContents(contents);
+ }
+
Future<void> test_functionInPattern() async {
var contents = '''
bool [!greater!](int x, int y) => x > y;
@@ -843,6 +891,54 @@
await testContents(contents);
}
+ Future<void> test_type_inNullAwareElement_inList() async {
+ var contents = '''
+f() {
+ final a = [?A^];
+}
+
+class [!A!] {}
+''';
+
+ await testContents(contents);
+ }
+
+ Future<void> test_type_inNullAwareElement_inSet() async {
+ var contents = '''
+f() {
+ final a = {?A^};
+}
+
+class [!A!] {}
+''';
+
+ await testContents(contents);
+ }
+
+ Future<void> test_type_inNullAwareKey_inMap() async {
+ var contents = '''
+f() {
+ final a = {?A^, "value"};
+}
+
+class [!A!] {}
+''';
+
+ await testContents(contents);
+ }
+
+ Future<void> test_type_inNullAwareValue_inMap() async {
+ var contents = '''
+f() {
+ final a = {"key": ?A^};
+}
+
+class [!A!] {}
+''';
+
+ await testContents(contents);
+ }
+
Future<void> test_unopenFile() async {
var contents = '''
[!foo!]() {
diff --git a/pkg/analysis_server/test/lsp/super_test.dart b/pkg/analysis_server/test/lsp/super_test.dart
index f760bb7..e3e3f81 100644
--- a/pkg/analysis_server/test/lsp/super_test.dart
+++ b/pkg/analysis_server/test/lsp/super_test.dart
@@ -237,6 +237,69 @@
);
}
+ Future<void>
+ test_method_parameter_defaultValue_inNullAwareElement_inList() async {
+ await verifyGoToSuper(
+ TestCode.parse('''
+class A {
+ void [!foo!]([List<int> arg = const []]) {}
+}
+
+class B extends A {
+ @override
+ void foo([List<int> arg = const [?nu^ll]]) {}
+}
+'''),
+ );
+ }
+
+ Future<void>
+ test_method_parameter_defaultValue_inNullAwareElement_inSet() async {
+ await verifyGoToSuper(
+ TestCode.parse('''
+class A {
+ void [!foo!]([Set<int> arg = const {}]) {}
+}
+
+class B extends A {
+ @override
+ void foo([Set<int> arg = const {?nu^ll}]) {}
+}
+'''),
+ );
+ }
+
+ Future<void> test_method_parameter_defaultValue_inNullAwareKey_inMap() async {
+ await verifyGoToSuper(
+ TestCode.parse('''
+class A {
+ void [!foo!]([Map<int, String> arg = const {}]) {}
+}
+
+class B extends A {
+ @override
+ void foo([Map<int, String> arg = const {?nu^ll: "value"}]) {}
+}
+'''),
+ );
+ }
+
+ Future<void>
+ test_method_parameter_defaultValue_inNullAwareValue_inMap() async {
+ await verifyGoToSuper(
+ TestCode.parse('''
+class A {
+ void [!foo!]([Map<String, int> arg = const {}]) {}
+}
+
+class B extends A {
+ @override
+ void foo([Map<String, int> arg = const {"key": ?nu^ll}]) {}
+}
+'''),
+ );
+ }
+
Future<void> test_methodName() async {
await verifyGoToSuper(
TestCode.parse('''