Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: test/mjsunit/harmony/async-await-basic.js

Issue 1895603002: [esnext] prototype runtime implementation for async functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@AsyncFunction
Patch Set: properly rebase Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --harmony-async-await
6
7 // TODO(caitp): give async functions a non-constructor map
8
9 // Let F be ! FunctionAllocate(functionPrototype, Strict, "non-constructor")
10 //async function asyncNonConstructorDecl() {}
11 //assertThrows(
12 // () => new asyncNonConstructorDecl(), TypeError);
13 //assertThrows(
14 // () => new (async function() {}), TypeError);
15 //assertThrows(
16 // () => new ({ async nonConstructor() {} }).nonConstructor(), TypeError);
17 //assertThrows(
18 // () => new (() => "not a constructor!"), TypeError);
19
20 // Normal completion
21 async function asyncDecl() { return "test"; }
22 assertEqualsAsync("test", asyncDecl);
23 assertEqualsAsync("test2", async function() { return "test2"; });
24 assertEqualsAsync("test3", async () => "test3");
25 assertEqualsAsync("test4", () => ({ async f() { return "test4"; } }).f());
26
27 class MyError extends Error {};
28
29 // Throw completion
30 async function asyncDeclThrower(e) { throw new MyError(e); }
31 assertThrowsAsync(() => asyncDeclThrower("boom!"), MyError, "boom!");
32 assertThrowsAsync(
33 () => (async function(e) { throw new MyError(e); })("boom!!!"),
34 MyError, "boom!!!");
35 //assertThrowsAsync(
36 // () => (async e => { throw new MyError(e) })("boom!!"), MyError, "boom!!");
37 assertThrowsAsync(
38 () => ({ async thrower(e) { throw new MyError(e); } }).thrower("boom!1!"),
39 MyError, "boom!1!");
40
41 function resolveLater(value) { return Promise.resolve(value); }
42 function rejectLater(error) { return Promise.reject(error); }
43
44 // Resume after Normal completion
45 var log = [];
46 async function resumeAfterNormal(value) {
47 log.push("start:" + value);
48 value = await resolveLater(value + 1);
49 log.push("resume:" + value);
50 value = await resolveLater(value + 1);
51 log.push("resume:" + value);
52 return value + 1;
53 }
54
55 assertEqualsAsync(4, () => resumeAfterNormal(1));
56 assertEquals("start:1 resume:2 resume:3", log.join(" "));
57
58 var O = {
59 async resumeAfterNormal(value) {
60 log.push("start:" + value);
61 value = await resolveLater(value + 1);
62 log.push("resume:" + value);
63 value = await resolveLater(value + 1);
64 log.push("resume:" + value);
65 return value + 1;
66 }
67 };
68 log = [];
69 assertEqualsAsync(5, () => O.resumeAfterNormal(2));
70 assertEquals("start:2 resume:3 resume:4", log.join(" "));
71
72 var resumeAfterNormalArrow = async (value) => {
73 try {
74 log.push("start:" + value);
75 value = await resolveLater(value + 1);
76 log.push("resume:" + value);
77 value = await resolveLater(value + 1);
78 log.push("resume:" + value);
79 return value + 1;
80 } catch (e) {
81 print(e.stack);
82 }
83 };
84 log = [];
85 assertEqualsAsync(6, () => resumeAfterNormalArrow(3));
86 assertEquals("start:3 resume:4 resume:5", log.join(" "));
87
88 // Resume after Throw completion
89 async function resumeAfterThrow(value) {
90 log.push("start:" + value);
91 try {
92 value = await rejectLater("throw1");
93 } catch (e) {
94 log.push("resume:" + e);
95 }
96 try {
97 value = await rejectLater("throw2");
98 } catch (e) {
99 log.push("resume:" + e);
100 }
101 return value + 1;
102 }
103
104 log = [];
105 assertEqualsAsync(2, () => resumeAfterThrow(1));
106 assertEquals("start:1 resume:throw1 resume:throw2", log.join(" "));
107
108 var O = {
109 async resumeAfterThrow(value) {
110 log.push("start:" + value);
111 try {
112 value = await rejectLater("throw1");
113 } catch (e) {
114 log.push("resume:" + e);
115 }
116 try {
117 value = await rejectLater("throw2");
118 } catch (e) {
119 log.push("resume:" + e);
120 }
121 return value + 1;
122 }
123 }
124 log = [];
125 assertEqualsAsync(3, () => O.resumeAfterThrow(2));
126 assertEquals("start:2 resume:throw1 resume:throw2", log.join(" "));
127
128 var resumeAfterThrowArrow = async (value) => {
129 log.push("start:" + value);
130 try {
131 value = await rejectLater("throw1");
132 } catch (e) {
133 log.push("resume:" + e);
134 }
135 try {
136 value = await rejectLater("throw2");
137 } catch (e) {
138 log.push("resume:" + e);
139 }
140 return value + 1;
141 };
142
143 log = [];
144
145 assertEqualsAsync(4, () => resumeAfterThrowArrow(3));
146 assertEquals("start:3 resume:throw1 resume:throw2", log.join(" "));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698