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
11typedef PlatformTest WorkerPoolTest;
12
13namespace base {
14
15namespace {
16
17class 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
32TEST_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