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

Side by Side Diff: tests/compiler/dart2js/flatten_test.dart

Issue 1035443002: Implement new flatten specification. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comment. Created 5 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013, 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 library subtype_test;
6
7 import 'package:expect/expect.dart';
8 import "package:async_helper/async_helper.dart";
9 import 'type_test_helper.dart';
10 import 'package:compiler/src/dart_types.dart';
11 import "package:compiler/src/elements/elements.dart"
12 show Element, ClassElement;
13
14 void main() {
15 asyncTest(() => TypeEnvironment.create(r"""
16 abstract class F<T> implements Future<T> {}
17 abstract class G<T> implements Future<G<T>> {}
18 abstract class H<T> implements Future<H<H<T>>> {}
19 """).then((env) {
20
21 void check(DartType T, DartType expectedFlattenedType) {
22 DartType flattenedType = env.flatten(T);
23 Expect.equals(expectedFlattenedType, flattenedType,
24 "Unexpected flattening of '$T' = '$flattenedType',"
25 "expected '$expectedFlattenedType'.");
26 }
27
28 ClassElement Future_ = env.getElement('Future');
29 ClassElement F = env.getElement('F');
30 ClassElement G = env.getElement('G');
31 ClassElement H = env.getElement('H');
32 DartType int_ = env['int'];
33 DartType dynamic_ = env['dynamic'];
34 DartType Future_int = instantiate(Future_, [int_]);
35 DartType F_int = instantiate(F, [int_]);
36 DartType G_int = instantiate(G, [int_]);
37 DartType H_int = instantiate(H, [int_]);
38 DartType H_H_int = instantiate(H, [H_int]);
39
40 // flatten(int) = int
41 check(int_, int_);
42
43 // flatten(Future) = dynamic
44 check(Future_.rawType, dynamic_);
45
46 // flatten(Future<int>) = int
47 check(Future_int, int_);
48
49 // flatten(Future<Future<int>>) = int
50 check(instantiate(Future_, [Future_int]), int_);
51
52 // flatten(F) = dynamic
53 check(F.rawType, dynamic_);
54
55 // flatten(F<int>) = int
56 check(F_int, int_);
57
58 // flatten(F<Future<int>>) = Future<int>
59 check(instantiate(F, [Future_int]), Future_int);
60
61 // flatten(G) = G
62 check(G.rawType, G.rawType);
63
64 // flatten(G<int>) = G<int>
65 check(G_int, G_int);
66
67 // flatten(H) = H<H>
68 check(H.rawType, instantiate(H, [H.rawType]));
69
70 // flatten(H<int>) = H<H<int>>
71 check(H_int, H_H_int);
72
73 // flatten(Future<F<int>>) = int
74 check(instantiate(Future_, [F_int]), int_);
75
76 // flatten(Future<G<int>>) = int
77 check(instantiate(Future_, [G_int]), G_int);
78
79 // flatten(Future<H<int>>) = int
80 check(instantiate(Future_, [H_int]), H_H_int);
81 }));
82 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698