Home | History | Annotate | Download | only in threading
      1 // Copyright (c) 2008 The Chromium 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 "base/task.h"
      6 #include "base/synchronization/waitable_event.h"
      7 #include "base/threading/worker_pool.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 #include "testing/platform_test.h"
     10 
     11 typedef PlatformTest WorkerPoolTest;
     12 
     13 namespace base {
     14 
     15 namespace {
     16 
     17 class PostTaskTestTask : public Task {
     18  public:
     19   explicit PostTaskTestTask(WaitableEvent* event) : event_(event) {
     20   }
     21 
     22   void Run() {
     23     event_->Signal();
     24   }
     25 
     26  private:
     27   WaitableEvent* event_;
     28 };
     29 
     30 }  // namespace
     31 
     32 TEST_F(WorkerPoolTest, PostTask) {
     33   WaitableEvent test_event(false, false);
     34   WaitableEvent long_test_event(false, false);
     35   bool signaled;
     36 
     37   WorkerPool::PostTask(FROM_HERE, new PostTaskTestTask(&test_event), false);
     38   WorkerPool::PostTask(FROM_HERE, new PostTaskTestTask(&long_test_event), true);
     39 
     40   signaled = test_event.Wait();
     41   EXPECT_TRUE(signaled);
     42   signaled = long_test_event.Wait();
     43   EXPECT_TRUE(signaled);
     44 }
     45 
     46 }  // namespace base
     47