Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index cb28aadc9b7cbebbcab06e1dcbb458c179d7d221..f25bd3bee21ab80449243ff24f21d02ff5dcbdf7 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -18426,7 +18426,40 @@ TEST(PromiseHook) { |
v8_str(promise_hook_data->promise_hook_value.c_str())) |
.FromJust()); |
+ promise_hook_data->Reset(); |
+ promise_hook_data->promise_hook_value = "subclass"; |
+ source = |
+ "var resolve, value = '';\n" |
+ "class MyPromise extends Promise { \n" |
+ " then(onFulfilled, onRejected) { \n" |
+ " return super.then(onFulfilled, onRejected); \n" |
+ " };\n" |
+ "};\n" |
+ "var p = new MyPromise(r => resolve = r);\n"; |
+ |
+ CompileRun(source); |
+ // 1) init hook (p) |
+ CHECK_EQ(1, promise_hook_data->promise_hook_count); |
+ |
+ CompileRun("var p1 = p.then(() => value = 'subclass');\n"); |
+ // 2) init hook (p1) |
+ CHECK_EQ(2, promise_hook_data->promise_hook_count); |
+ |
+ CompileRun("resolve();\n"); |
+ resolve_promise = global->Get(context, v8_str("resolve")).ToLocalChecked(); |
+ before_promise = global->Get(context, v8_str("before")).ToLocalChecked(); |
+ after_promise = global->Get(context, v8_str("after")).ToLocalChecked(); |
+ CHECK(GetPromise("p")->Equals(env.local(), before_promise).FromJust()); |
+ CHECK(GetPromise("p")->Equals(env.local(), after_promise).FromJust()); |
+ CHECK(GetPromise("p1")->Equals(env.local(), resolve_promise).FromJust()); |
+ // 3) resolve hook (p) |
+ // 4) before hook (p) |
+ // 5) after hook (p) |
+ // 6) resolve hook (p1) |
+ CHECK_EQ(6, promise_hook_data->promise_hook_count); |
+ |
delete promise_hook_data; |
+ isolate->SetPromiseHook(nullptr); |
} |
void AnalyzeStackOfDynamicScriptWithSourceURL( |