// Copyright (c) 2021, 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. @JS() library js_util_async_test; import 'dart:async'; import 'package:js/js.dart'; import 'package:js/js_util.dart' as js_util; import 'package:expect/minitest.dart'; import 'package:async_helper/async_helper.dart'; @JS() external void eval(String code); @JS() abstract class Promise {} @JS() external Promise get resolvedPromise; @JS() external Promise get rejectedPromise; @JS() external Promise getResolvedPromise(); main() { eval(r""" var rejectedPromise = new Promise((resolve, reject) => reject('rejected')); var resolvedPromise = new Promise(resolve => resolve('resolved')); function getResolvedPromise() { return resolvedPromise; } """); Future testResolvedPromise() async { final String result = await js_util.promiseToFuture(resolvedPromise); expect(result, equals('resolved')); } Future testRejectedPromise() async { asyncExpectThrows(() => js_util.promiseToFuture(rejectedPromise), (String error) => error == 'rejected'); } Future testReturnResolvedPromise() async { final String result = await js_util.promiseToFuture(getResolvedPromise()); expect(result, equals('resolved')); } asyncTest(() async { await testResolvedPromise(); await testRejectedPromise(); await testReturnResolvedPromise(); }); }