| // Copyright (c) 2016, 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. |
| |
| import "dart:async"; |
| |
| import "package:async_helper/async_helper.dart"; |
| import "package:expect/expect.dart"; |
| |
| // TODO(rnystrom): Unify with assert_with_message_test.dart. |
| |
| main() { |
| // Only run with asserts enabled mode. |
| bool assertsEnabled = false; |
| assert(assertsEnabled = true); |
| if (!assertsEnabled) return; |
| |
| // Basics. |
| assert(true, ""); |
| |
| dynamic x = null; |
| // Successful asserts won't execute message. |
| assert(true, x + 42); |
| assert(true, throw "unreachable"); |
| |
| // Can use any value as message. |
| try { |
| assert(false, 42); |
| } on AssertionError catch (e) { |
| Expect.equals(42, e.message); |
| } |
| |
| try { |
| assert(false, ""); |
| } on AssertionError catch (e) { |
| Expect.equals("", e.message); |
| } |
| |
| try { |
| assert(false, null); |
| } on AssertionError catch (e) { |
| Expect.equals(null, e.message); |
| } |
| |
| // Test expression can throw. |
| try { |
| assert(throw "test", throw "message"); |
| } on String catch (e) { |
| Expect.equals("test", e); |
| } |
| |
| // Message expression can throw. |
| try { |
| assert(false, throw "message"); |
| } on String catch (e) { |
| Expect.equals("message", e); |
| } |
| |
| // Failing asserts evaluate message after test. |
| var list = []; |
| try { |
| assert((list..add(1)).isEmpty, (list..add(3)).length); |
| } on AssertionError catch (e) { |
| Expect.equals(2, e.message); |
| Expect.listEquals([1, 3], list); |
| } |
| |
| asyncStart(); |
| asyncTests().then((_) { |
| asyncEnd(); |
| }); |
| } |
| |
| Future asyncTests() async { |
| // You can await in both condition and message. |
| assert(true, await 0); |
| assert(await true, 1); |
| assert(await true, await 2); |
| |
| // Successful asserts won't await/evaluate message. |
| Future unreachable() => throw "unreachable"; |
| assert(await true, await unreachable()); |
| |
| try { |
| assert(false, await 3); |
| } on AssertionError catch (e) { |
| Expect.equals(3, e.message); |
| } |
| |
| var falseFuture = new Future.value(false); |
| var numFuture = new Future.value(4); |
| |
| try { |
| assert(await falseFuture, await numFuture); |
| } on AssertionError catch (e) { |
| Expect.equals(4, e.message); |
| } |
| |
| try { |
| assert(await falseFuture, await new Future.error("error")); |
| } on String catch (e) { |
| Expect.equals("error", e); |
| } |
| } |