summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/async-stack-traces-realms.js
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2019-08-16 11:32:46 +0200
committerMichaël Zasso <targos@protonmail.com>2019-08-19 09:25:23 +0200
commite31f0a7d25668d3c1531294d2ef44a9f3bde4ef4 (patch)
tree6c6bed9804be9df6162b2483f0a56f371f66464d /deps/v8/test/mjsunit/async-stack-traces-realms.js
parentec16fdae540adaf710b1a86c620170b2880088f0 (diff)
downloadandroid-node-v8-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.tar.gz
android-node-v8-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.tar.bz2
android-node-v8-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.zip
deps: update V8 to 7.7.299.4
PR-URL: https://github.com/nodejs/node/pull/28918 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'deps/v8/test/mjsunit/async-stack-traces-realms.js')
-rw-r--r--deps/v8/test/mjsunit/async-stack-traces-realms.js115
1 files changed, 115 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/async-stack-traces-realms.js b/deps/v8/test/mjsunit/async-stack-traces-realms.js
new file mode 100644
index 0000000000..9145b93377
--- /dev/null
+++ b/deps/v8/test/mjsunit/async-stack-traces-realms.js
@@ -0,0 +1,115 @@
+// Copyright 2019 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: --allow-natives-syntax --async-stack-traces
+
+// Basic test with an explicit throw.
+(function() {
+ const realm = Realm.createAllowCrossRealmAccess();
+
+ async function one(x) {
+ await two(x);
+ }
+
+ const two = Realm.eval(realm, `(async function two(x) {
+ await x;
+ throw new Error();
+ })`);
+
+ async function test(f) {
+ try {
+ await f(new Promise(resolve => setTimeout(resolve)));
+ assertUnreachable();
+ } catch (e) {
+ assertInstanceof(e, Realm.global(realm).Error);
+ assertMatches(/Error.+at two.+at async one.+at async test/ms, e.stack);
+ }
+ }
+
+ assertPromiseResult((async () => {
+ %PrepareFunctionForOptimization(one);
+ %PrepareFunctionForOptimization(two);
+ await test(one);
+ await test(one);
+ %OptimizeFunctionOnNextCall(two);
+ await test(one);
+ %OptimizeFunctionOnNextCall(one);
+ await test(one);
+ Realm.dispose(realm);
+ })());
+})();
+
+// Basic test with an implicit throw (via ToNumber on Symbol).
+(function() {
+ const realm = Realm.createAllowCrossRealmAccess();
+
+ async function one(x) {
+ return await two(x);
+ }
+
+ const two = Realm.eval(realm, `(async function two(x) {
+ await x;
+ return +Symbol(); // This will raise a TypeError.
+ })`);
+
+ async function test(f) {
+ try {
+ await f(new Promise(resolve => setTimeout(resolve)));
+ assertUnreachable();
+ } catch (e) {
+ assertInstanceof(e, Realm.global(realm).TypeError);
+ assertMatches(/TypeError.+at two.+at async one.+at async test/ms, e.stack);
+ }
+ }
+
+ assertPromiseResult((async() => {
+ %PrepareFunctionForOptimization(one);
+ %PrepareFunctionForOptimization(two);
+ await test(one);
+ await test(one);
+ %OptimizeFunctionOnNextCall(two);
+ await test(one);
+ %OptimizeFunctionOnNextCall(one);
+ await test(one);
+ Realm.dispose(realm);
+ })());
+})();
+
+// Basic test with async functions and promises chained via
+// Promise.prototype.then(), which should still work following
+// the generic chain upwards.
+(function() {
+ const realm = Realm.createAllowCrossRealmAccess();
+
+ async function one(x) {
+ return await two(x).then(x => x);
+ }
+
+ const two = Realm.eval(realm, `(async function two(x) {
+ await x.then(x => x);
+ throw new Error();
+ })`);
+
+ async function test(f) {
+ try {
+ await f(new Promise(resolve => setTimeout(resolve)));
+ assertUnreachable();
+ } catch (e) {
+ assertInstanceof(e, Realm.global(realm).Error);
+ assertMatches(/Error.+at two.+at async one.+at async test/ms, e.stack);
+ }
+ }
+
+ assertPromiseResult((async() => {
+ %PrepareFunctionForOptimization(one);
+ %PrepareFunctionForOptimization(two);
+ await test(one);
+ await test(one);
+ %OptimizeFunctionOnNextCall(two);
+ await test(one);
+ %OptimizeFunctionOnNextCall(one);
+ await test(one);
+ Realm.dispose(realm);
+ })());
+})();