// Copyright (c) 2018, 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"; class Test1 { void bar(bool condition) { if (condition) { Expect.fail('Should not reach here'); } Expect.fail('Should throw earlier'); } } void test1(bool condition) { Test1 obj = new Test1(); obj.bar(condition); } class Test2 { bool condition; Test2(this.condition); void bar() { if (!condition) { Expect.fail('Should not reach here'); } Expect.fail('Should throw earlier'); } } void test2(bool condition) { Test2 obj = new Test2(condition); obj.bar(); } class Test3 { bool condition; Test3(this.condition); bool bazz() => condition; void bar() { while (bazz() || bazz()) { Expect.fail('Should not reach here'); } Expect.fail('Should throw earlier'); } } void test3(bool condition) { Test3 obj = new Test3(condition); obj.bar(); } const bool test4Condition = null; void test4(bool condition) { if (test4Condition) { Expect.fail('Should not reach here'); } Expect.fail('Should throw earlier'); } void test5(bool condition) { if (null) { Expect.fail('Should not reach here'); } Expect.fail('Should throw earlier'); } void testStackTrace(void testCase(bool condition), List lineNumbers) { try { testCase(null); Expect.fail("Using null in a bool condition should throw TypeError"); } catch (e, stacktrace) { print('--------- exception ---------'); print(e); print('-------- stack trace --------'); print(stacktrace); print('-----------------------------'); Expect.isTrue(e is AssertionError); Expect.equals( 'Failed assertion: boolean expression must not be null', e.toString()); final String st = stacktrace.toString(); for (int lineNum in lineNumbers) { String item = '.dart:$lineNum'; Expect.isTrue(st.contains(item), "Stack trace doesn't contain $item"); } print('OK'); } } main() { testStackTrace(test1, [9, 18]); testStackTrace(test2, [26, 35]); testStackTrace(test3, [45, 54]); testStackTrace(test4, [60]); //# 01: ok testStackTrace(test5, [67]); //# 02: ok }