15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jingle/glue/task_pump.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jingle/glue/mock_task.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace jingle_glue {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TaskPumpTest : public testing::Test {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoop message_loop_;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(TaskPumpTest, Basic) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskPump task_pump;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockTask* task = new MockTask(&task_pump);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We have to do this since the state enum is protected in
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // rtc::Task.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int TASK_STATE_DONE = 2;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*task, ProcessStart()).WillOnce(Return(TASK_STATE_DONE));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  task->Start();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(TaskPumpTest, Stop) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TaskPump task_pump;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockTask* task = new MockTask(&task_pump);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We have to do this since the state enum is protected in
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // rtc::Task.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int TASK_STATE_ERROR = 3;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ON_CALL(*task, ProcessStart()).WillByDefault(Return(TASK_STATE_ERROR));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*task, ProcessStart()).Times(0);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  task->Start();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  task_pump.Stop();
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace jingle_glue
51