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

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: fix 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
2516 test_interfacesFromMixinsUsedTwiceAreChecked() {
2517 // Regression test for https://github.com/dart-lang/sdk/issues/29782
2518 return checkFile(r'''
2519 abstract class I<E> {
2520 set x(E v);
2521 }
2522 abstract class M<E> implements I<E> {}
2523
2524 class C extends Object with M<int> {
2525 /*error:INVALID_METHOD_OVERRIDE*/String x;
2526 }
2527
2528 abstract class D extends Object with M<num> {}
2529 class E extends D with M<int> {
2530 /*error:INVALID_METHOD_OVERRIDE*/int x;
2531 }
2532 class F extends D with M<int> {
2533 num x;
2534 }
2535 ''');
2536 }
2537
2481 test_invalidOverrides_baseClassOverrideToChildInterface() async { 2538 test_invalidOverrides_baseClassOverrideToChildInterface() async {
2482 await checkFile(''' 2539 await checkFile('''
2483 class A {} 2540 class A {}
2484 class B {} 2541 class B {}
2485 2542
2486 abstract class I { 2543 abstract class I {
2487 m(A a); 2544 m(A a);
2488 } 2545 }
2489 2546
2490 class Base { 2547 class Base {
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
3317 await checkFile(r''' 3374 await checkFile(r'''
3318 import 'meta.dart'; 3375 import 'meta.dart';
3319 abstract class A { void test(A arg) { } } 3376 abstract class A { void test(A arg) { } }
3320 abstract class B extends A { void test(@checked B arg) { } } 3377 abstract class B extends A { void test(@checked B arg) { } }
3321 abstract class X implements A { } 3378 abstract class X implements A { }
3322 class C extends B with X { } 3379 class C extends B with X { }
3323 class D extends B implements A { } 3380 class D extends B implements A { }
3324 '''); 3381 ''');
3325 } 3382 }
3326 3383
3327 test_overrideNarrowsType_noDuplicateError() async { 3384 test_overrideNarrowsType_noDuplicateError() {
3328 // Regression test for https://github.com/dart-lang/sdk/issues/25232 3385 // Regression test for https://github.com/dart-lang/sdk/issues/25232
3329 _addMetaLibrary(); 3386 return checkFile(r'''
3330 await checkFile(r'''
3331 import 'meta.dart';
3332 abstract class A { void test(A arg) { } } 3387 abstract class A { void test(A arg) { } }
3333 abstract class B extends A { 3388 abstract class B extends A {
3334 /*error:INVALID_METHOD_OVERRIDE*/void test(B arg) { } 3389 /*error:INVALID_METHOD_OVERRIDE*/void test(B arg) { }
3335 } 3390 }
3336 abstract class X implements A { } 3391 abstract class X implements A { }
3337 class C extends B with X { } 3392
3393 class C extends B {}
3394
3395 // We treat "with X" as asking for another check.
3396 // This feels inconsistent.
3397 class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B with X { }
3338 3398
3339 // We treat "implements A" as asking for another check. 3399 // We treat "implements A" as asking for another check.
3340 // This feels inconsistent to me. 3400 // This feels inconsistent.
3341 class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { } 3401 class E /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { }
3342 '''); 3402 ''');
3343 } 3403 }
3344 3404
3345 test_privateOverride() async { 3405 test_privateOverride() async {
3346 addFile(''' 3406 addFile('''
3347 import 'main.dart' as main; 3407 import 'main.dart' as main;
3348 3408
3349 class Base { 3409 class Base {
3350 var f1; 3410 var f1;
3351 var _f2; 3411 var _f2;
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after
4201 class CheckerTest_Driver extends CheckerTest { 4261 class CheckerTest_Driver extends CheckerTest {
4202 @override 4262 @override
4203 bool get enableNewAnalysisDriver => true; 4263 bool get enableNewAnalysisDriver => true;
4204 4264
4205 @failingTest 4265 @failingTest
4206 @override 4266 @override
4207 test_covariantOverride_fields() async { 4267 test_covariantOverride_fields() async {
4208 await super.test_covariantOverride_fields(); 4268 await super.test_covariantOverride_fields();
4209 } 4269 }
4210 } 4270 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698