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

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

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

Powered by Google App Engine
This is Rietveld 408576698