Chromium Code Reviews| Index: tests/language/async_control_structures_test.dart |
| diff --git a/tests/language/async_control_structures_test.dart b/tests/language/async_control_structures_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7b4d325a3881e7b60ae84392ab3ff1ae6dc6220f |
| --- /dev/null |
| +++ b/tests/language/async_control_structures_test.dart |
| @@ -0,0 +1,93 @@ |
| +// 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=--enable_async |
| + |
| +import 'package:expect/expect.dart'; |
| + |
| +import 'dart:async'; |
| + |
| +expectThenValue(future, value) { |
| + Expect.isTrue(future is Future); |
| + future.then((result) { |
| + Expect.equals(value, result); |
| + }); |
| +} |
| + |
| +asyncIf(condition) async { |
| + if(condition) { |
| + return 1; |
| + } else { |
| + return 2; |
| + } |
| + return 3; |
|
hausner
2014/08/12 20:51:26
Maybe a comment why there is a return statement he
Michael Lippautz (Google)
2014/08/12 21:13:57
Done.
|
| +} |
| + |
| +asyncFor(condition) async { |
| + for (int i = 0; i < 10; i++) { |
| + if (i == 5 && condition) { |
| + return 1; |
| + } |
| + } |
| + return 2; |
| +} |
| + |
| +asyncTryCatchFinally(overrideInFinally, doThrow) async { |
| + try { |
| + if (doThrow) throw 444; |
| + return 1; |
| + } catch (e) { |
| + return e; |
| + } finally { |
| + if (overrideInFinally) return 3; |
| + } |
| +} |
| + |
| +asyncTryCatchLoop() async { |
| + var i = 0; |
| + var throws = 13; |
| + while (true) { |
| + try { |
| + throw throws; |
| + } catch (e) { |
| + if (i == throws) { return e; } |
| + } finally { |
| + i++; |
| + } |
| + } |
| +} |
| + |
| +asyncImplicitReturn() async { |
| + try {} |
| + catch (e) {} |
| + finally {} |
| +} |
| + |
| +main() { |
| + var asyncReturn; |
| + |
| + asyncReturn = asyncIf(true); |
| + expectThenValue(asyncReturn, 1); |
| + asyncReturn = asyncIf(false); |
| + expectThenValue(asyncReturn, 2); |
| + |
| + asyncReturn = asyncFor(true); |
| + expectThenValue(asyncReturn, 1); |
| + asyncReturn = asyncFor(false); |
| + expectThenValue(asyncReturn, 2); |
| + |
| + asyncReturn = asyncTryCatchFinally(true, false); |
| + expectThenValue(asyncReturn, 3); |
| + asyncReturn = asyncTryCatchFinally(false, false); |
| + expectThenValue(asyncReturn, 1); |
| + asyncReturn = asyncTryCatchFinally(true, true); |
| + expectThenValue(asyncReturn, 3); |
| + asyncReturn = asyncTryCatchFinally(false, true); |
| + expectThenValue(asyncReturn, 444); |
| + asyncReturn = asyncTryCatchLoop(); |
| + expectThenValue(asyncReturn, 13); |
| + |
| + asyncReturn = asyncImplicitReturn(); |
| + expectThenValue(asyncReturn, null); |
| +} |