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