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/analyzer/test/src/task/strong/checker_test.dart

Issue 2981183003: fix #29766, fix #29782 - fix override checker's interface checking (Closed)
Patch Set: Created 3 years, 5 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analyzer.test.src.task.strong.checker_test; 5 library analyzer.test.src.task.strong.checker_test;
6 6
7 import 'package:test_reflective_loader/test_reflective_loader.dart'; 7 import 'package:test_reflective_loader/test_reflective_loader.dart';
8 8
9 import 'strong_test_helper.dart'; 9 import 'strong_test_helper.dart';
10 10
(...skipping 2460 matching lines...) Expand 10 before | Expand all | Expand 10 after
2471 var /*error:IMPLICIT_DYNAMIC_VARIABLE*/x1 = (<dynamic>[])[0]; 2471 var /*error:IMPLICIT_DYNAMIC_VARIABLE*/x1 = (<dynamic>[])[0];
2472 var /*error:IMPLICIT_DYNAMIC_VARIABLE*/x2, 2472 var /*error:IMPLICIT_DYNAMIC_VARIABLE*/x2,
2473 x3 = 42, 2473 x3 = 42,
2474 /*error:IMPLICIT_DYNAMIC_VARIABLE*/x4; 2474 /*error:IMPLICIT_DYNAMIC_VARIABLE*/x4;
2475 dynamic y0; 2475 dynamic y0;
2476 dynamic y1 = (<dynamic>[])[0]; 2476 dynamic y1 = (<dynamic>[])[0];
2477 '''); 2477 ''');
2478 await check(implicitDynamic: false); 2478 await check(implicitDynamic: false);
2479 } 2479 }
2480 2480
2481 test_interfaceOverridesAreAllChecked() {
2482 // Regression test for https://github.com/dart-lang/sdk/issues/29766
2483 return checkFile(r'''
2484 class B {
2485 set x(int y) {}
2486 }
2487 class C {
2488 set x(Object y) {}
2489 }
2490 class D implements B, C {
2491 /*error:INVALID_METHOD_OVERRIDE*/int x;
2492 }
2493 ''');
2494 }
2495
2496 test_interfacesFromMixinsAreChecked() {
2497 // Regression test for https://github.com/dart-lang/sdk/issues/29782
2498 return checkFile(r'''
2499 abstract class I {
2500 set x(int v);
2501 }
2502 abstract class M implements I {}
2503
2504 class C extends Object with M {
2505 /*error:INVALID_METHOD_OVERRIDE*/String x;
2506 }
2507
2508 abstract class M2 = Object with M;
2509
2510 class C2 extends Object with M2 {
2511 /*error:INVALID_METHOD_OVERRIDE*/String x;
2512 }
2513 ''');
2514 }
2515
2481 test_invalidOverrides_baseClassOverrideToChildInterface() async { 2516 test_invalidOverrides_baseClassOverrideToChildInterface() async {
2482 await checkFile(''' 2517 await checkFile('''
2483 class A {} 2518 class A {}
2484 class B {} 2519 class B {}
2485 2520
2486 abstract class I { 2521 abstract class I {
2487 m(A a); 2522 m(A a);
2488 } 2523 }
2489 2524
2490 class Base { 2525 class Base {
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
3317 await checkFile(r''' 3352 await checkFile(r'''
3318 import 'meta.dart'; 3353 import 'meta.dart';
3319 abstract class A { void test(A arg) { } } 3354 abstract class A { void test(A arg) { } }
3320 abstract class B extends A { void test(@checked B arg) { } } 3355 abstract class B extends A { void test(@checked B arg) { } }
3321 abstract class X implements A { } 3356 abstract class X implements A { }
3322 class C extends B with X { } 3357 class C extends B with X { }
3323 class D extends B implements A { } 3358 class D extends B implements A { }
3324 '''); 3359 ''');
3325 } 3360 }
3326 3361
3327 test_overrideNarrowsType_noDuplicateError() async { 3362 test_overrideNarrowsType_noDuplicateError() {
3328 // Regression test for https://github.com/dart-lang/sdk/issues/25232 3363 // Regression test for https://github.com/dart-lang/sdk/issues/25232
3329 _addMetaLibrary(); 3364 return checkFile(r'''
3330 await checkFile(r'''
3331 import 'meta.dart';
3332 abstract class A { void test(A arg) { } } 3365 abstract class A { void test(A arg) { } }
3333 abstract class B extends A { 3366 abstract class B extends A {
3334 /*error:INVALID_METHOD_OVERRIDE*/void test(B arg) { } 3367 /*error:INVALID_METHOD_OVERRIDE*/void test(B arg) { }
3335 } 3368 }
3336 abstract class X implements A { } 3369 abstract class X implements A { }
3337 class C extends B with X { } 3370
3371 class C extends B {}
3372
3373 // We treat "with X" as asking for another check.
3374 // This feels inconsistent.
3375 class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B with X { }
3338 3376
3339 // We treat "implements A" as asking for another check. 3377 // We treat "implements A" as asking for another check.
3340 // This feels inconsistent to me. 3378 // This feels inconsistent.
3341 class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { } 3379 class E /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { }
3342 '''); 3380 ''');
3343 } 3381 }
3344 3382
3345 test_privateOverride() async { 3383 test_privateOverride() async {
3346 addFile(''' 3384 addFile('''
3347 import 'main.dart' as main; 3385 import 'main.dart' as main;
3348 3386
3349 class Base { 3387 class Base {
3350 var f1; 3388 var f1;
3351 var _f2; 3389 var _f2;
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after
4201 class CheckerTest_Driver extends CheckerTest { 4239 class CheckerTest_Driver extends CheckerTest {
4202 @override 4240 @override
4203 bool get enableNewAnalysisDriver => true; 4241 bool get enableNewAnalysisDriver => true;
4204 4242
4205 @failingTest 4243 @failingTest
4206 @override 4244 @override
4207 test_covariantOverride_fields() async { 4245 test_covariantOverride_fields() async {
4208 await super.test_covariantOverride_fields(); 4246 await super.test_covariantOverride_fields();
4209 } 4247 }
4210 } 4248 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698