1ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
2ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
3ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// found in the LICENSE file.
4ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
5ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org#include "src/libplatform/default-platform.h"
6ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org#include "testing/gmock/include/gmock/gmock.h"
7ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
8ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgusing testing::InSequence;
9ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgusing testing::StrictMock;
10ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
11ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgnamespace v8 {
12ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgnamespace platform {
13ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
14ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgnamespace {
15ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
16ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgstruct MockTask : public Task {
17ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  virtual ~MockTask() { Die(); }
18ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  MOCK_METHOD0(Run, void());
19ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  MOCK_METHOD0(Die, void());
20ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org};
21ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
22ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}  // namespace
23ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
24ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
25ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgTEST(DefaultPlatformTest, PumpMessageLoop) {
26ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  InSequence s;
27ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
28ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  int dummy;
29ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  Isolate* isolate = reinterpret_cast<Isolate*>(&dummy);
30ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
31ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  DefaultPlatform platform;
32ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  EXPECT_FALSE(platform.PumpMessageLoop(isolate));
33ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
34ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  StrictMock<MockTask>* task = new StrictMock<MockTask>;
35ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  platform.CallOnForegroundThread(isolate, task);
36ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  EXPECT_CALL(*task, Run());
37ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  EXPECT_CALL(*task, Die());
38ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  EXPECT_TRUE(platform.PumpMessageLoop(isolate));
39ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  EXPECT_FALSE(platform.PumpMessageLoop(isolate));
40ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
41ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
42ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}  // namespace platform
43ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}  // namespace v8
44