Chromium Code Reviews| Index: tests/language/assert_message_test.dart |
| diff --git a/tests/language/assert_message_test.dart b/tests/language/assert_message_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..edac14db01c84d1b19a7b7b272885374cab93069 |
| --- /dev/null |
| +++ b/tests/language/assert_message_test.dart |
| @@ -0,0 +1,99 @@ |
| +// 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. |
| + |
| +// SharedOptions=--assert-message |
| + |
| +import "dart:async"; |
| + |
| +import "package:async_helper/async_helper.dart"; |
| +import "package:expect/expect.dart"; |
| + |
| +main() { |
| + // Only run with asserts enabled mode. |
| + bool assertsEnabled = false; |
| + assert(assertsEnabled = true); |
| + if (!assertsEnabled) return; |
| + |
| + // Basics. |
| + assert(true, ""); |
| + assert(() => true, ""); |
| + |
| + int x = null; |
| + // Successful asserts won't execute message. |
|
regis
2016/12/13 23:26:51
Is this still true when await is involved?
hausner
2016/12/14 16:59:35
Yes. Added test case below in the async test cases
|
| + 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); |
|
regis
2016/12/13 23:26:51
How about
assert(await true, throw "unreachable");
hausner
2016/12/14 16:59:35
Done.
|
| + |
| + 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); |
| + } |
| +} |