| 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 |