1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "include/v8-platform.h"
6#include "src/libplatform/task-queue.h"
7#include "src/libplatform/worker-thread.h"
8#include "testing/gmock/include/gmock/gmock.h"
9
10using testing::InSequence;
11using testing::IsNull;
12using testing::StrictMock;
13
14namespace v8 {
15namespace platform {
16
17namespace {
18
19struct MockTask : public Task {
20  virtual ~MockTask() { Die(); }
21  MOCK_METHOD0(Run, void());
22  MOCK_METHOD0(Die, void());
23};
24
25}  // namespace
26
27
28TEST(WorkerThreadTest, Basic) {
29  static const size_t kNumTasks = 10;
30
31  TaskQueue queue;
32  for (size_t i = 0; i < kNumTasks; ++i) {
33    InSequence s;
34    StrictMock<MockTask>* task = new StrictMock<MockTask>;
35    EXPECT_CALL(*task, Run());
36    EXPECT_CALL(*task, Die());
37    queue.Append(task);
38  }
39
40  WorkerThread thread1(&queue);
41  WorkerThread thread2(&queue);
42
43  // TaskQueue DCHECKS that it's empty in its destructor.
44  queue.Terminate();
45}
46
47}  // namespace platform
48}  // namespace v8
49