| // Copyright (c) 2013, 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. | |
| // Test correct source positions in stack trace with optimized functions. | |
| import "package:expect/expect.dart"; | |
| import "package:expect/variations.dart"; | |
| // (1) Test normal exception. | |
| foo(x) => bar(x); | |
| bar(x) { | |
| if (x == null) throw 42; // throw at position 12:18 | |
| return x + 1; | |
| } | |
| test1() { | |
| // First unoptimized. | |
| try { | |
| foo(null); | |
| Expect.fail("Unreachable"); | |
| } catch (e, stacktrace) { | |
| String s = stacktrace.toString(); | |
| print(s); | |
| Expect.isFalse(s.contains("-1:-1"), "A"); | |
| if (symbolicUnminifiedStackTraces) { | |
| RegExp regex = new RegExp( | |
| "optimized_stacktrace_line_test(_none|_01)*\.dart:12", | |
| ); | |
| Expect.isTrue(regex.hasMatch(s), "B"); | |
| } | |
| } | |
| // Optimized. | |
| for (var i = 0; i < 10000; i++) foo(42); | |
| try { | |
| foo(null); | |
| Expect.fail("Unreachable"); | |
| } catch (e, stacktrace) { | |
| String s = stacktrace.toString(); | |
| print(s); | |
| Expect.isFalse(s.contains("-1:-1"), "C"); | |
| if (symbolicUnminifiedStackTraces) { | |
| RegExp regex = new RegExp( | |
| "optimized_stacktrace_line_test(_none|_01)*\.dart:12", | |
| ); | |
| Expect.isTrue(regex.hasMatch(s), "D"); | |
| } | |
| } | |
| } | |
| // (2) Test checked mode exceptions. | |
| maximus(x) => moritz(x); | |
| moritz(x) { | |
| if (x == 333) return (42 as bool) ? 0 : 1; | |
| if (x == 777) { | |
| bool b = x; | |
| return b; | |
| } | |
| return x + 1; | |
| } | |
| test2() { | |
| for (var i = 0; i < 100000; i++) maximus(42); | |
| try { | |
| maximus(333); | |
| } catch (e, stacktrace) { | |
| String s = stacktrace.toString(); | |
| print(s); | |
| if (symbolicUnminifiedStackTraces) { | |
| Expect.isTrue(s.contains("maximus"), "E"); | |
| Expect.isTrue(s.contains("moritz"), "F"); | |
| } | |
| Expect.isFalse(s.contains("-1:-1"), "G"); | |
| } | |
| try { | |
| maximus(777); | |
| } catch (e, stacktrace) { | |
| String s = stacktrace.toString(); | |
| print(s); | |
| if (symbolicUnminifiedStackTraces) { | |
| Expect.isTrue(s.contains("maximus"), "H"); | |
| Expect.isTrue(s.contains("moritz"), "I"); | |
| } | |
| Expect.isFalse(s.contains("-1:-1"), "J"); | |
| } | |
| } | |
| main() { | |
| test1(); | |
| test2(); | |
| } |