Index: webkit/glue/worker_task_runner_unittest.cc |
diff --git a/webkit/glue/worker_task_runner_unittest.cc b/webkit/glue/worker_task_runner_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3a0b92de47c0f28942d8bd3ff3c4c37b010e5027 |
--- /dev/null |
+++ b/webkit/glue/worker_task_runner_unittest.cc |
@@ -0,0 +1,68 @@ |
+// Copyright (c) 2011 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 "base/logging.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "webkit/glue/worker_task_runner.h" |
+ |
+namespace webkit_glue { |
+ |
+class WorkerTaskRunnerTest : public testing::Test { |
+ public: |
+ void FakeStart() { |
+ task_runner_.OnWorkerRunLoopStarted(WebKit::WebWorkerRunLoop()); |
+ } |
+ void FakeStop() { |
+ task_runner_.OnWorkerRunLoopStopped(WebKit::WebWorkerRunLoop()); |
+ } |
+ WorkerTaskRunner task_runner_; |
+}; |
+ |
+class MockObserver : public WorkerTaskRunner::Observer { |
+ public: |
+ MOCK_METHOD0(OnWorkerRunLoopStarted, void()); |
+ MOCK_METHOD0(OnWorkerRunLoopStopped, void()); |
+ void RemoveSelfOnNotify() { |
+ ON_CALL(*this, OnWorkerRunLoopStarted()).WillByDefault( |
+ testing::Invoke(this, &MockObserver::RemoveSelf)); |
+ } |
+ void RemoveSelf() { |
+ runner_->RemoveObserver(this); |
+ } |
+ WorkerTaskRunner* runner_; |
+}; |
+ |
+TEST_F(WorkerTaskRunnerTest, BasicObservingAndWorkerId) { |
+ ASSERT_EQ(0, task_runner_.CurrentWorkerId()); |
+ MockObserver o; |
+ EXPECT_CALL(o, OnWorkerRunLoopStarted()).Times(1); |
+ EXPECT_CALL(o, OnWorkerRunLoopStopped()).Times(1); |
+ task_runner_.AddObserver(&o); |
+ FakeStart(); |
+ ASSERT_LT(0, task_runner_.CurrentWorkerId()); |
+ FakeStop(); |
+} |
+ |
+TEST_F(WorkerTaskRunnerTest, RegisterAfterStart) { |
+ MockObserver o; |
+ EXPECT_CALL(o, OnWorkerRunLoopStarted()).Times(0); |
+ EXPECT_CALL(o, OnWorkerRunLoopStopped()).Times(1); |
+ FakeStart(); |
+ task_runner_.AddObserver(&o); |
+ FakeStop(); |
+} |
+ |
+TEST_F(WorkerTaskRunnerTest, CanRemoveSelfDuringNotification) { |
+ MockObserver o; |
+ o.RemoveSelfOnNotify(); |
+ o.runner_ = &task_runner_; |
+ EXPECT_CALL(o, OnWorkerRunLoopStarted()).Times(1); |
+ EXPECT_CALL(o, OnWorkerRunLoopStopped()).Times(0); |
+ task_runner_.AddObserver(&o); |
+ FakeStart(); |
+ FakeStop(); |
+} |
+ |
+} |