| // 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); |
| |
| @JS() |
| external void throwError(); |
| |
| @JS() |
| external void throwNonError(); |
| |
| @JS() |
| external void throwNull(); |
| |
| @JS() |
| external void throwUndefined(); |
| |
| void main() { |
| eval(''' |
| self.throwNonError = function() { |
| throw 'Hi from JS'; |
| } |
| |
| self.throwError = function() { |
| throw new Error('Hi from JS'); |
| } |
| |
| self.throwNull = function() { |
| throw null; |
| } |
| |
| self.throwUndefined = function() { |
| throw undefined; |
| } |
| '''); |
| |
| try { |
| throwError(); |
| } catch (e, st) { |
| Expect.isTrue(e.toString().contains('Hi from JS')); |
| Expect.isTrue(st.toString().isNotEmpty); |
| } |
| |
| try { |
| throwNonError(); |
| } catch (e, st) { |
| Expect.isTrue(e.toString().contains('Hi from JS')); |
| Expect.isTrue(st.toString().isEmpty); |
| } |
| |
| try { |
| throwNull(); |
| } catch (e, st) { |
| Expect.isTrue(e.toString().contains('null')); |
| Expect.isTrue(st.toString().isEmpty); |
| } |
| |
| try { |
| throwUndefined(); |
| } catch (e, st) { |
| Expect.isTrue(e.toString().contains('undefined')); |
| Expect.isTrue(st.toString().isEmpty); |
| } |
| } |