Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 447cd261ce9daba049a74c8cb4797641f2a246fb..65d59d407282f4c550aff926b114663751a32431 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -20491,6 +20491,102 @@ TEST(CallCompletedCallbackTwoExceptions) { |
} |
+static void MicrotaskOne(const v8::FunctionCallbackInfo<Value>& info) { |
+ v8::HandleScope scope(info.GetIsolate()); |
+ CompileRun("ext1Calls++;"); |
+} |
+ |
+ |
+static void MicrotaskTwo(const v8::FunctionCallbackInfo<Value>& info) { |
+ v8::HandleScope scope(info.GetIsolate()); |
+ CompileRun("ext2Calls++;"); |
+} |
+ |
+ |
+TEST(EnqueueMicrotask) { |
+ LocalContext env; |
+ v8::HandleScope scope(env->GetIsolate()); |
+ CompileRun( |
+ "var ext1Calls = 0;" |
+ "var ext2Calls = 0;"); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(0, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskOne)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskOne)); |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskTwo)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskTwo)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ CompileRun("1+1;"); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value()); |
+} |
+ |
+ |
+TEST(SetAutorunMicrotasks) { |
+ LocalContext env; |
+ v8::HandleScope scope(env->GetIsolate()); |
+ CompileRun( |
+ "var ext1Calls = 0;" |
+ "var ext2Calls = 0;"); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(0, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskOne)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ V8::SetAutorunMicrotasks(env->GetIsolate(), false); |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskOne)); |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskTwo)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(1, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(0, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ V8::RunMicrotasks(env->GetIsolate()); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskTwo)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(1, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ V8::RunMicrotasks(env->GetIsolate()); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(2, CompileRun("ext2Calls")->Int32Value()); |
+ |
+ V8::SetAutorunMicrotasks(env->GetIsolate(), true); |
+ v8::V8::EnqueueMicrotask(env->GetIsolate(), |
+ Function::New(env->GetIsolate(), MicrotaskTwo)); |
+ CompileRun("1+1;"); |
+ CHECK_EQ(2, CompileRun("ext1Calls")->Int32Value()); |
+ CHECK_EQ(3, CompileRun("ext2Calls")->Int32Value()); |
+} |
+ |
+ |
static int probes_counter = 0; |
static int misses_counter = 0; |
static int updates_counter = 0; |