OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --harmony-async-await --allow-natives-syntax | 5 // Flags: --harmony-async-await --allow-natives-syntax |
6 | 6 |
7 // Do not install `AsyncFunction` constructor on global object | 7 // Do not install `AsyncFunction` constructor on global object |
8 | 8 |
9 function assertThrowsAsync(run, errorType, message) { | 9 function assertThrowsAsync(run, errorType, message) { |
10 var actual; | 10 var actual; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 Symbol.toStringTag); | 137 Symbol.toStringTag); |
138 assertEquals("AsyncFunction", descriptor.value); | 138 assertEquals("AsyncFunction", descriptor.value); |
139 assertEquals(false, descriptor.enumerable); | 139 assertEquals(false, descriptor.enumerable); |
140 assertEquals(false, descriptor.writable); | 140 assertEquals(false, descriptor.writable); |
141 assertEquals(true, descriptor.configurable); | 141 assertEquals(true, descriptor.configurable); |
142 | 142 |
143 assertEquals(1, AsyncFunction.length); | 143 assertEquals(1, AsyncFunction.length); |
144 | 144 |
145 // Let F be ! FunctionAllocate(functionPrototype, Strict, "non-constructor") | 145 // Let F be ! FunctionAllocate(functionPrototype, Strict, "non-constructor") |
146 async function asyncNonConstructorDecl() {} | 146 async function asyncNonConstructorDecl() {} |
147 assertThrows( | 147 assertThrows(() => new asyncNonConstructorDecl(), TypeError); |
148 () => new asyncNonConstructorDecl(), TypeError); | 148 assertThrows(() => asyncNonConstructorDecl.caller, TypeError); |
149 assertThrows( | 149 assertThrows(() => asyncNonConstructorDecl.arguments, TypeError); |
150 () => new (async function() {}), TypeError); | 150 |
| 151 assertThrows(() => new (async function() {}), TypeError); |
| 152 assertThrows(() => (async function() {}).caller, TypeError); |
| 153 assertThrows(() => (async function() {}).arguments, TypeError); |
| 154 |
151 assertThrows( | 155 assertThrows( |
152 () => new ({ async nonConstructor() {} }).nonConstructor(), TypeError); | 156 () => new ({ async nonConstructor() {} }).nonConstructor(), TypeError); |
153 assertThrows( | 157 assertThrows( |
154 () => new (() => "not a constructor!"), TypeError); | 158 () => ({ async nonConstructor() {} }).nonConstructor.caller, TypeError); |
155 assertThrows( | 159 assertThrows( |
156 () => new (AsyncFunction()), TypeError); | 160 () => ({ async nonConstructor() {} }).nonConstructor.arguments, TypeError); |
157 assertThrows( | 161 |
158 () => new (new AsyncFunction()), TypeError); | 162 assertThrows(() => new (() => "not a constructor!"), TypeError); |
| 163 assertThrows(() => (() => 1).caller, TypeError); |
| 164 assertThrows(() => (() => 1).arguments, TypeError); |
| 165 |
| 166 assertThrows(() => new (AsyncFunction()), TypeError); |
| 167 assertThrows(() => AsyncFunction().caller, TypeError); |
| 168 assertThrows(() => AsyncFunction().arguments, TypeError); |
| 169 |
| 170 assertThrows(() => new (new AsyncFunction()), TypeError); |
| 171 assertThrows(() => (new AsyncFunction()).caller, TypeError); |
| 172 assertThrows(() => (new AsyncFunction()).arguments, TypeError); |
159 | 173 |
160 // Normal completion | 174 // Normal completion |
161 async function asyncDecl() { return "test"; } | 175 async function asyncDecl() { return "test"; } |
162 assertEqualsAsync("test", asyncDecl); | 176 assertEqualsAsync("test", asyncDecl); |
163 assertEqualsAsync("test2", async function() { return "test2"; }); | 177 assertEqualsAsync("test2", async function() { return "test2"; }); |
164 assertEqualsAsync("test3", async () => "test3"); | 178 assertEqualsAsync("test3", async () => "test3"); |
165 assertEqualsAsync("test4", () => ({ async f() { return "test4"; } }).f()); | 179 assertEqualsAsync("test4", () => ({ async f() { return "test4"; } }).f()); |
166 assertEqualsAsync("test5", () => AsyncFunction("no", "return 'test' + no;")(5)); | 180 assertEqualsAsync("test5", () => AsyncFunction("no", "return 'test' + no;")(5)); |
167 assertEqualsAsync("test6", | 181 assertEqualsAsync("test6", |
168 () => (new AsyncFunction("no", "return 'test' + no;"))(6)); | 182 () => (new AsyncFunction("no", "return 'test' + no;"))(6)); |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 "20", () => (async(foo, { a = "0" }) => foo + a)("2", { a: undefined })); | 383 "20", () => (async(foo, { a = "0" }) => foo + a)("2", { a: undefined })); |
370 assertThrows(() => eval("async({ foo = 1 })"), SyntaxError); | 384 assertThrows(() => eval("async({ foo = 1 })"), SyntaxError); |
371 assertThrows(() => eval("async(a, { foo = 1 })"), SyntaxError); | 385 assertThrows(() => eval("async(a, { foo = 1 })"), SyntaxError); |
372 | 386 |
373 // https://bugs.chromium.org/p/chromium/issues/detail?id=638019 | 387 // https://bugs.chromium.org/p/chromium/issues/detail?id=638019 |
374 async function gaga() { | 388 async function gaga() { |
375 let i = 1; | 389 let i = 1; |
376 while (i-- > 0) { await 42 } | 390 while (i-- > 0) { await 42 } |
377 } | 391 } |
378 assertDoesNotThrow(gaga); | 392 assertDoesNotThrow(gaga); |
OLD | NEW |