Skip to content

Commit 977b6ef

Browse files
chloestefantsovaCommit Queue
authored and
Commit Queue
committed
[analyzer] Add search tests for null-aware elements
Part of #56989 Change-Id: I124cd1c411a8f193ae4ac59e4f6121cdedd54138 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/412260 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Chloe Stefantsova <[email protected]>
1 parent 7a02fa5 commit 977b6ef

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed

pkg/analysis_server/test/integration/search/find_element_references_test.dart

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,111 @@ foo(String str) {}
5959
expect(result.path.first.name, 'f');
6060
}
6161

62+
Future<void> test_findReferences_inNullAware_listElement() async {
63+
var text = r'''
64+
List<int> f(int? foo) {
65+
return [?foo /* target */];
66+
}
67+
''';
68+
69+
pathname = sourcePath('foo.dart');
70+
writeFile(pathname, text);
71+
await standardAnalysisSetup();
72+
await analysisFinished;
73+
74+
var results = (await _findElementReferences(text))!;
75+
expect(results, hasLength(1));
76+
var result = results.first;
77+
expect(result.location.file, pathname);
78+
expect(result.isPotential, isFalse);
79+
expect(result.kind.name, SearchResultKind.READ.name);
80+
expect(result.path.first.name, 'f');
81+
}
82+
83+
Future<void> test_findReferences_inNullAware_mapKey() async {
84+
var text = r'''
85+
Map<int, String> f(int? foo) {
86+
return {?foo /* target */: "value"};
87+
}
88+
''';
89+
90+
pathname = sourcePath('foo.dart');
91+
writeFile(pathname, text);
92+
await standardAnalysisSetup();
93+
await analysisFinished;
94+
95+
var results = (await _findElementReferences(text))!;
96+
expect(results, hasLength(1));
97+
var result = results.first;
98+
expect(result.location.file, pathname);
99+
expect(result.isPotential, isFalse);
100+
expect(result.kind.name, SearchResultKind.READ.name);
101+
expect(result.path.first.name, 'f');
102+
}
103+
104+
Future<void> test_findReferences_inNullAware_mapKeyValue() async {
105+
var text = r'''
106+
Map<int, String> f(int? key, String? value) {
107+
return {?key: ?value /* target */};
108+
}
109+
''';
110+
111+
pathname = sourcePath('foo.dart');
112+
writeFile(pathname, text);
113+
await standardAnalysisSetup();
114+
await analysisFinished;
115+
116+
var results = (await _findElementReferences(text))!;
117+
expect(results, hasLength(1));
118+
var result = results.first;
119+
expect(result.location.file, pathname);
120+
expect(result.isPotential, isFalse);
121+
expect(result.kind.name, SearchResultKind.READ.name);
122+
expect(result.path.first.name, 'f');
123+
}
124+
125+
Future<void> test_findReferences_inNullAware_mapValue() async {
126+
var text = r'''
127+
Map<String, int> f(int? foo) {
128+
return {"key": ?foo /* target */};
129+
}
130+
''';
131+
132+
pathname = sourcePath('foo.dart');
133+
writeFile(pathname, text);
134+
await standardAnalysisSetup();
135+
await analysisFinished;
136+
137+
var results = (await _findElementReferences(text))!;
138+
expect(results, hasLength(1));
139+
var result = results.first;
140+
expect(result.location.file, pathname);
141+
expect(result.isPotential, isFalse);
142+
expect(result.kind.name, SearchResultKind.READ.name);
143+
expect(result.path.first.name, 'f');
144+
}
145+
146+
Future<void> test_findReferences_inNullAware_setElement() async {
147+
var text = r'''
148+
Set<int> f(int? foo) {
149+
return {?foo /* target */};
150+
}
151+
''';
152+
153+
pathname = sourcePath('foo.dart');
154+
writeFile(pathname, text);
155+
await standardAnalysisSetup();
156+
await analysisFinished;
157+
158+
var results = (await _findElementReferences(text))!;
159+
expect(results, hasLength(1));
160+
var result = results.first;
161+
expect(result.location.file, pathname);
162+
expect(result.isPotential, isFalse);
163+
expect(result.kind.name, SearchResultKind.READ.name);
164+
expect(result.path.first.name, 'f');
165+
}
166+
62167
Future<List<SearchResult>?> _findElementReferences(String text) async {
63168
var offset = text.indexOf(' /* target */') - 1;
64169
var result = await sendSearchFindElementReferences(pathname, offset, false);

pkg/analysis_server/test/search/element_references_test.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,32 @@ void f() {
921921
assertHasResult(SearchResultKind.READ, 'vvv();');
922922
}
923923

924+
Future<void> test_localVariable_inNullAwareElements() async {
925+
await setPriorityFiles2([testFile]);
926+
addTestFile('''
927+
void f(bool t) {
928+
int? vvv = t ? 0 : null;
929+
List<int> list = [?vvv];
930+
Set<int> set = {?vvv};
931+
Map<int, String> mapKey = {?vvv: "value"};
932+
Map<String, int> mapValue = {"key": ?vvv, /* mapValue */};
933+
Map<int, int> mapKeyValue1 = {?vvv: vvv, /* mapKeyValue1 */}; // Using promotion.
934+
Map<int, int> mapKeyValue2 = {?vvv: ?vvv, /* mapKeyValue2 */}; // Ignoring promotion.
935+
}
936+
''');
937+
await findElementReferences(search: 'vvv = t ? 0 : null', false);
938+
expect(searchElement!.kind, ElementKind.LOCAL_VARIABLE);
939+
expect(results, hasLength(8));
940+
assertHasResult(SearchResultKind.READ, 'vvv];');
941+
assertHasResult(SearchResultKind.READ, 'vvv};');
942+
assertHasResult(SearchResultKind.READ, 'vvv: "value"');
943+
assertHasResult(SearchResultKind.READ, 'vvv, /* mapValue */};');
944+
assertHasResult(SearchResultKind.READ, 'vvv: vvv');
945+
assertHasResult(SearchResultKind.READ, 'vvv, /* mapKeyValue1 */};');
946+
assertHasResult(SearchResultKind.READ, 'vvv: ?vvv');
947+
assertHasResult(SearchResultKind.READ, 'vvv, /* mapKeyValue2 */};');
948+
}
949+
924950
Future<void> test_mixin() async {
925951
addTestFile('''
926952
mixin A {}

0 commit comments

Comments
 (0)