summaryrefslogtreecommitdiff
path: root/chromium/base/task/post_job_unittest.cc
blob: f2ee7d5abeee625649ec201971ed8186c4e4e15d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Copyright 2019 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/task/post_job.h"

#include <atomic>

#include "base/task/test_task_traits_extension.h"
#include "base/test/bind_test_util.h"
#include "base/test/gtest_util.h"
#include "base/test/task_environment.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {

TEST(PostJobTest, PostJobSimple) {
  test::TaskEnvironment task_environment;
  std::atomic_size_t num_tasks_to_run(4);
  auto handle = PostJob(
      FROM_HERE, {},
      BindLambdaForTesting([&](JobDelegate* delegate) { --num_tasks_to_run; }),
      BindLambdaForTesting([&]() -> size_t { return num_tasks_to_run; }));
  handle.Join();
  DCHECK_EQ(num_tasks_to_run, 0U);
}

TEST(PostJobTest, PostJobExtension) {
  testing::FLAGS_gtest_death_test_style = "threadsafe";
  EXPECT_DCHECK_DEATH({
    auto handle = PostJob(FROM_HERE, TestExtensionBoolTrait(),
                          BindRepeating([](JobDelegate* delegate) {}),
                          BindRepeating([]() -> size_t { return 0; }));
  });
}

}  // namespace base