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

Side by Side Diff: tests/language/generic_field_mixin6_test.dart

Issue 267153002: Support general handling of type variables by substituting types into the current context. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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
1 // Copyright (c) 2013, 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 checked_mode_helper; 5 // Test that generic types in mixins are handled.
6 6
7 import 'package:expect/expect.dart'; 7 import 'package:expect/expect.dart';
8 8
9 class M<T> {
10 T field = 0; /// 01: static type warning
11 }
12 class A<U> {}
13 class C1<V> = Object with M<V>;
14 class C2 = Object with M<int>;
15 class C3 = Object with M<String>;
16
17 main() {
18 checkNoDynamicTypeError(() => new C1<int>()); /// 01: continued
19 checkDynamicTypeError(() => new C1<String>()); /// 01: continued
20
21 checkNoDynamicTypeError(() => new C2()); /// 01: continued
22
23 checkDynamicTypeError(() => new C3()); /// 01: continued
24 }
25
9 /// Returns `true` if the program is running in checked mode. 26 /// Returns `true` if the program is running in checked mode.
10 bool inCheckedMode() { 27 bool inCheckedMode() {
11 try { 28 try {
12 var i = 42; 29 var i = 42;
13 String s = i; 30 String s = i;
14 } on TypeError catch (e) { 31 } on TypeError catch (e) {
15 return true; 32 return true;
16 } 33 }
17 return false; 34 return false;
18 } 35 }
19 36
20 /// Checks that a dynamic type error is thrown if and only if [f] is executed in 37 /// Checks that a dynamic type error is thrown if and only if [f] is executed in
21 /// checked mode and [expectTypeError] is `true`.
22 void testDynamicTypeError(bool expectTypeError, f(), [String message]) {
23 if (expectTypeError) {
24 checkDynamicTypeError(f, message);
25 } else {
26 checkNoDynamicTypeError(f, message);
27 }
28 }
29
30 /// Checks that a dynamic type error is thrown if and only if [f] is executed in
31 /// checked mode. 38 /// checked mode.
32 void checkDynamicTypeError(f(), [String message]) { 39 void checkDynamicTypeError(f(), [String message]) {
33 message = message != null ? ': $message' : ''; 40 message = message != null ? ': $message' : '';
34 try { 41 try {
35 f(); 42 f();
36 Expect.isFalse(inCheckedMode(), 43 Expect.isFalse(inCheckedMode(),
37 'Missing type error in checked mode$message.'); 44 'Missing type error in checked mode$message.');
38 } on TypeError catch (e) { 45 } on TypeError catch (e) {
39 Expect.isTrue(inCheckedMode(), 46 Expect.isTrue(inCheckedMode(),
40 'Unexpected type error in production mode.'); 47 'Unexpected type error in production mode.');
41 } 48 }
42 } 49 }
43 50
44 /// Checks that no dynamic type error is thrown when [f] is executed regardless 51 /// Checks that no dynamic type error is thrown when [f] is executed regardless
45 /// of execution mode. 52 /// of execution mode.
46 void checkNoDynamicTypeError(f(), [String message]) { 53 void checkNoDynamicTypeError(f(), [String message]) {
47 message = message != null ? ': $message' : ''; 54 message = message != null ? ': $message' : '';
48 try { 55 try {
49 f(); 56 f();
50 } on TypeError catch (e) { 57 } on TypeError catch (e) {
51 String mode = inCheckedMode() ? 'checked mode' : 'production mode'; 58 String mode = inCheckedMode() ? 'checked mode' : 'production mode';
52 Expect.fail('Unexpected type error in $mode$message.'); 59 Expect.fail('Unexpected type error in $mode$message.');
53 } 60 }
54 } 61 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698