| // Copyright (c) 2016, 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"; |
| |
| main() { |
| var assertsEnabled = false; |
| assert((assertsEnabled = true)); |
| if (!assertsEnabled) return; |
| |
| // TODO(rnystrom): Test cases where the first argument to assert() is a |
| // function. |
| |
| testAssertFails(); |
| testAssertDoesNotFail(); |
| testNullMessage(); |
| testDoesNotEvaluateMessageIfAssertSucceeds(); |
| testMessageExpressionThatThrows(); |
| testCallsToStringOnMessageLazily(); |
| } |
| |
| /// A class with a custom toString() that tracks when it is called. |
| class ToString { |
| bool calledToString = false; |
| |
| String toString() { |
| calledToString = true; |
| return "toString!"; |
| } |
| } |
| |
| testAssertFails() { |
| try { |
| assert(false, "Oops"); |
| Expect.fail("Assert should throw."); |
| } catch (e) { |
| Expect.isTrue(e.toString().contains("Oops")); |
| } |
| } |
| |
| testAssertDoesNotFail() { |
| try { |
| assert(true, "Oops"); |
| } catch (e) { |
| Expect.fail("Assert should not throw."); |
| } |
| } |
| |
| testNullMessage() { |
| try { |
| assert(false, null); |
| Expect.fail("Assert should throw."); |
| } catch (e) { |
| Expect.isTrue(e.toString().contains("is not true")); |
| } |
| } |
| |
| testDoesNotEvaluateMessageIfAssertSucceeds() { |
| try { |
| var evaluated = false; |
| assert(true, evaluated = true); |
| Expect.isFalse(evaluated); |
| } catch (e) { |
| Expect.fail("Assert should not throw."); |
| } |
| } |
| |
| testMessageExpressionThatThrows() { |
| try { |
| assert(false, throw "dang"); |
| Expect.fail("Should throw"); |
| } catch (e) { |
| Expect.equals(e, "dang"); |
| } |
| } |
| |
| testCallsToStringOnMessageLazily() { |
| var toString = new ToString(); |
| try { |
| assert(false, toString); |
| Expect.fail("Assert should throw."); |
| } catch (e) { |
| Expect.isFalse(toString.calledToString); |
| Expect.isTrue(e.toString().contains("Instance of 'ToString'")); |
| Expect.isFalse(toString.calledToString); |
| } |
| } |