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

Side by Side Diff: pkg/analysis_server/test/analysis_notification_overrides_test.dart

Issue 440743002: Update 'analysis.override' notification to the latest spec. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library test.domain.analysis.notification.overrides; 5 library test.domain.analysis.notification.overrides;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/analysis_server.dart'; 9 import 'package:analysis_server/src/analysis_server.dart';
10 import 'package:analysis_server/src/computer/computer_overrides.dart'; 10 import 'package:analysis_server/src/computer/computer_overrides.dart';
11 import 'package:analysis_server/src/computer/element.dart';
12 import 'package:analysis_server/src/constants.dart'; 11 import 'package:analysis_server/src/constants.dart';
13 import 'package:analysis_server/src/protocol.dart'; 12 import 'package:analysis_server/src/protocol.dart';
14 import 'package:analysis_services/constants.dart'; 13 import 'package:analysis_services/constants.dart';
15 import 'package:analysis_testing/reflective_tests.dart'; 14 import 'package:analysis_testing/reflective_tests.dart';
16 import 'package:unittest/unittest.dart'; 15 import 'package:unittest/unittest.dart';
17 16
18 import 'analysis_abstract.dart'; 17 import 'analysis_abstract.dart';
19 18
20 19
21 main() { 20 main() {
22 groupSep = ' | '; 21 groupSep = ' | ';
23 runReflectiveTests(AnalysisNotificationOverridesTest); 22 runReflectiveTests(AnalysisNotificationOverridesTest);
24 } 23 }
25 24
26 25
27 @ReflectiveTestCase() 26 @ReflectiveTestCase()
28 class AnalysisNotificationOverridesTest extends AbstractAnalysisTest { 27 class AnalysisNotificationOverridesTest extends AbstractAnalysisTest {
29 List<Override> overridesList; 28 List<Override> overridesList;
30 Override override; 29 Override override;
31 30
32 /** 31 /**
33 * Asserts that there is an overridden interface [Element] at the offset of 32 * Asserts that there is an overridden interface [OverriddenMember] at the
34 * [search] in [override]. 33 * offset of [search] in [override].
35 */ 34 */
36 void assertHasInterfaceElement(String search) { 35 void assertHasInterfaceMember(String search) {
37 int offset = findOffset(search); 36 int offset = findOffset(search);
38 for (Element element in override.interfaceElements) { 37 for (OverriddenMember member in override.interfaceMembers) {
39 if (element.location.offset == offset) { 38 if (member.element.location.offset == offset) {
40 return; 39 return;
41 } 40 }
42 } 41 }
43 fail( 42 fail(
44 'Expect to find an overridden interface elements at $offset in ' 43 'Expect to find an overridden interface members at $offset in '
45 '${override.interfaceElements.join('\n')}'); 44 '${override.interfaceMembers.join('\n')}');
46 } 45 }
47 46
48 /** 47 /**
49 * Validates that there is an [Override] at the offset of [search]. 48 * Validates that there is an [Override] at the offset of [search].
50 * 49 *
51 * If [length] is not specified explicitly, then length of an identifier 50 * If [length] is not specified explicitly, then length of an identifier
52 * from [search] is used. 51 * from [search] is used.
53 */ 52 */
54 void assertHasOverride(String search, [int length = -1]) { 53 void assertHasOverride(String search, [int length = -1]) {
55 int offset = findOffset(search); 54 int offset = findOffset(search);
56 if (length == -1) { 55 if (length == -1) {
57 length = findIdentifierLength(search); 56 length = findIdentifierLength(search);
58 } 57 }
59 findOverride(offset, length, true); 58 findOverride(offset, length, true);
60 } 59 }
61 60
62 /** 61 /**
63 * Asserts that there is an overridden superclass [Element] at the offset of 62 * Asserts that there is an overridden superclass [OverriddenMember] at the
64 * [search] in [override]. 63 * offset of [search] in [override].
65 */ 64 */
66 void assertHasSuperElement(String search) { 65 void assertHasSuperElement(String search) {
67 int offset = findOffset(search); 66 int offset = findOffset(search);
68 Element element = override.superclassElement; 67 OverriddenMember member = override.superclassMember;
69 expect(element.location.offset, offset); 68 expect(member.element.location.offset, offset);
70 } 69 }
71 70
72 /** 71 /**
73 * Asserts that there are no overridden elements from interfaces. 72 * Asserts that there are no overridden members from interfaces.
74 */ 73 */
75 void assertNoInterfaceElements() { 74 void assertNoInterfaceMembers() {
76 expect(override.interfaceElements, isNull); 75 expect(override.interfaceMembers, isNull);
77 } 76 }
78 77
79 /** 78 /**
80 * Asserts that there are no overridden elements from the superclass. 79 * Asserts that there are no overridden member from the superclass.
81 */ 80 */
82 void assertNoSuperElement() { 81 void assertNoSuperMember() {
83 expect(override.superclassElement, isNull); 82 expect(override.superclassMember, isNull);
84 } 83 }
85 84
86 /** 85 /**
87 * Finds an [Override] with the given [offset] and [length]. 86 * Finds an [Override] with the given [offset] and [length].
88 * 87 *
89 * If [exists] is `true`, then fails if such [Override] does not exist. 88 * If [exists] is `true`, then fails if such [Override] does not exist.
90 * Otherwise remembers this it into [override]. 89 * Otherwise remembers this it into [override].
91 * 90 *
92 * If [exists] is `false`, then fails if such [Override] exists. 91 * If [exists] is `false`, then fails if such [Override] exists.
93 */ 92 */
(...skipping 18 matching lines...) Expand all
112 111
113 Future prepareOverrides() { 112 Future prepareOverrides() {
114 addAnalysisSubscription(AnalysisService.OVERRIDES, testFile); 113 addAnalysisSubscription(AnalysisService.OVERRIDES, testFile);
115 return waitForTasksFinished(); 114 return waitForTasksFinished();
116 } 115 }
117 116
118 void processNotification(Notification notification) { 117 void processNotification(Notification notification) {
119 if (notification.event == ANALYSIS_OVERRIDES) { 118 if (notification.event == ANALYSIS_OVERRIDES) {
120 String file = notification.getParameter(FILE); 119 String file = notification.getParameter(FILE);
121 if (file == testFile) { 120 if (file == testFile) {
122 overridesList = <Override>[];
123 List<Map<String, Object>> jsonList = 121 List<Map<String, Object>> jsonList =
124 notification.getParameter(OVERRIDES); 122 notification.getParameter(OVERRIDES);
125 for (Map<String, Object> json in jsonList) { 123 overridesList = jsonList.map(Override.fromJson).toList();
126 overridesList.add(new Override.fromJson(json));
127 }
128 } 124 }
129 } 125 }
130 } 126 }
131 127
132 void setUp() { 128 void setUp() {
133 super.setUp(); 129 super.setUp();
134 createProject(); 130 createProject();
135 } 131 }
136 132
137 test_afterAnalysis() { 133 test_afterAnalysis() {
138 addTestFile(''' 134 addTestFile('''
139 class A { 135 class A {
140 m() {} // in A 136 m() {} // in A
141 } 137 }
142 class B implements A { 138 class B implements A {
143 m() {} // in B 139 m() {} // in B
144 } 140 }
145 '''); 141 ''');
146 return waitForTasksFinished().then((_) { 142 return waitForTasksFinished().then((_) {
147 return prepareOverrides().then((_) { 143 return prepareOverrides().then((_) {
148 assertHasOverride('m() {} // in B'); 144 assertHasOverride('m() {} // in B');
149 assertNoSuperElement(); 145 assertNoSuperMember();
150 assertHasInterfaceElement('m() {} // in A'); 146 assertHasInterfaceMember('m() {} // in A');
151 }); 147 });
152 }); 148 });
153 } 149 }
154 150
155 test_interface_method_direct_multiple() { 151 test_interface_method_direct_multiple() {
156 addTestFile(''' 152 addTestFile('''
157 class IA { 153 class IA {
158 m() {} // in IA 154 m() {} // in IA
159 } 155 }
160 class IB { 156 class IB {
161 m() {} // in IB 157 m() {} // in IB
162 } 158 }
163 class A implements IA, IB { 159 class A implements IA, IB {
164 m() {} // in A 160 m() {} // in A
165 } 161 }
166 '''); 162 ''');
167 return prepareOverrides().then((_) { 163 return prepareOverrides().then((_) {
168 assertHasOverride('m() {} // in A'); 164 assertHasOverride('m() {} // in A');
169 assertNoSuperElement(); 165 assertNoSuperMember();
170 assertHasInterfaceElement('m() {} // in IA'); 166 assertHasInterfaceMember('m() {} // in IA');
171 assertHasInterfaceElement('m() {} // in IB'); 167 assertHasInterfaceMember('m() {} // in IB');
172 }); 168 });
173 } 169 }
174 170
175 test_interface_method_direct_single() { 171 test_interface_method_direct_single() {
176 addTestFile(''' 172 addTestFile('''
177 class A { 173 class A {
178 m() {} // in A 174 m() {} // in A
179 } 175 }
180 class B implements A { 176 class B implements A {
181 m() {} // in B 177 m() {} // in B
182 } 178 }
183 '''); 179 ''');
184 return prepareOverrides().then((_) { 180 return prepareOverrides().then((_) {
185 assertHasOverride('m() {} // in B'); 181 assertHasOverride('m() {} // in B');
186 assertNoSuperElement(); 182 assertNoSuperMember();
187 assertHasInterfaceElement('m() {} // in A'); 183 assertHasInterfaceMember('m() {} // in A');
188 }); 184 });
189 } 185 }
190 186
191 test_interface_method_indirect_single() { 187 test_interface_method_indirect_single() {
192 addTestFile(''' 188 addTestFile('''
193 class A { 189 class A {
194 m() {} // in A 190 m() {} // in A
195 } 191 }
196 class B extends A { 192 class B extends A {
197 } 193 }
198 class C implements B { 194 class C implements B {
199 m() {} // in C 195 m() {} // in C
200 } 196 }
201 '''); 197 ''');
202 return prepareOverrides().then((_) { 198 return prepareOverrides().then((_) {
203 assertHasOverride('m() {} // in C'); 199 assertHasOverride('m() {} // in C');
204 assertNoSuperElement(); 200 assertNoSuperMember();
205 assertHasInterfaceElement('m() {} // in A'); 201 assertHasInterfaceMember('m() {} // in A');
206 }); 202 });
207 } 203 }
208 204
209 test_super_fieldByField() { 205 test_super_fieldByField() {
210 addTestFile(''' 206 addTestFile('''
211 class A { 207 class A {
212 int fff; // in A 208 int fff; // in A
213 } 209 }
214 class B extends A { 210 class B extends A {
215 int fff; // in B 211 int fff; // in B
216 } 212 }
217 '''); 213 ''');
218 return prepareOverrides().then((_) { 214 return prepareOverrides().then((_) {
219 assertHasOverride('fff; // in B'); 215 assertHasOverride('fff; // in B');
220 assertHasSuperElement('fff; // in A'); 216 assertHasSuperElement('fff; // in A');
221 assertNoInterfaceElements(); 217 assertNoInterfaceMembers();
222 }); 218 });
223 } 219 }
224 220
225 test_super_fieldByGetter() { 221 test_super_fieldByGetter() {
226 addTestFile(''' 222 addTestFile('''
227 class A { 223 class A {
228 int fff; // in A 224 int fff; // in A
229 } 225 }
230 class B extends A { 226 class B extends A {
231 get fff => 0; // in B 227 get fff => 0; // in B
232 } 228 }
233 '''); 229 ''');
234 return prepareOverrides().then((_) { 230 return prepareOverrides().then((_) {
235 assertHasOverride('fff => 0; // in B'); 231 assertHasOverride('fff => 0; // in B');
236 assertHasSuperElement('fff; // in A'); 232 assertHasSuperElement('fff; // in A');
237 assertNoInterfaceElements(); 233 assertNoInterfaceMembers();
238 }); 234 });
239 } 235 }
240 236
241 test_super_fieldByMethod() { 237 test_super_fieldByMethod() {
242 addTestFile(''' 238 addTestFile('''
243 class A { 239 class A {
244 int fff; // in A 240 int fff; // in A
245 } 241 }
246 class B extends A { 242 class B extends A {
247 fff() {} // in B 243 fff() {} // in B
248 } 244 }
249 '''); 245 ''');
250 return prepareOverrides().then((_) { 246 return prepareOverrides().then((_) {
251 assertHasOverride('fff() {} // in B'); 247 assertHasOverride('fff() {} // in B');
252 assertHasSuperElement('fff; // in A'); 248 assertHasSuperElement('fff; // in A');
253 assertNoInterfaceElements(); 249 assertNoInterfaceMembers();
254 }); 250 });
255 } 251 }
256 252
257 test_super_fieldBySetter() { 253 test_super_fieldBySetter() {
258 addTestFile(''' 254 addTestFile('''
259 class A { 255 class A {
260 int fff; // in A 256 int fff; // in A
261 } 257 }
262 class B extends A { 258 class B extends A {
263 set fff(x) {} // in B 259 set fff(x) {} // in B
264 } 260 }
265 '''); 261 ''');
266 return prepareOverrides().then((_) { 262 return prepareOverrides().then((_) {
267 assertHasOverride('fff(x) {} // in B'); 263 assertHasOverride('fff(x) {} // in B');
268 assertHasSuperElement('fff; // in A'); 264 assertHasSuperElement('fff; // in A');
269 assertNoInterfaceElements(); 265 assertNoInterfaceMembers();
270 }); 266 });
271 } 267 }
272 268
273 test_super_getterByField() { 269 test_super_getterByField() {
274 addTestFile(''' 270 addTestFile('''
275 class A { 271 class A {
276 get fff => 0; // in A 272 get fff => 0; // in A
277 set fff(x) {} // in A 273 set fff(x) {} // in A
278 } 274 }
279 class B extends A { 275 class B extends A {
280 int fff; // in B 276 int fff; // in B
281 } 277 }
282 '''); 278 ''');
283 return prepareOverrides().then((_) { 279 return prepareOverrides().then((_) {
284 assertHasOverride('fff; // in B'); 280 assertHasOverride('fff; // in B');
285 assertHasSuperElement('fff => 0; // in A'); 281 assertHasSuperElement('fff => 0; // in A');
286 assertNoInterfaceElements(); 282 assertNoInterfaceMembers();
287 }); 283 });
288 } 284 }
289 285
290 test_super_getterByGetter() { 286 test_super_getterByGetter() {
291 addTestFile(''' 287 addTestFile('''
292 class A { 288 class A {
293 get fff => 0; // in A 289 get fff => 0; // in A
294 } 290 }
295 class B extends A { 291 class B extends A {
296 get fff => 0; // in B 292 get fff => 0; // in B
297 } 293 }
298 '''); 294 ''');
299 return prepareOverrides().then((_) { 295 return prepareOverrides().then((_) {
300 assertHasOverride('fff => 0; // in B'); 296 assertHasOverride('fff => 0; // in B');
301 assertHasSuperElement('fff => 0; // in A'); 297 assertHasSuperElement('fff => 0; // in A');
302 assertNoInterfaceElements(); 298 assertNoInterfaceMembers();
303 }); 299 });
304 } 300 }
305 301
306 test_super_method_direct() { 302 test_super_method_direct() {
307 addTestFile(''' 303 addTestFile('''
308 class A { 304 class A {
309 m() {} // in A 305 m() {} // in A
310 } 306 }
311 class B extends A { 307 class B extends A {
312 m() {} // in B 308 m() {} // in B
313 } 309 }
314 '''); 310 ''');
315 return prepareOverrides().then((_) { 311 return prepareOverrides().then((_) {
316 assertHasOverride('m() {} // in B'); 312 assertHasOverride('m() {} // in B');
317 assertHasSuperElement('m() {} // in A'); 313 assertHasSuperElement('m() {} // in A');
318 assertNoInterfaceElements(); 314 assertNoInterfaceMembers();
319 }); 315 });
320 } 316 }
321 317
322 test_super_method_indirect() { 318 test_super_method_indirect() {
323 addTestFile(''' 319 addTestFile('''
324 class A { 320 class A {
325 m() {} // in A 321 m() {} // in A
326 } 322 }
327 class B extends A { 323 class B extends A {
328 } 324 }
329 class C extends B { 325 class C extends B {
330 m() {} // in C 326 m() {} // in C
331 } 327 }
332 '''); 328 ''');
333 return prepareOverrides().then((_) { 329 return prepareOverrides().then((_) {
334 assertHasOverride('m() {} // in C'); 330 assertHasOverride('m() {} // in C');
335 assertHasSuperElement('m() {} // in A'); 331 assertHasSuperElement('m() {} // in A');
336 assertNoInterfaceElements(); 332 assertNoInterfaceMembers();
337 }); 333 });
338 } 334 }
339 335
340 test_super_setterBySetter() { 336 test_super_setterBySetter() {
341 addTestFile(''' 337 addTestFile('''
342 class A { 338 class A {
343 set fff(x) {} // in A 339 set fff(x) {} // in A
344 } 340 }
345 class B extends A { 341 class B extends A {
346 set fff(x) {} // in B 342 set fff(x) {} // in B
347 } 343 }
348 '''); 344 ''');
349 return prepareOverrides().then((_) { 345 return prepareOverrides().then((_) {
350 assertHasOverride('fff(x) {} // in B'); 346 assertHasOverride('fff(x) {} // in B');
351 assertHasSuperElement('fff(x) {} // in A'); 347 assertHasSuperElement('fff(x) {} // in A');
352 assertNoInterfaceElements(); 348 assertNoInterfaceMembers();
353 }); 349 });
354 } 350 }
355 } 351 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/computer/computer_overrides.dart ('k') | pkg/analysis_services/lib/constants.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698