| 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 |