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

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

Issue 2521913004: Deoptimize Search - request a new resolved unit for local search. (Closed)
Patch Set: Created 4 years 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/test/src/dart/analysis/index_test.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/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
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 }
OLDNEW
« no previous file with comments | « pkg/analyzer/test/src/dart/analysis/index_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698