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/base/platform/platform.h" 7#include "src/libplatform/task-queue.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 MOCK_METHOD0(Run, void()); 21}; 22 23 24class TaskQueueThread FINAL : public base::Thread { 25 public: 26 explicit TaskQueueThread(TaskQueue* queue) 27 : Thread(Options("libplatform TaskQueueThread")), queue_(queue) {} 28 29 virtual void Run() OVERRIDE { EXPECT_THAT(queue_->GetNext(), IsNull()); } 30 31 private: 32 TaskQueue* queue_; 33}; 34 35} // namespace 36 37 38TEST(TaskQueueTest, Basic) { 39 TaskQueue queue; 40 MockTask task; 41 queue.Append(&task); 42 EXPECT_EQ(&task, queue.GetNext()); 43 queue.Terminate(); 44 EXPECT_THAT(queue.GetNext(), IsNull()); 45} 46 47 48TEST(TaskQueueTest, TerminateMultipleReaders) { 49 TaskQueue queue; 50 TaskQueueThread thread1(&queue); 51 TaskQueueThread thread2(&queue); 52 thread1.Start(); 53 thread2.Start(); 54 queue.Terminate(); 55 thread1.Join(); 56 thread2.Join(); 57} 58 59} // namespace platform 60} // namespace v8 61