| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| library checked_mode_helper; |
| |
| import 'package:expect/expect.dart'; |
| |
| /// Returns `true` if the program is running in checked mode. |
| bool inCheckedMode() { |
| try { |
| var i = 42; |
| String s = i; |
| } on TypeError catch (e) { |
| return true; |
| } |
| return false; |
| } |
| |
| /// Checks that a dynamic type error is thrown if and only if [f] is executed in |
| /// checked mode and [expectTypeError] is `true`. |
| void testDynamicTypeError(bool expectTypeError, f(), [String message]) { |
| if (expectTypeError) { |
| checkDynamicTypeError(f, message); |
| } else { |
| checkNoDynamicTypeError(f, message); |
| } |
| } |
| |
| /// Checks that a dynamic type error is thrown if and only if [f] is executed in |
| /// checked mode. |
| void checkDynamicTypeError(f(), [String message]) { |
| message = message != null ? ': $message' : ''; |
| try { |
| f(); |
| Expect.isFalse(inCheckedMode(), |
| 'Missing type error in checked mode$message.'); |
| } on TypeError catch (e) { |
| Expect.isTrue(inCheckedMode(), |
| 'Unexpected type error in production mode.'); |
| } |
| } |
| |
| /// Checks that no dynamic type error is thrown when [f] is executed regardless |
| /// of execution mode. |
| void checkNoDynamicTypeError(f(), [String message]) { |
| message = message != null ? ': $message' : ''; |
| try { |
| f(); |
| } on TypeError catch (e) { |
| String mode = inCheckedMode() ? 'checked mode' : 'production mode'; |
| Expect.fail('Unexpected type error in $mode$message.'); |
| } |
| } |