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

Side by Side Diff: tests/language_strong/generic_methods_overriding_test.dart

Issue 3001803002: Migrate block 114 (and some of 113). (Closed)
Patch Set: Tweak app_jit status. Created 3 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
OLDNEW
(Empty)
1 // Copyright (c) 2017, 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 // Test that generic methods can be overloaded (a) with widened type bounds, and
6 // (b) using the bound as the type of the parameter in the overloaded method.
7
8 library generic_methods_overriding_test;
9
10 import "package:expect/expect.dart";
11
12 class X {}
13
14 class Y extends X {}
15
16 class Z extends Y {}
17
18 class C {
19 String fun<T extends Y>(T t) => "C";
20 }
21
22 class D extends C {
23 String fun<T extends X>(T t) => "D"; //# 01: compile-time error
24 String fun<T extends Y>(T t) => "D"; //# 02: ok
25 }
26
27 class E extends C {
28 String fun<T>(Y y) => "E"; //# 03: compile-time error
29 String fun<T extends Y>(Y y) => "E"; //# 04: ok
30 }
31
32 class F extends C {
33 String foobar(Z z) {
34 return "FZ";
35 }
36
37 String fun<T extends Y>(T t) {
38 if (t is Z) {
39 return this.foobar(t as Z); //# 05: ok
40 return this.foobar(t); //# 06: ok
41 }
42 return "FY";
43 }
44 }
45
46 main() {
47 Y y = new Y();
48 Z z = new Z();
49
50 C c = new C();
51 D d = new D();
52 E e = new E();
53 F f = new F();
54
55 Expect.equals(c.fun<Y>(y), "C");
56 Expect.equals(d.fun<Y>(y), "D"); //# 02: continued
57 Expect.equals(e.fun<Y>(y), "E"); //# 04: continued
58 Expect.equals(f.fun<Y>(y), "FY"); //# 05: continued
59 Expect.equals(f.fun<Z>(z), "FZ"); //# 05: continued
60 Expect.equals(f.fun<Y>(y), "FY"); //# 06: continued
61 Expect.equals(f.fun<Z>(z), "FZ"); //# 06: continued
62 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698