|  | // 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(); | 
|  | } |