xref: /aosp_15_r20/external/cronet/base/task/task_traits_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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