xref: /aosp_15_r20/external/cronet/base/task/default_delayed_task_handle_delegate_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2021 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/default_delayed_task_handle_delegate.h"
6 
7 #include "base/functional/callback_helpers.h"
8 #include "base/task/delayed_task_handle.h"
9 #include "base/test/bind.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace base {
13 
14 // Tests that running the bound callback invalidates the handle.
TEST(DefaultDelayedTaskHandleDelegateTest,RunTask)15 TEST(DefaultDelayedTaskHandleDelegateTest, RunTask) {
16   auto delegate = std::make_unique<DefaultDelayedTaskHandleDelegate>();
17   EXPECT_FALSE(delegate->IsValid());
18 
19   auto bound_callback = delegate->BindCallback(DoNothing());
20   EXPECT_TRUE(delegate->IsValid());
21 
22   DelayedTaskHandle delayed_task_handle(std::move(delegate));
23   EXPECT_TRUE(delayed_task_handle.IsValid());
24 
25   std::move(bound_callback).Run();
26   EXPECT_FALSE(delayed_task_handle.IsValid());
27 }
28 
29 // Tests that DefaultDelayedTaskHandleDelegate supports CancelTask().
TEST(DefaultDelayedTaskHandleDelegateTest,CancelTask)30 TEST(DefaultDelayedTaskHandleDelegateTest, CancelTask) {
31   auto delegate = std::make_unique<DefaultDelayedTaskHandleDelegate>();
32   EXPECT_FALSE(delegate->IsValid());
33 
34   auto bound_callback = delegate->BindCallback(DoNothing());
35   EXPECT_TRUE(delegate->IsValid());
36 
37   DelayedTaskHandle delayed_task_handle(std::move(delegate));
38   EXPECT_TRUE(delayed_task_handle.IsValid());
39 
40   delayed_task_handle.CancelTask();
41   EXPECT_FALSE(delayed_task_handle.IsValid());
42   EXPECT_TRUE(bound_callback.IsCancelled());
43 }
44 
45 // Tests that destroying the bound callback invalidates the handle.
TEST(DefaultDelayedTaskHandleDelegateTest,DestroyTask)46 TEST(DefaultDelayedTaskHandleDelegateTest, DestroyTask) {
47   auto delegate = std::make_unique<DefaultDelayedTaskHandleDelegate>();
48   EXPECT_FALSE(delegate->IsValid());
49 
50   auto bound_callback = delegate->BindCallback(DoNothing());
51   EXPECT_TRUE(delegate->IsValid());
52 
53   DelayedTaskHandle delayed_task_handle(std::move(delegate));
54   EXPECT_TRUE(delayed_task_handle.IsValid());
55 
56   bound_callback = OnceClosure();
57   EXPECT_FALSE(delayed_task_handle.IsValid());
58 }
59 
60 // Tests that the handle is invalid while the task is running.
TEST(DefaultDelayedTaskHandleDelegateTest,HandleInvalidInsideCallback)61 TEST(DefaultDelayedTaskHandleDelegateTest, HandleInvalidInsideCallback) {
62   auto delegate = std::make_unique<DefaultDelayedTaskHandleDelegate>();
63   EXPECT_FALSE(delegate->IsValid());
64 
65   auto bound_callback = delegate->BindCallback(
66       BindLambdaForTesting([delegate = delegate.get()]() {
67         // Check that the delegate is invalid inside the callback.
68         EXPECT_FALSE(delegate->IsValid());
69       }));
70   EXPECT_TRUE(delegate->IsValid());
71 
72   DelayedTaskHandle delayed_task_handle(std::move(delegate));
73   EXPECT_TRUE(delayed_task_handle.IsValid());
74 
75   std::move(bound_callback).Run();
76   EXPECT_FALSE(delayed_task_handle.IsValid());
77 }
78 
79 }  // namespace base
80