callback_tracker_unittest.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1// Copyright 2014 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 "chrome/browser/sync_file_system/drive_backend/callback_tracker.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace sync_file_system {
10namespace drive_backend {
11
12namespace {
13
14void Receiver(bool* called) {
15  DCHECK(called);
16  EXPECT_FALSE(*called);
17  *called = true;
18}
19
20}  // namespace
21
22TEST(CallbackTrackerTest, AbortAll) {
23  CallbackTracker tracker;
24
25  bool aborted = false;
26  bool invoked = false;
27  base::Closure callback = tracker.Register(base::Bind(&Receiver, &aborted),
28                                            base::Bind(&Receiver, &invoked));
29  tracker.AbortAll();
30  EXPECT_TRUE(aborted);
31  EXPECT_FALSE(invoked);
32
33  callback.Run();
34  EXPECT_TRUE(aborted);
35  EXPECT_FALSE(invoked);
36}
37
38TEST(CallbackTrackerTest, Invoke) {
39  CallbackTracker tracker;
40
41  bool aborted = false;
42  bool invoked = false;
43  base::Closure callback = tracker.Register(base::Bind(&Receiver, &aborted),
44                                            base::Bind(&Receiver, &invoked));
45  callback.Run();
46  EXPECT_FALSE(aborted);
47  EXPECT_TRUE(invoked);
48
49  // Second call should not do anything.
50  invoked = false;
51  callback.Run();
52  EXPECT_FALSE(invoked);
53
54  tracker.AbortAll();
55  EXPECT_FALSE(aborted);
56}
57
58}  // namespace drive_backend
59}  // namespace sync_file_system
60