Home | History | Annotate | Download | only in drive_backend
      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 
      9 namespace sync_file_system {
     10 namespace drive_backend {
     11 
     12 namespace {
     13 
     14 void Receiver(bool* called) {
     15   DCHECK(called);
     16   EXPECT_FALSE(*called);
     17   *called = true;
     18 }
     19 
     20 }  // namespace
     21 
     22 TEST(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 
     38 TEST(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