| 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 | 
|---|