diff options
Diffstat (limited to 'deps/v8/test/unittests/objects/microtask-queue-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/objects/microtask-queue-unittest.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/deps/v8/test/unittests/objects/microtask-queue-unittest.cc b/deps/v8/test/unittests/objects/microtask-queue-unittest.cc new file mode 100644 index 0000000000..2b237ebc50 --- /dev/null +++ b/deps/v8/test/unittests/objects/microtask-queue-unittest.cc @@ -0,0 +1,55 @@ +// Copyright 2018 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. + +#include "src/objects/microtask-queue-inl.h" + +#include "test/unittests/test-utils.h" + +namespace v8 { +namespace internal { + +void NoopCallback(void*) {} + +class MicrotaskQueueTest : public TestWithIsolate { + public: + Handle<Microtask> NewMicrotask() { + MicrotaskCallback callback = &NoopCallback; + void* data = nullptr; + return factory()->NewCallbackTask( + factory()->NewForeign(reinterpret_cast<Address>(callback)), + factory()->NewForeign(reinterpret_cast<Address>(data))); + } +}; + +TEST_F(MicrotaskQueueTest, EnqueueMicrotask) { + Handle<MicrotaskQueue> microtask_queue = factory()->NewMicrotaskQueue(); + Handle<Microtask> microtask = NewMicrotask(); + + EXPECT_EQ(0, microtask_queue->pending_microtask_count()); + MicrotaskQueue::EnqueueMicrotask(isolate(), microtask_queue, microtask); + EXPECT_EQ(1, microtask_queue->pending_microtask_count()); + ASSERT_LE(1, microtask_queue->queue()->length()); + EXPECT_EQ(*microtask, microtask_queue->queue()->get(0)); + + std::vector<Handle<Microtask>> microtasks; + microtasks.push_back(microtask); + + // Queue microtasks until the reallocation happens. + int queue_capacity = microtask_queue->queue()->length(); + for (int i = 0; i < queue_capacity; ++i) { + microtask = NewMicrotask(); + MicrotaskQueue::EnqueueMicrotask(isolate(), microtask_queue, microtask); + microtasks.push_back(microtask); + } + + int num_tasks = static_cast<int>(microtasks.size()); + EXPECT_EQ(num_tasks, microtask_queue->pending_microtask_count()); + ASSERT_LE(num_tasks, microtask_queue->queue()->length()); + for (int i = 0; i < num_tasks; ++i) { + EXPECT_EQ(*microtasks[i], microtask_queue->queue()->get(i)); + } +} + +} // namespace internal +} // namespace v8 |