Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: pkg/analyzer/test/src/dart/analysis/search_test.dart

Issue 2529473002: Implement search for other local elements. (Closed)
Patch Set: Add tests for function/method type parameters. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/element/element.dart'; 8 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/src/dart/analysis/driver.dart'; 9 import 'package:analyzer/src/dart/analysis/driver.dart';
10 import 'package:analyzer/src/dart/analysis/search.dart'; 10 import 'package:analyzer/src/dart/analysis/search.dart';
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 buffer.write(isQualified); 74 buffer.write(isQualified);
75 buffer.write(")"); 75 buffer.write(")");
76 return buffer.toString(); 76 return buffer.toString();
77 } 77 }
78 } 78 }
79 79
80 @reflectiveTest 80 @reflectiveTest
81 class SearchTest extends BaseAnalysisDriverTest { 81 class SearchTest extends BaseAnalysisDriverTest {
82 static const testUri = 'package:test/test.dart'; 82 static const testUri = 'package:test/test.dart';
83 83
84 test_searchReferences_Label() async { 84 test_searchReferences_FunctionElement_local() async {
85 addTestFile('''
86 main() {
87 test() {}
88 test();
89 print(test);
90 }
91 ''');
92 FunctionElement element = await _findElement('test');
93 List<String> main = [testUri, 'main'];
94 var expected = [
95 _expectId(main, SearchResultKind.INVOCATION, 'test();'),
96 _expectId(main, SearchResultKind.REFERENCE, 'test);')
97 ];
98 await _verifyReferences(element, expected);
99 }
100
101 test_searchReferences_LabelElement() async {
85 addTestFile(''' 102 addTestFile('''
86 main() { 103 main() {
87 label: 104 label:
88 while (true) { 105 while (true) {
89 if (true) { 106 if (true) {
90 break label; // 1 107 break label; // 1
91 } 108 }
92 break label; // 2 109 break label; // 2
93 } 110 }
94 } 111 }
95 '''); 112 ''');
96 Element element = await _findElementAtString('label:'); 113 Element element = await _findElement('label');
97 List<String> main = [testUri, 'main']; 114 List<String> main = [testUri, 'main'];
98 var expected = [ 115 var expected = [
99 _expectId(main, SearchResultKind.REFERENCE, 'label; // 1'), 116 _expectId(main, SearchResultKind.REFERENCE, 'label; // 1'),
100 _expectId(main, SearchResultKind.REFERENCE, 'label; // 2') 117 _expectId(main, SearchResultKind.REFERENCE, 'label; // 2')
101 ]; 118 ];
102 await _verifyReferences(element, expected); 119 await _verifyReferences(element, expected);
103 } 120 }
104 121
105 test_searchReferences_localVariable() async { 122 test_searchReferences_LocalVariableElement() async {
106 addTestFile(r''' 123 addTestFile(r'''
107 main() { 124 main() {
108 var v; 125 var v;
109 v = 1; 126 v = 1;
110 v += 2; 127 v += 2;
111 print(v); 128 print(v);
112 v(); 129 v();
113 } 130 }
114 '''); 131 ''');
115 Element element = await _findElementAtString('v;'); 132 Element element = await _findElement('v');
116 List<String> main = [testUri, 'main']; 133 List<String> main = [testUri, 'main'];
117 var expected = [ 134 var expected = [
118 _expectId(main, SearchResultKind.WRITE, 'v = 1;'), 135 _expectId(main, SearchResultKind.WRITE, 'v = 1;'),
119 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'), 136 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'),
120 _expectId(main, SearchResultKind.READ, 'v);'), 137 _expectId(main, SearchResultKind.READ, 'v);'),
121 _expectId(main, SearchResultKind.INVOCATION, 'v();') 138 _expectId(main, SearchResultKind.INVOCATION, 'v();')
122 ]; 139 ];
123 await _verifyReferences(element, expected); 140 await _verifyReferences(element, expected);
124 } 141 }
125 142
126 test_searchReferences_localVariable_inForEachLoop() async { 143 test_searchReferences_localVariableElement_inForEachLoop() async {
127 addTestFile(''' 144 addTestFile('''
128 main() { 145 main() {
129 for (var v in []) { 146 for (var v in []) {
130 v = 1; 147 v = 1;
131 v += 2; 148 v += 2;
132 print(v); 149 print(v);
133 v(); 150 v();
134 } 151 }
135 } 152 }
136 '''); 153 ''');
137 Element element = await _findElementAtString('v in []'); 154 Element element = await _findElementAtString('v in []');
138 List<String> main = [testUri, 'main']; 155 List<String> main = [testUri, 'main'];
139 var expected = [ 156 var expected = [
140 _expectId(main, SearchResultKind.WRITE, 'v = 1;'), 157 _expectId(main, SearchResultKind.WRITE, 'v = 1;'),
141 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'), 158 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'),
142 _expectId(main, SearchResultKind.READ, 'v);'), 159 _expectId(main, SearchResultKind.READ, 'v);'),
143 _expectId(main, SearchResultKind.INVOCATION, 'v();') 160 _expectId(main, SearchResultKind.INVOCATION, 'v();')
144 ]; 161 ];
145 await _verifyReferences(element, expected); 162 await _verifyReferences(element, expected);
146 } 163 }
147 164
165 test_searchReferences_TypeParameterElement_ofClass() async {
166 addTestFile('''
167 class A<T> {
168 foo(T a) {}
169 bar(T b) {}
170 }
171 ''');
172 TypeParameterElement element = await _findElement('T');
173 var expected = [
174 _expectId([testUri, 'A', 'foo', 'a'], SearchResultKind.REFERENCE, 'T a'),
175 _expectId([testUri, 'A', 'bar', 'b'], SearchResultKind.REFERENCE, 'T b'),
176 ];
177 await _verifyReferences(element, expected);
178 }
179
180 test_searchReferences_TypeParameterElement_ofLocalFunction() async {
181 addTestFile('''
182 main() {
183 void foo<T>(T a) {
184 void bar(T b) {}
185 }
186 }
187 ''');
188 TypeParameterElement element = await _findElement('T');
189 var expected = [
190 _expectId(
191 [testUri, 'main', 'foo', 'a'], SearchResultKind.REFERENCE, 'T a'),
192 _expectId([testUri, 'main', 'foo', 'bar', 'b'],
193 SearchResultKind.REFERENCE, 'T b'),
194 ];
195 await _verifyReferences(element, expected);
196 }
197
198 test_searchReferences_TypeParameterElement_ofMethod() async {
199 addTestFile('''
200 class A {
201 foo<T>(T p) {}
202 }
203 ''');
204 TypeParameterElement element = await _findElement('T');
205 var expected = [
206 _expectId([testUri, 'A', 'foo', 'p'], SearchResultKind.REFERENCE, 'T p'),
207 ];
208 await _verifyReferences(element, expected);
209 }
210
211 test_searchReferences_TypeParameterElement_ofTopLevelFunction() async {
212 addTestFile('''
213 foo<T>(T a) {
214 bar(T b) {}
215 }
216 ''');
217 TypeParameterElement element = await _findElement('T');
218 var expected = [
219 _expectId([testUri, 'foo', 'a'], SearchResultKind.REFERENCE, 'T a'),
220 _expectId(
221 [testUri, 'foo', 'bar', 'b'], SearchResultKind.REFERENCE, 'T b'),
222 ];
223 await _verifyReferences(element, expected);
224 }
225
148 ExpectedResult _expectId( 226 ExpectedResult _expectId(
149 List<String> enclosingComponents, SearchResultKind kind, String search, 227 List<String> enclosingComponents, SearchResultKind kind, String search,
150 {int length, bool isResolved: true, bool isQualified: false}) { 228 {int length, bool isResolved: true, bool isQualified: false}) {
151 int offset = findOffset(search); 229 int offset = findOffset(search);
152 if (length == null) { 230 if (length == null) {
153 length = getLeadingIdentifierLength(search); 231 length = getLeadingIdentifierLength(search);
154 } 232 }
155 return new ExpectedResult(enclosingComponents, kind, offset, length, 233 return new ExpectedResult(enclosingComponents, kind, offset, length,
156 isResolved: isResolved, isQualified: isQualified); 234 isResolved: isResolved, isQualified: isQualified);
157 } 235 }
158 236
237 Future<Element> _findElement(String name) async {
238 AnalysisResult result = await driver.getResult(testFile);
239 return findChildElement(result.unit.element, name);
240 }
241
159 Future<Element> _findElementAtString(String search) async { 242 Future<Element> _findElementAtString(String search) async {
160 AnalysisResult result = await driver.getResult(testFile); 243 AnalysisResult result = await driver.getResult(testFile);
161 int offset = findOffset(search); 244 int offset = findOffset(search);
162 AstNode node = new NodeLocator(offset).searchWithin(result.unit); 245 AstNode node = new NodeLocator(offset).searchWithin(result.unit);
163 return ElementLocator.locate(node); 246 return ElementLocator.locate(node);
164 } 247 }
165 248
166 Future _verifyReferences( 249 Future _verifyReferences(
167 Element element, List<ExpectedResult> expectedMatches) async { 250 Element element, List<ExpectedResult> expectedMatches) async {
168 List<SearchResult> results = await driver.search.references(element); 251 List<SearchResult> results = await driver.search.references(element);
169 _assertResults(results, expectedMatches); 252 _assertResults(results, expectedMatches);
170 expect(results, hasLength(expectedMatches.length)); 253 expect(results, hasLength(expectedMatches.length));
171 } 254 }
172 255
173 static void _assertResults( 256 static void _assertResults(
174 List<SearchResult> matches, List<ExpectedResult> expectedMatches) { 257 List<SearchResult> matches, List<ExpectedResult> expectedMatches) {
175 expect(matches, unorderedEquals(expectedMatches)); 258 expect(matches, unorderedEquals(expectedMatches));
176 } 259 }
177 } 260 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698