| // 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.9 |
| |
| import "dart:convert" show LineSplitter; |
| |
| import "package:expect/expect.dart"; |
| |
| void main() { |
| var st0; |
| var st1; |
| // Primitive way to get stack trace,. |
| try { |
| throw 0; |
| } catch (_, s) { |
| st0 = s; |
| } |
| st1 = StackTrace.current; |
| |
| var st0s = findMain(st0); |
| var st1s = findMain(st1); |
| // Stack traces are not equal (contains at least a different line number, |
| // and possible different frame numbers). |
| // They are *similar*, so check that they agree on everything but numbers. |
| var digits = new RegExp(r"\d+"); |
| Expect.equals(st0s.replaceAll(digits, "0"), st1s.replaceAll(digits, "0")); |
| } |
| |
| String findMain(StackTrace stack) { |
| var string = "$stack"; |
| var lines = LineSplitter.split(string).toList(); |
| while (lines.isNotEmpty && !lines.first.contains("main")) { |
| lines.removeAt(0); |
| } |
| return lines.join("\n"); |
| } |