OLD | NEW |
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.analysis.notification.overrides; | 5 library test.analysis.notification.overrides; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/plugin/protocol/protocol.dart'; | 9 import 'package:analysis_server/plugin/protocol/protocol.dart'; |
10 import 'package:analysis_server/src/constants.dart'; | 10 import 'package:analysis_server/src/constants.dart'; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } | 64 } |
65 | 65 |
66 /** | 66 /** |
67 * Asserts that there are no overridden members from interfaces. | 67 * Asserts that there are no overridden members from interfaces. |
68 */ | 68 */ |
69 void assertNoInterfaceMembers() { | 69 void assertNoInterfaceMembers() { |
70 expect(override.interfaceMembers, isNull); | 70 expect(override.interfaceMembers, isNull); |
71 } | 71 } |
72 | 72 |
73 /** | 73 /** |
| 74 * Validates that there is no [Override] at the offset of [search]. |
| 75 * |
| 76 * If [length] is not specified explicitly, then length of an identifier |
| 77 * from [search] is used. |
| 78 */ |
| 79 void assertNoOverride(String search, [int length = -1]) { |
| 80 int offset = findOffset(search); |
| 81 if (length == -1) { |
| 82 length = findIdentifierLength(search); |
| 83 } |
| 84 findOverride(offset, length, false); |
| 85 } |
| 86 |
| 87 /** |
74 * Asserts that there are no overridden member from the superclass. | 88 * Asserts that there are no overridden member from the superclass. |
75 */ | 89 */ |
76 void assertNoSuperMember() { | 90 void assertNoSuperMember() { |
77 expect(override.superclassMember, isNull); | 91 expect(override.superclassMember, isNull); |
78 } | 92 } |
79 | 93 |
80 /** | 94 /** |
81 * Finds an [Override] with the given [offset] and [length]. | 95 * Finds an [Override] with the given [offset] and [length]. |
82 * | 96 * |
83 * If [exists] is `true`, then fails if such [Override] does not exist. | 97 * If [exists] is `true`, then fails if such [Override] does not exist. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 m() {} // in B | 144 m() {} // in B |
131 } | 145 } |
132 '''); | 146 '''); |
133 await waitForTasksFinished(); | 147 await waitForTasksFinished(); |
134 await prepareOverrides(); | 148 await prepareOverrides(); |
135 assertHasOverride('m() {} // in B'); | 149 assertHasOverride('m() {} // in B'); |
136 assertNoSuperMember(); | 150 assertNoSuperMember(); |
137 assertHasInterfaceMember('m() {} // in A'); | 151 assertHasInterfaceMember('m() {} // in A'); |
138 } | 152 } |
139 | 153 |
| 154 test_BAD_fieldByMethod() async { |
| 155 addTestFile(''' |
| 156 class A { |
| 157 int fff; // in A |
| 158 } |
| 159 class B extends A { |
| 160 fff() {} // in B |
| 161 } |
| 162 '''); |
| 163 await prepareOverrides(); |
| 164 assertNoOverride('fff() {} // in B'); |
| 165 } |
| 166 |
| 167 test_BAD_getterByMethod() async { |
| 168 addTestFile(''' |
| 169 class A { |
| 170 get fff => null; |
| 171 } |
| 172 class B extends A { |
| 173 fff() {} |
| 174 } |
| 175 '''); |
| 176 await prepareOverrides(); |
| 177 assertNoOverride('fff() {}'); |
| 178 } |
| 179 |
| 180 test_BAD_getterBySetter() async { |
| 181 addTestFile(''' |
| 182 class A { |
| 183 get fff => null; |
| 184 } |
| 185 class B extends A { |
| 186 set fff(x) {} |
| 187 } |
| 188 '''); |
| 189 await prepareOverrides(); |
| 190 assertNoOverride('fff(x) {}'); |
| 191 } |
| 192 |
| 193 test_BAD_methodByField() async { |
| 194 addTestFile(''' |
| 195 class A { |
| 196 fff() {} // in A |
| 197 } |
| 198 class B extends A { |
| 199 int fff; // in B |
| 200 } |
| 201 '''); |
| 202 await prepareOverrides(); |
| 203 assertNoOverride('fff; // in B'); |
| 204 } |
| 205 |
| 206 test_BAD_methodByGetter() async { |
| 207 addTestFile(''' |
| 208 class A { |
| 209 fff() {} |
| 210 } |
| 211 class B extends A { |
| 212 int get fff => null; |
| 213 } |
| 214 '''); |
| 215 await prepareOverrides(); |
| 216 assertNoOverride('fff => null'); |
| 217 } |
| 218 |
| 219 test_BAD_methodBySetter() async { |
| 220 addTestFile(''' |
| 221 class A { |
| 222 fff(x) {} // A |
| 223 } |
| 224 class B extends A { |
| 225 set fff(x) {} // B |
| 226 } |
| 227 '''); |
| 228 await prepareOverrides(); |
| 229 assertNoOverride('fff(x) {} // B'); |
| 230 } |
| 231 |
| 232 test_BAD_setterByGetter() async { |
| 233 addTestFile(''' |
| 234 class A { |
| 235 set fff(x) {} |
| 236 } |
| 237 class B extends A { |
| 238 get fff => null; |
| 239 } |
| 240 '''); |
| 241 await prepareOverrides(); |
| 242 assertNoOverride('fff => null;'); |
| 243 } |
| 244 |
| 245 test_BAD_setterByMethod() async { |
| 246 addTestFile(''' |
| 247 class A { |
| 248 set fff(x) {} // A |
| 249 } |
| 250 class B extends A { |
| 251 fff(x) {} // B |
| 252 } |
| 253 '''); |
| 254 await prepareOverrides(); |
| 255 assertNoOverride('fff(x) {} // B'); |
| 256 } |
| 257 |
140 test_definedInInterface_ofInterface() async { | 258 test_definedInInterface_ofInterface() async { |
141 addTestFile(''' | 259 addTestFile(''' |
142 class A { | 260 class A { |
143 m() {} // in A | 261 m() {} // in A |
144 } | 262 } |
145 class B implements A {} | 263 class B implements A {} |
146 class C implements B { | 264 class C implements B { |
147 m() {} // in C | 265 m() {} // in C |
148 } | 266 } |
149 '''); | 267 '''); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 class B extends A { | 429 class B extends A { |
312 get fff => 0; // in B | 430 get fff => 0; // in B |
313 } | 431 } |
314 '''); | 432 '''); |
315 await prepareOverrides(); | 433 await prepareOverrides(); |
316 assertHasOverride('fff => 0; // in B'); | 434 assertHasOverride('fff => 0; // in B'); |
317 assertHasSuperElement('fff; // in A'); | 435 assertHasSuperElement('fff; // in A'); |
318 assertNoInterfaceMembers(); | 436 assertNoInterfaceMembers(); |
319 } | 437 } |
320 | 438 |
321 test_super_fieldByMethod() async { | |
322 addTestFile(''' | |
323 class A { | |
324 int fff; // in A | |
325 } | |
326 class B extends A { | |
327 fff() {} // in B | |
328 } | |
329 '''); | |
330 await prepareOverrides(); | |
331 assertHasOverride('fff() {} // in B'); | |
332 assertHasSuperElement('fff; // in A'); | |
333 assertNoInterfaceMembers(); | |
334 } | |
335 | |
336 test_super_fieldBySetter() async { | 439 test_super_fieldBySetter() async { |
337 addTestFile(''' | 440 addTestFile(''' |
338 class A { | 441 class A { |
339 int fff; // in A | 442 int fff; // in A |
340 } | 443 } |
341 class B extends A { | 444 class B extends A { |
342 set fff(x) {} // in B | 445 set fff(x) {} // in B |
343 } | 446 } |
344 '''); | 447 '''); |
345 await prepareOverrides(); | 448 await prepareOverrides(); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 class B extends A { | 535 class B extends A { |
433 set fff(x) {} // in B | 536 set fff(x) {} // in B |
434 } | 537 } |
435 '''); | 538 '''); |
436 await prepareOverrides(); | 539 await prepareOverrides(); |
437 assertHasOverride('fff(x) {} // in B'); | 540 assertHasOverride('fff(x) {} // in B'); |
438 assertHasSuperElement('fff(x) {} // in A'); | 541 assertHasSuperElement('fff(x) {} // in A'); |
439 assertNoInterfaceMembers(); | 542 assertNoInterfaceMembers(); |
440 } | 543 } |
441 } | 544 } |
OLD | NEW |