mirror of
https://github.com/dart-lang/sdk
synced 2024-09-06 00:59:09 +00:00
![Ömer Sinan Ağacan](/assets/img/avatar_default.png)
The test stacktrace_current compares two stack traces by masking any line numbers. With dart2wasm, V8 shows function offsets instead of line numbers, in hex, which causes the test to fail with unrelated changes. This updates the regex to mask hex numbers as well, making the test stable with unrelated dart2wasm changes. Change-Id: I8dd951d4bf29fe39b6ec5d8de7bf2c9c37a5b5b3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275600 Reviewed-by: Aske Simon Christensen <askesc@google.com> Commit-Queue: Ömer Ağacan <omersa@google.com>
39 lines
1.1 KiB
Dart
39 lines
1.1 KiB
Dart
// 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 "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
|
|
// possibly different frame numbers).
|
|
// They are *similar*, so check that they agree on everything but numbers.
|
|
// Also match hex digits as V8 (used by dart2wasm) shows function offsets in
|
|
// hex.
|
|
final digits = new RegExp(r"(0[xX][0-9a-fA-F]+)|\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");
|
|
}
|