| // 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. |
| |
| // @dart = 2.7 |
| |
| 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, '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(); |
| } |