1 // Copyright 2017 The Chromium Authors
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/task_traits.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace base {
10
TEST(TaskTraitsTest,Default)11 TEST(TaskTraitsTest, Default) {
12 constexpr TaskTraits traits = {};
13 EXPECT_EQ(TaskPriority::USER_BLOCKING, traits.priority());
14 EXPECT_FALSE(traits.shutdown_behavior_set_explicitly());
15 EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
16 EXPECT_FALSE(traits.thread_policy_set_explicitly());
17 EXPECT_EQ(ThreadPolicy::PREFER_BACKGROUND, traits.thread_policy());
18 EXPECT_FALSE(traits.may_block());
19 EXPECT_FALSE(traits.with_base_sync_primitives());
20 }
21
TEST(TaskTraitsTest,TaskPriority)22 TEST(TaskTraitsTest, TaskPriority) {
23 constexpr TaskTraits traits = {TaskPriority::BEST_EFFORT};
24 EXPECT_EQ(TaskPriority::BEST_EFFORT, traits.priority());
25 EXPECT_FALSE(traits.shutdown_behavior_set_explicitly());
26 EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
27 EXPECT_FALSE(traits.thread_policy_set_explicitly());
28 EXPECT_EQ(ThreadPolicy::PREFER_BACKGROUND, traits.thread_policy());
29 EXPECT_FALSE(traits.may_block());
30 EXPECT_FALSE(traits.with_base_sync_primitives());
31 }
32
TEST(TaskTraitsTest,TaskShutdownBehavior)33 TEST(TaskTraitsTest, TaskShutdownBehavior) {
34 constexpr TaskTraits traits = {TaskShutdownBehavior::BLOCK_SHUTDOWN};
35 EXPECT_EQ(TaskPriority::USER_BLOCKING, traits.priority());
36 EXPECT_TRUE(traits.shutdown_behavior_set_explicitly());
37 EXPECT_EQ(TaskShutdownBehavior::BLOCK_SHUTDOWN, traits.shutdown_behavior());
38 EXPECT_FALSE(traits.thread_policy_set_explicitly());
39 EXPECT_EQ(ThreadPolicy::PREFER_BACKGROUND, traits.thread_policy());
40 EXPECT_FALSE(traits.may_block());
41 EXPECT_FALSE(traits.with_base_sync_primitives());
42 }
43
TEST(TaskTraitsTest,ThreadPolicy)44 TEST(TaskTraitsTest, ThreadPolicy) {
45 constexpr TaskTraits traits = {ThreadPolicy::MUST_USE_FOREGROUND};
46 EXPECT_EQ(TaskPriority::USER_BLOCKING, traits.priority());
47 EXPECT_FALSE(traits.shutdown_behavior_set_explicitly());
48 EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
49 EXPECT_TRUE(traits.thread_policy_set_explicitly());
50 EXPECT_EQ(ThreadPolicy::MUST_USE_FOREGROUND, traits.thread_policy());
51 EXPECT_FALSE(traits.may_block());
52 EXPECT_FALSE(traits.with_base_sync_primitives());
53 }
54
TEST(TaskTraitsTest,MayBlock)55 TEST(TaskTraitsTest, MayBlock) {
56 constexpr TaskTraits traits = {MayBlock()};
57 EXPECT_EQ(TaskPriority::USER_BLOCKING, traits.priority());
58 EXPECT_FALSE(traits.shutdown_behavior_set_explicitly());
59 EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
60 EXPECT_FALSE(traits.thread_policy_set_explicitly());
61 EXPECT_EQ(ThreadPolicy::PREFER_BACKGROUND, traits.thread_policy());
62 EXPECT_TRUE(traits.may_block());
63 EXPECT_FALSE(traits.with_base_sync_primitives());
64 }
65
TEST(TaskTraitsTest,WithBaseSyncPrimitives)66 TEST(TaskTraitsTest, WithBaseSyncPrimitives) {
67 constexpr TaskTraits traits = {WithBaseSyncPrimitives()};
68 EXPECT_EQ(TaskPriority::USER_BLOCKING, traits.priority());
69 EXPECT_FALSE(traits.shutdown_behavior_set_explicitly());
70 EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
71 EXPECT_FALSE(traits.thread_policy_set_explicitly());
72 EXPECT_EQ(ThreadPolicy::PREFER_BACKGROUND, traits.thread_policy());
73 EXPECT_FALSE(traits.may_block());
74 EXPECT_TRUE(traits.with_base_sync_primitives());
75 }
76
TEST(TaskTraitsTest,UpdatePriority)77 TEST(TaskTraitsTest, UpdatePriority) {
78 {
79 TaskTraits traits = {};
80 traits.UpdatePriority(TaskPriority::BEST_EFFORT);
81 EXPECT_EQ(TaskPriority::BEST_EFFORT, traits.priority());
82 }
83
84 {
85 TaskTraits traits = {TaskPriority::USER_VISIBLE};
86 traits.UpdatePriority(TaskPriority::BEST_EFFORT);
87 EXPECT_EQ(TaskPriority::BEST_EFFORT, traits.priority());
88 }
89 }
90
TEST(TaskTraitsTest,MultipleTraits)91 TEST(TaskTraitsTest, MultipleTraits) {
92 constexpr TaskTraits traits = {
93 TaskPriority::BEST_EFFORT, TaskShutdownBehavior::BLOCK_SHUTDOWN,
94 ThreadPolicy::MUST_USE_FOREGROUND, MayBlock(), WithBaseSyncPrimitives()};
95 EXPECT_EQ(TaskPriority::BEST_EFFORT, traits.priority());
96 EXPECT_TRUE(traits.shutdown_behavior_set_explicitly());
97 EXPECT_EQ(TaskShutdownBehavior::BLOCK_SHUTDOWN, traits.shutdown_behavior());
98 EXPECT_TRUE(traits.thread_policy_set_explicitly());
99 EXPECT_EQ(ThreadPolicy::MUST_USE_FOREGROUND, traits.thread_policy());
100 EXPECT_TRUE(traits.may_block());
101 EXPECT_TRUE(traits.with_base_sync_primitives());
102 }
103
TEST(TaskTraitsTest,Copy)104 TEST(TaskTraitsTest, Copy) {
105 constexpr TaskTraits traits = {
106 TaskPriority::BEST_EFFORT, TaskShutdownBehavior::BLOCK_SHUTDOWN,
107 ThreadPolicy::MUST_USE_FOREGROUND, MayBlock(), WithBaseSyncPrimitives()};
108 constexpr TaskTraits traits_copy(traits);
109
110 EXPECT_EQ(traits, traits_copy);
111
112 EXPECT_EQ(traits.priority(), traits_copy.priority());
113 EXPECT_EQ(traits.shutdown_behavior_set_explicitly(),
114 traits_copy.shutdown_behavior_set_explicitly());
115 EXPECT_EQ(traits.shutdown_behavior(), traits_copy.shutdown_behavior());
116 EXPECT_EQ(traits.thread_policy_set_explicitly(),
117 traits_copy.thread_policy_set_explicitly());
118 EXPECT_EQ(traits.thread_policy(), traits_copy.thread_policy());
119 EXPECT_EQ(traits.may_block(), traits_copy.may_block());
120 EXPECT_EQ(traits.with_base_sync_primitives(),
121 traits_copy.with_base_sync_primitives());
122 }
123
124 } // namespace base
125