| Index: test/mjsunit/harmony/async-await-basic.js
|
| diff --git a/test/mjsunit/harmony/async-await-basic.js b/test/mjsunit/harmony/async-await-basic.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5f3fa2b36e0a841bf8f17d596b7dfc6e99ff1598
|
| --- /dev/null
|
| +++ b/test/mjsunit/harmony/async-await-basic.js
|
| @@ -0,0 +1,146 @@
|
| +// Copyright 2016 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Flags: --harmony-async-await
|
| +
|
| +// TODO(caitp): give async functions a non-constructor map
|
| +
|
| +// Let F be ! FunctionAllocate(functionPrototype, Strict, "non-constructor")
|
| +//async function asyncNonConstructorDecl() {}
|
| +//assertThrows(
|
| +// () => new asyncNonConstructorDecl(), TypeError);
|
| +//assertThrows(
|
| +// () => new (async function() {}), TypeError);
|
| +//assertThrows(
|
| +// () => new ({ async nonConstructor() {} }).nonConstructor(), TypeError);
|
| +//assertThrows(
|
| +// () => new (() => "not a constructor!"), TypeError);
|
| +
|
| +// Normal completion
|
| +async function asyncDecl() { return "test"; }
|
| +assertEqualsAsync("test", asyncDecl);
|
| +assertEqualsAsync("test2", async function() { return "test2"; });
|
| +assertEqualsAsync("test3", async () => "test3");
|
| +assertEqualsAsync("test4", () => ({ async f() { return "test4"; } }).f());
|
| +
|
| +class MyError extends Error {};
|
| +
|
| +// Throw completion
|
| +async function asyncDeclThrower(e) { throw new MyError(e); }
|
| +assertThrowsAsync(() => asyncDeclThrower("boom!"), MyError, "boom!");
|
| +assertThrowsAsync(
|
| + () => (async function(e) { throw new MyError(e); })("boom!!!"),
|
| + MyError, "boom!!!");
|
| +//assertThrowsAsync(
|
| +// () => (async e => { throw new MyError(e) })("boom!!"), MyError, "boom!!");
|
| +assertThrowsAsync(
|
| + () => ({ async thrower(e) { throw new MyError(e); } }).thrower("boom!1!"),
|
| + MyError, "boom!1!");
|
| +
|
| +function resolveLater(value) { return Promise.resolve(value); }
|
| +function rejectLater(error) { return Promise.reject(error); }
|
| +
|
| +// Resume after Normal completion
|
| +var log = [];
|
| +async function resumeAfterNormal(value) {
|
| + log.push("start:" + value);
|
| + value = await resolveLater(value + 1);
|
| + log.push("resume:" + value);
|
| + value = await resolveLater(value + 1);
|
| + log.push("resume:" + value);
|
| + return value + 1;
|
| +}
|
| +
|
| +assertEqualsAsync(4, () => resumeAfterNormal(1));
|
| +assertEquals("start:1 resume:2 resume:3", log.join(" "));
|
| +
|
| +var O = {
|
| + async resumeAfterNormal(value) {
|
| + log.push("start:" + value);
|
| + value = await resolveLater(value + 1);
|
| + log.push("resume:" + value);
|
| + value = await resolveLater(value + 1);
|
| + log.push("resume:" + value);
|
| + return value + 1;
|
| + }
|
| +};
|
| +log = [];
|
| +assertEqualsAsync(5, () => O.resumeAfterNormal(2));
|
| +assertEquals("start:2 resume:3 resume:4", log.join(" "));
|
| +
|
| +var resumeAfterNormalArrow = async (value) => {
|
| + try {
|
| + log.push("start:" + value);
|
| + value = await resolveLater(value + 1);
|
| + log.push("resume:" + value);
|
| + value = await resolveLater(value + 1);
|
| + log.push("resume:" + value);
|
| + return value + 1;
|
| + } catch (e) {
|
| + print(e.stack);
|
| + }
|
| +};
|
| +log = [];
|
| +assertEqualsAsync(6, () => resumeAfterNormalArrow(3));
|
| +assertEquals("start:3 resume:4 resume:5", log.join(" "));
|
| +
|
| +// Resume after Throw completion
|
| +async function resumeAfterThrow(value) {
|
| + log.push("start:" + value);
|
| + try {
|
| + value = await rejectLater("throw1");
|
| + } catch (e) {
|
| + log.push("resume:" + e);
|
| + }
|
| + try {
|
| + value = await rejectLater("throw2");
|
| + } catch (e) {
|
| + log.push("resume:" + e);
|
| + }
|
| + return value + 1;
|
| +}
|
| +
|
| +log = [];
|
| +assertEqualsAsync(2, () => resumeAfterThrow(1));
|
| +assertEquals("start:1 resume:throw1 resume:throw2", log.join(" "));
|
| +
|
| +var O = {
|
| + async resumeAfterThrow(value) {
|
| + log.push("start:" + value);
|
| + try {
|
| + value = await rejectLater("throw1");
|
| + } catch (e) {
|
| + log.push("resume:" + e);
|
| + }
|
| + try {
|
| + value = await rejectLater("throw2");
|
| + } catch (e) {
|
| + log.push("resume:" + e);
|
| + }
|
| + return value + 1;
|
| + }
|
| +}
|
| +log = [];
|
| +assertEqualsAsync(3, () => O.resumeAfterThrow(2));
|
| +assertEquals("start:2 resume:throw1 resume:throw2", log.join(" "));
|
| +
|
| +var resumeAfterThrowArrow = async (value) => {
|
| + log.push("start:" + value);
|
| + try {
|
| + value = await rejectLater("throw1");
|
| + } catch (e) {
|
| + log.push("resume:" + e);
|
| + }
|
| + try {
|
| + value = await rejectLater("throw2");
|
| + } catch (e) {
|
| + log.push("resume:" + e);
|
| + }
|
| + return value + 1;
|
| +};
|
| +
|
| +log = [];
|
| +
|
| +assertEqualsAsync(4, () => resumeAfterThrowArrow(3));
|
| +assertEquals("start:3 resume:throw1 resume:throw2", log.join(" "));
|
|
|