blob: b8553b672c585b846cd9bb57677e0567183289d9 [file] [log] [blame]
// Copyright (c) 2026, 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:js_interop';
import 'package:expect/expect.dart';
@JS()
external void eval(String code);
void doThrow() {
eval('throw new Error();');
}
void foo() {
doThrow();
}
void bar() {
foo();
}
void main() {
try {
bar();
Expect.fail('JS exception should be thrown and caught');
} catch (e, s) {
List<String> lines = s.toString().split('\n');
// Chrome includes an 'Error' message at the start of each stack.
if (lines[0].startsWith('Error')) {
lines = lines.skip(1).toList();
}
// 'eval' frame is consistently at top of stack across all browsers.
Expect.isTrue(lines[0].contains('eval'));
}
}