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

Side by Side Diff: pkg/analysis_server/test/services/index2/index2_test.dart

Issue 1788673004: Index unqualified unresolved used names. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months 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
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 'package:analysis_server/src/services/index2/index2.dart'; 5 import 'package:analysis_server/src/services/index2/index2.dart';
6 import 'package:analyzer/dart/ast/ast.dart'; 6 import 'package:analyzer/dart/ast/ast.dart';
7 import 'package:analyzer/dart/element/element.dart'; 7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/src/generated/source.dart'; 8 import 'package:analyzer/src/generated/source.dart';
9 import 'package:analyzer/src/summary/idl.dart'; 9 import 'package:analyzer/src/summary/idl.dart';
10 import 'package:test_reflective_loader/test_reflective_loader.dart'; 10 import 'package:test_reflective_loader/test_reflective_loader.dart';
11 import 'package:unittest/unittest.dart'; 11 import 'package:unittest/unittest.dart';
12 12
13 import '../../abstract_single_unit.dart'; 13 import '../../abstract_single_unit.dart';
14 import '../../utils.dart'; 14 import '../../utils.dart';
15 15
16 main() { 16 main() {
17 initializeTestEnvironment(); 17 initializeTestEnvironment();
18 defineReflectiveTests(Index2Test); 18 defineReflectiveTests(Index2Test);
19 } 19 }
20 20
21 @reflectiveTest 21 @reflectiveTest
22 class Index2Test extends AbstractSingleUnitTest { 22 class Index2Test extends AbstractSingleUnitTest {
23 Index2 index = createMemoryIndex2(); 23 Index2 index = createMemoryIndex2();
24 24
25 /** 25 /**
26 * Return the [Location] with given properties, or fail. 26 * Return the [Location] with given properties, or fail.
27 */ 27 */
28 Location findLocation(List<Location> locations, String libraryUri, 28 Location findLocation(List<Location> locations, String libraryUri,
29 String unitUri, int offset, int length) { 29 String unitUri, int offset, int length, bool isQualified) {
30 for (Location location in locations) { 30 for (Location location in locations) {
31 if (location.libraryUri == libraryUri && 31 if (location.libraryUri == libraryUri &&
32 location.unitUri == unitUri && 32 location.unitUri == unitUri &&
33 location.offset == offset && 33 location.offset == offset &&
34 location.length == length) { 34 location.length == length &&
35 location.isQualified == isQualified) {
35 return location; 36 return location;
36 } 37 }
37 } 38 }
38 fail('No at $offset with length $length in\n${locations.join('\n')}'); 39 fail('No at $offset with length $length qualified=$isQualified in\n'
40 '${locations.join('\n')}');
39 return null; 41 return null;
40 } 42 }
41 43
42 /** 44 /**
43 * Return the [Location] with given properties, or fail. 45 * Return the [Location] with given properties, or fail.
44 */ 46 */
45 Location findLocationSource( 47 Location findLocationSource(
46 List<Location> locations, Source source, String search, 48 List<Location> locations, Source source, String search, bool isQualified,
47 {int length}) { 49 {int length}) {
48 String code = source.contents.data; 50 String code = source.contents.data;
49 int offset = code.indexOf(search); 51 int offset = code.indexOf(search);
50 expect(offset, isNonNegative, reason: 'Not found "$search" in\n$code'); 52 expect(offset, isNonNegative, reason: 'Not found "$search" in\n$code');
51 length ??= getLeadingIdentifierLength(search); 53 length ??= getLeadingIdentifierLength(search);
52 String uri = source.uri.toString(); 54 String uri = source.uri.toString();
53 return findLocation(locations, uri, uri, offset, length); 55 return findLocation(locations, uri, uri, offset, length, isQualified);
54 } 56 }
55 57
56 /** 58 /**
57 * Return the [Location] with given properties, or fail. 59 * Return the [Location] with given properties, or fail.
58 */ 60 */
59 Location findLocationTest(List<Location> locations, String search, 61 Location findLocationTest(
62 List<Location> locations, String search, bool isQualified,
60 {int length}) { 63 {int length}) {
61 int offset = findOffset(search); 64 int offset = findOffset(search);
62 length ??= getLeadingIdentifierLength(search); 65 length ??= getLeadingIdentifierLength(search);
63 String testUri = testSource.uri.toString(); 66 String testUri = testSource.uri.toString();
64 return findLocation(locations, testUri, testUri, offset, length); 67 return findLocation(
68 locations, testUri, testUri, offset, length, isQualified);
65 } 69 }
66 70
67 void setUp() { 71 void setUp() {
68 super.setUp(); 72 super.setUp();
69 } 73 }
70 74
71 void tearDown() { 75 void tearDown() {
72 super.tearDown(); 76 super.tearDown();
73 index = null; 77 index = null;
74 } 78 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 '''); 129 ''');
126 Source source2 = _indexUnit( 130 Source source2 = _indexUnit(
127 '/test2.dart', 131 '/test2.dart',
128 r''' 132 r'''
129 import 'test.dart'; 133 import 'test.dart';
130 class C extends A {} // C 134 class C extends A {} // C
131 '''); 135 ''');
132 ClassElement elementA = testUnitElement.getType('A'); 136 ClassElement elementA = testUnitElement.getType('A');
133 List<Location> locations = 137 List<Location> locations =
134 await index.getRelations(elementA, IndexRelationKind.IS_EXTENDED_BY); 138 await index.getRelations(elementA, IndexRelationKind.IS_EXTENDED_BY);
135 findLocationTest(locations, 'A {} // B'); 139 findLocationTest(locations, 'A {} // B', false);
136 findLocationSource(locations, source2, 'A {} // C'); 140 findLocationSource(locations, source2, 'A {} // C', false);
137 } 141 }
138 142
139 test_getRelations_isReferencedBy() async { 143 test_getRelations_isReferencedBy() async {
140 _indexTestUnit(r''' 144 _indexTestUnit(r'''
141 main(int a, int b) { 145 main(int a, int b) {
142 } 146 }
143 '''); 147 ''');
144 ClassElement intElement = context.typeProvider.intType.element; 148 ClassElement intElement = context.typeProvider.intType.element;
145 List<Location> locations = await index.getRelations( 149 List<Location> locations = await index.getRelations(
146 intElement, IndexRelationKind.IS_REFERENCED_BY); 150 intElement, IndexRelationKind.IS_REFERENCED_BY);
147 findLocationTest(locations, 'int a'); 151 findLocationTest(locations, 'int a', false);
148 findLocationTest(locations, 'int b'); 152 findLocationTest(locations, 'int b', false);
149 } 153 }
150 154
151 test_getUnresolvedMemberReferences() async { 155 test_getUnresolvedMemberReferences_qualified_resolved() async {
152 _indexTestUnit(''' 156 _indexTestUnit('''
153 class A { 157 class A {
154 var test; // A 158 var test; // A
155 mainA() { 159 }
156 test(); // a-inv-r-nq 160 main(A a) {
157 test = 1; // a-ref-r-nq 161 print(a.test);
158 test += 2; // a-ref-r-nq 162 a.test = 1;
159 print(test); // a-ref-r-nq 163 a.test += 2;
164 a.test();
165 }
166 ''');
167 List<Location> locations =
168 await index.getUnresolvedMemberReferences('test');
169 expect(locations, isEmpty);
160 } 170 }
171
172 test_getUnresolvedMemberReferences_qualified_unresolved() async {
173 _indexTestUnit('''
174 class A {
175 var test; // A
161 } 176 }
162 main(A a, p) { 177 main(p) {
163 a.test(); // a-inv-r-q 178 print(p.test);
164 a.test = 1; // a-ref-r-q 179 p.test = 1;
165 a.test += 2; // a-ref-r-q 180 p.test += 2;
166 print(a.test); // a-ref-r-q 181 p.test();
167 p.test(); // p-inv-ur-q
168 p.test = 1; // p-ref-ur-q
169 p.test += 2; // p-ref-ur-q
170 print(p.test); // p-ref-ur-q
171 print(p.test2); // not requested 182 print(p.test2); // not requested
172 } 183 }
173 '''); 184 ''');
174 List<Location> locations = 185 List<Location> locations =
175 await index.getUnresolvedMemberReferences('test'); 186 await index.getUnresolvedMemberReferences('test');
176 expect(locations, hasLength(4)); 187 expect(locations, hasLength(4));
177 findLocationTest(locations, 'test(); // p-inv-ur-q'); 188 findLocationTest(locations, 'test);', true);
178 findLocationTest(locations, 'test = 1; // p-ref-ur-q'); 189 findLocationTest(locations, 'test = 1;', true);
179 findLocationTest(locations, 'test += 2; // p-ref-ur-q'); 190 findLocationTest(locations, 'test += 2;', true);
180 findLocationTest(locations, 'test); // p-ref-ur-q'); 191 findLocationTest(locations, 'test();', true);
192 }
193
194 test_getUnresolvedMemberReferences_unqualified_resolved() async {
195 _indexTestUnit('''
196 class A {
197 var test;
198 m() {
199 print(test);
200 test = 1;
201 test += 2;
202 test();
203 }
204 }
205 ''');
206 List<Location> locations =
207 await index.getUnresolvedMemberReferences('test');
208 expect(locations, isEmpty);
209 }
210
211 test_getUnresolvedMemberReferences_unqualified_unresolved() async {
212 verifyNoTestUnitErrors = false;
213 _indexTestUnit('''
214 class A {
215 m() {
216 print(test);
217 test = 1;
218 test += 2;
219 test();
220 print(test2); // not requested
221 }
222 }
223 ''');
224 List<Location> locations =
225 await index.getUnresolvedMemberReferences('test');
226 expect(locations, hasLength(4));
227 findLocationTest(locations, 'test);', false);
228 findLocationTest(locations, 'test = 1;', false);
229 findLocationTest(locations, 'test += 2;', false);
230 findLocationTest(locations, 'test();', false);
181 } 231 }
182 232
183 test_indexUnit_nullUnit() async { 233 test_indexUnit_nullUnit() async {
184 index.indexUnit(null); 234 index.indexUnit(null);
185 } 235 }
186 236
187 test_indexUnit_nullUnitElement() async { 237 test_indexUnit_nullUnitElement() async {
188 resolveTestUnit(''); 238 resolveTestUnit('');
189 testUnit.element = null; 239 testUnit.element = null;
190 index.indexUnit(testUnit); 240 index.indexUnit(testUnit);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 index.indexUnit(testUnit); 303 index.indexUnit(testUnit);
254 } 304 }
255 305
256 Source _indexUnit(String path, String code) { 306 Source _indexUnit(String path, String code) {
257 Source source = addSource(path, code); 307 Source source = addSource(path, code);
258 CompilationUnit unit = resolveLibraryUnit(source); 308 CompilationUnit unit = resolveLibraryUnit(source);
259 index.indexUnit(unit); 309 index.indexUnit(unit);
260 return source; 310 return source;
261 } 311 }
262 } 312 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698