| // Copyright (c) 2014, 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. |
| |
| // VMOptions=--optimization-counter-threshold=5 --no-background-compilation |
| // VMOptions=--optimization-counter-threshold=5 --no-background-compilation --stress-async-stacks |
| |
| import 'package:expect/expect.dart'; |
| import "package:async_helper/async_helper.dart"; |
| |
| import 'dart:async'; |
| |
| // It does not matter where a future is generated. |
| bar(p) async => p; |
| baz(p) => new Future(() => p); |
| |
| test0_1() async { |
| throw 1; |
| } |
| |
| test0() async { |
| try { |
| await test0_1(); |
| } catch (e) { |
| Expect.equals(1, e); |
| } |
| } |
| |
| test1_1() async { |
| throw 1; |
| } |
| |
| test1_2() async { |
| try { |
| await test1_1(); |
| } catch (e) { |
| throw e + 1; |
| } |
| } |
| |
| test1() async { |
| try { |
| await test1_2(); |
| } catch (e) { |
| Expect.equals(2, e); |
| } |
| } |
| |
| test2() async { |
| var x; |
| var test2_1 = () async { |
| try { |
| throw 'a'; |
| } catch (e) { |
| throw e + 'b'; |
| } |
| }; |
| try { |
| try { |
| await test2_1(); |
| } catch (e) { |
| var y = await bar(e + 'c'); |
| throw y; |
| } |
| } catch (e) { |
| x = e + 'd'; |
| return '?'; |
| } finally { |
| return x; |
| } |
| return '!'; |
| } |
| |
| test() async { |
| var result; |
| for (int i = 0; i < 10; i++) { |
| await test0(); |
| await test1(); |
| result = await test2(); |
| Expect.equals('abcd', result); |
| } |
| await 1; |
| } |
| |
| foo() { |
| throw "Error"; |
| } |
| |
| awaitFoo() async { |
| await foo(); |
| } |
| |
| main() { |
| asyncStart(); |
| test() |
| .then((_) => awaitFoo().then((_) => Expect.fail("Should have thrown"), |
| onError: (error) => Expect.equals("Error", error))) |
| .whenComplete(asyncEnd); |
| } |