| // 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"; | |
| @pragma('dart2js:assumeDynamic') | |
| @pragma('dart2js: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('variable false', () { | |
| 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 as dynamic, '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 assertionsEnabled { | |
| bool b = false; | |
| assert((b = true)); | |
| return b; | |
| } | |
| main() { | |
| if (!assertionsEnabled) return; | |
| test1(); | |
| test2(); | |
| testTypeErrors(); | |
| testMessageEffect1(); | |
| testMessageEffect2(); | |
| testMessageEffect3(); | |
| } |