OLD | NEW |
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/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
| 9 import 'package:analyzer/src/dart/analysis/driver.dart'; |
8 import 'package:analyzer/src/dart/analysis/search.dart'; | 10 import 'package:analyzer/src/dart/analysis/search.dart'; |
| 11 import 'package:analyzer/src/dart/ast/utilities.dart'; |
9 import 'package:test/test.dart'; | 12 import 'package:test/test.dart'; |
10 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 13 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
11 | 14 |
12 import 'base.dart'; | 15 import 'base.dart'; |
13 | 16 |
14 main() { | 17 main() { |
15 defineReflectiveSuite(() { | 18 defineReflectiveSuite(() { |
16 defineReflectiveTests(SearchTest); | 19 defineReflectiveTests(SearchTest); |
17 }); | 20 }); |
18 } | 21 } |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 main() { | 86 main() { |
84 label: | 87 label: |
85 while (true) { | 88 while (true) { |
86 if (true) { | 89 if (true) { |
87 break label; // 1 | 90 break label; // 1 |
88 } | 91 } |
89 break label; // 2 | 92 break label; // 2 |
90 } | 93 } |
91 } | 94 } |
92 '''); | 95 '''); |
93 int offset = findOffset('label:'); | 96 Element element = await _findElementAtString('label:'); |
94 List<String> main = [testUri, 'main']; | 97 List<String> main = [testUri, 'main']; |
95 var expected = [ | 98 var expected = [ |
96 _expectId(main, SearchResultKind.REFERENCE, 'label; // 1'), | 99 _expectId(main, SearchResultKind.REFERENCE, 'label; // 1'), |
97 _expectId(main, SearchResultKind.REFERENCE, 'label; // 2') | 100 _expectId(main, SearchResultKind.REFERENCE, 'label; // 2') |
98 ]; | 101 ]; |
99 await _verifyReferences(offset, expected); | 102 await _verifyReferences(element, expected); |
100 } | 103 } |
101 | 104 |
102 test_searchReferences_localVariable() async { | 105 test_searchReferences_localVariable() async { |
103 addTestFile(r''' | 106 addTestFile(r''' |
104 main() { | 107 main() { |
105 var v; | 108 var v; |
106 v = 1; | 109 v = 1; |
107 v += 2; | 110 v += 2; |
108 print(v); | 111 print(v); |
109 v(); | 112 v(); |
110 } | 113 } |
111 '''); | 114 '''); |
112 int offset = findOffset('v;'); | 115 Element element = await _findElementAtString('v;'); |
113 List<String> main = [testUri, 'main']; | 116 List<String> main = [testUri, 'main']; |
114 var expected = [ | 117 var expected = [ |
115 _expectId(main, SearchResultKind.WRITE, 'v = 1;'), | 118 _expectId(main, SearchResultKind.WRITE, 'v = 1;'), |
116 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'), | 119 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'), |
117 _expectId(main, SearchResultKind.READ, 'v);'), | 120 _expectId(main, SearchResultKind.READ, 'v);'), |
118 _expectId(main, SearchResultKind.INVOCATION, 'v();') | 121 _expectId(main, SearchResultKind.INVOCATION, 'v();') |
119 ]; | 122 ]; |
120 await _verifyReferences(offset, expected); | 123 await _verifyReferences(element, expected); |
121 } | 124 } |
122 | 125 |
123 test_searchReferences_localVariable_inForEachLoop() async { | 126 test_searchReferences_localVariable_inForEachLoop() async { |
124 addTestFile(''' | 127 addTestFile(''' |
125 main() { | 128 main() { |
126 for (var v in []) { | 129 for (var v in []) { |
127 v = 1; | 130 v = 1; |
128 v += 2; | 131 v += 2; |
129 print(v); | 132 print(v); |
130 v(); | 133 v(); |
131 } | 134 } |
132 } | 135 } |
133 '''); | 136 '''); |
134 int offset = findOffset('v in []'); | 137 Element element = await _findElementAtString('v in []'); |
135 List<String> main = [testUri, 'main']; | 138 List<String> main = [testUri, 'main']; |
136 var expected = [ | 139 var expected = [ |
137 _expectId(main, SearchResultKind.WRITE, 'v = 1;'), | 140 _expectId(main, SearchResultKind.WRITE, 'v = 1;'), |
138 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'), | 141 _expectId(main, SearchResultKind.READ_WRITE, 'v += 2;'), |
139 _expectId(main, SearchResultKind.READ, 'v);'), | 142 _expectId(main, SearchResultKind.READ, 'v);'), |
140 _expectId(main, SearchResultKind.INVOCATION, 'v();') | 143 _expectId(main, SearchResultKind.INVOCATION, 'v();') |
141 ]; | 144 ]; |
142 await _verifyReferences(offset, expected); | 145 await _verifyReferences(element, expected); |
143 } | 146 } |
144 | 147 |
145 ExpectedResult _expectId( | 148 ExpectedResult _expectId( |
146 List<String> enclosingComponents, SearchResultKind kind, String search, | 149 List<String> enclosingComponents, SearchResultKind kind, String search, |
147 {int length, bool isResolved: true, bool isQualified: false}) { | 150 {int length, bool isResolved: true, bool isQualified: false}) { |
148 int offset = findOffset(search); | 151 int offset = findOffset(search); |
149 if (length == null) { | 152 if (length == null) { |
150 length = getLeadingIdentifierLength(search); | 153 length = getLeadingIdentifierLength(search); |
151 } | 154 } |
152 return new ExpectedResult(enclosingComponents, kind, offset, length, | 155 return new ExpectedResult(enclosingComponents, kind, offset, length, |
153 isResolved: isResolved, isQualified: isQualified); | 156 isResolved: isResolved, isQualified: isQualified); |
154 } | 157 } |
155 | 158 |
| 159 Future<Element> _findElementAtString(String search) async { |
| 160 AnalysisResult result = await driver.getResult(testFile); |
| 161 int offset = findOffset(search); |
| 162 AstNode node = new NodeLocator(offset).searchWithin(result.unit); |
| 163 return ElementLocator.locate(node); |
| 164 } |
| 165 |
156 Future _verifyReferences( | 166 Future _verifyReferences( |
157 int offset, List<ExpectedResult> expectedMatches) async { | 167 Element element, List<ExpectedResult> expectedMatches) async { |
158 List<SearchResult> results = | 168 List<SearchResult> results = await driver.search.references(element); |
159 await driver.search.references(testFile, offset); | |
160 _assertResults(results, expectedMatches); | 169 _assertResults(results, expectedMatches); |
161 expect(results, hasLength(expectedMatches.length)); | 170 expect(results, hasLength(expectedMatches.length)); |
162 } | 171 } |
163 | 172 |
164 static void _assertResults( | 173 static void _assertResults( |
165 List<SearchResult> matches, List<ExpectedResult> expectedMatches) { | 174 List<SearchResult> matches, List<ExpectedResult> expectedMatches) { |
166 expect(matches, unorderedEquals(expectedMatches)); | 175 expect(matches, unorderedEquals(expectedMatches)); |
167 } | 176 } |
168 } | 177 } |
OLD | NEW |