dd6dc29c21
This change mechanically copies runtime/tests/vm/dart -> runtime/tests/vm/dart_2 in preparation for the migration of runtime/tests/vm/dart to NNBD. Corresponding statuses in vm.status are duplicated. Added vm_nnbd builder tag for NNBD bots. vm/dart/* tests are allowed to run only on vm_nnbd builders. vm/dart_2/* tests are allowed to run only on non-vm_nnbd builders. Issue: https://github.com/dart-lang/sdk/issues/41314 Change-Id: I079da92da17960605f37c1c0e28e48362b236739 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149485 Reviewed-by: Régis Crelier <regis@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
84 lines
1.9 KiB
Dart
84 lines
1.9 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.
|
|
// 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 11: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:11");
|
|
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:11");
|
|
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();
|
|
}
|