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..58b7796cd0674c9c06a6699800ccdb428934bd5e |
--- /dev/null |
+++ b/tests/compiler/dart2js_extra/assert_with_message_test.dart |
@@ -0,0 +1,109 @@ |
+// 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. |
+// SharedOptions=--assert-message |
+ |
+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(); |
+} |