Files
sdk/runtime/tests/vm/dart_2/optimized_stacktrace_line_test.dart
T
Johnni Winther 43c00097c2 [cfe] Remove isOptOutTest work-around
Change-Id: I7dd125508bba256eb4c78b02fb24e433f45b129a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/205420
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2021-08-04 10:44:00 +00:00

88 lines
2.0 KiB
Dart

// 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.
// @dart = 2.9
// Test correct source positions in stack trace with optimized functions.
import "package:expect/expect.dart";
// (1) Test normal exception.
foo(x) => bar(x);
bar(x) {
if (x == null) throw 42; // throw at position 15: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");
RegExp regex =
new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:15");
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");
RegExp regex =
new RegExp("optimized_stacktrace_line_test(_none|_01)*\.dart:15");
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);
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);
Expect.isTrue(s.contains("maximus"), "H");
Expect.isTrue(s.contains("moritz"), "I");
Expect.isFalse(s.contains("-1:-1"), "J");
}
}
main() {
test1();
test2();
}