diff options
Diffstat (limited to 'chromium/content/child/worker_task_runner_unittest.cc')
-rw-r--r-- | chromium/content/child/worker_task_runner_unittest.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/chromium/content/child/worker_task_runner_unittest.cc b/chromium/content/child/worker_task_runner_unittest.cc new file mode 100644 index 00000000000..530c8a2f178 --- /dev/null +++ b/chromium/content/child/worker_task_runner_unittest.cc @@ -0,0 +1,57 @@ +// Copyright 2014 The Chromium 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 "content/child/worker_task_runner.h" + +#include "base/logging.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace content { + +class WorkerTaskRunnerTest : public testing::Test { + public: + void FakeStart() { + task_runner_.OnWorkerRunLoopStarted(blink::WebWorkerRunLoop()); + } + void FakeStop() { + task_runner_.OnWorkerRunLoopStopped(blink::WebWorkerRunLoop()); + } + WorkerTaskRunner task_runner_; +}; + +class MockObserver : public WorkerTaskRunner::Observer { + public: + MOCK_METHOD0(OnWorkerRunLoopStopped, void()); + void RemoveSelfOnNotify() { + ON_CALL(*this, OnWorkerRunLoopStopped()).WillByDefault( + testing::Invoke(this, &MockObserver::RemoveSelf)); + } + void RemoveSelf() { + runner_->RemoveStopObserver(this); + } + WorkerTaskRunner* runner_; +}; + +TEST_F(WorkerTaskRunnerTest, BasicObservingAndWorkerId) { + ASSERT_EQ(0, task_runner_.CurrentWorkerId()); + MockObserver o; + EXPECT_CALL(o, OnWorkerRunLoopStopped()).Times(1); + FakeStart(); + task_runner_.AddStopObserver(&o); + ASSERT_LT(0, task_runner_.CurrentWorkerId()); + FakeStop(); +} + +TEST_F(WorkerTaskRunnerTest, CanRemoveSelfDuringNotification) { + MockObserver o; + o.RemoveSelfOnNotify(); + o.runner_ = &task_runner_; + EXPECT_CALL(o, OnWorkerRunLoopStopped()).Times(1); + FakeStart(); + task_runner_.AddStopObserver(&o); + FakeStop(); +} + +} // namespace content |