| Index: tests/compiler/dart2js_extra/assert_with_message_test.dart
|
| diff --git a/tests/compiler/dart2js_extra/assert_with_message_test.dart b/tests/compiler/dart2js_extra/assert_with_message_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f3124f99b030f4628ba7ec05aa330537a5e7dbf7
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js_extra/assert_with_message_test.dart
|
| @@ -0,0 +1,108 @@
|
| +// Copyright (c) 2015, 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 "package:expect/expect.dart";
|
| +
|
| +@AssumeDynamic() @NoInline()
|
| +confuse(x) => x;
|
| +
|
| +
|
| +testFalse(name, fault) {
|
| + try {
|
| + fault();
|
| + } catch (e) {
|
| + Expect.isTrue(e is AssertionError, '$name: is AssertionError');
|
| + Expect.isTrue('$e'.contains('Mumble'), '$name: <<$e>> contains "Mumble"');
|
| + return;
|
| + }
|
| + Expect.fail('Expected assert to throw');
|
| +}
|
| +
|
| +test1() {
|
| + testFalse('constant false', () { assert(false, 'Mumble'); });
|
| +}
|
| +
|
| +test2() {
|
| + testFalse('constant function', () { assert(() => false, 'Mumble'); });
|
| +}
|
| +
|
| +test3() {
|
| + testFalse('variable false', () { assert(confuse(false), 'Mumble'); });
|
| +}
|
| +
|
| +test4() {
|
| + testFalse('variable function',
|
| + () { assert(confuse(() => false), 'Mumble'); });
|
| +}
|
| +
|
| +testTypeErrors() {
|
| + check(name, fault) {
|
| + try {
|
| + fault();
|
| + } catch (e) {
|
| + Expect.isTrue(e is TypeError,
|
| + 'name: <<$e>> (${e.runtimeType}) is TypeError');
|
| + return;
|
| + }
|
| + Expect.fail('Expected assert to throw');
|
| + }
|
| +
|
| + check('constant type error', () { assert(null, 'Mumble'); });
|
| + check('variable type error', () { assert(confuse(null), 'Mumble'); });
|
| + check('function type error', () { assert(confuse(() => null), 'Mumble'); });
|
| +}
|
| +
|
| +testMessageEffect1() {
|
| + var v = 1;
|
| + // Message is not evaluated on succeeding assert.
|
| + assert(confuse(true), '${v = 123}');
|
| + Expect.equals(1, v);
|
| +}
|
| +
|
| +testMessageEffect2() {
|
| + var v = 1;
|
| + try {
|
| + // Message is evaluated to produce AssertionError argument on failing
|
| + // assert.
|
| + assert(confuse(false), '${v = 123}');
|
| + } catch (e) {
|
| + Expect.equals(123, v);
|
| + Expect.isTrue('$e'.contains('123'), '<<$e>> contains "123"');
|
| + return;
|
| + }
|
| + Expect.fail('Expected assert to throw');
|
| +}
|
| +
|
| +testMessageEffect3() {
|
| + var v = 1;
|
| + try {
|
| + // Message is evaluated to produce AssertionError argument on failing
|
| + // assert.
|
| + assert(confuse(() => ++v > 100), '${++v}');
|
| + } catch (e) {
|
| + Expect.equals(3, v);
|
| + Expect.isTrue('$e'.contains('3'), '<<$e>> contains "3"');
|
| + return;
|
| + }
|
| + Expect.fail('Expected assert to throw');
|
| +}
|
| +
|
| +bool get checkedMode {
|
| + bool b = false;
|
| + assert((b = true));
|
| + return b;
|
| +}
|
| +
|
| +main() {
|
| + if (!checkedMode) return;
|
| +
|
| + test1();
|
| + test2();
|
| + test3();
|
| + test4();
|
| + testTypeErrors();
|
| + testMessageEffect1();
|
| + testMessageEffect2();
|
| + testMessageEffect3();
|
| +}
|
|
|