Home | History | Annotate | Download | only in timer
      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 "base/timer/mock_timer.h"
      6 
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 
      9 namespace {
     10 
     11 void CallMeMaybe(int *number) {
     12   (*number)++;
     13 }
     14 
     15 TEST(MockTimerTest, FiresOnce) {
     16   int calls = 0;
     17   base::MockTimer timer(false, false);
     18   base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
     19   timer.Start(FROM_HERE, delay,
     20               base::Bind(&CallMeMaybe,
     21                          base::Unretained(&calls)));
     22   EXPECT_EQ(delay, timer.GetCurrentDelay());
     23   EXPECT_TRUE(timer.IsRunning());
     24   timer.Fire();
     25   EXPECT_FALSE(timer.IsRunning());
     26   EXPECT_EQ(1, calls);
     27 }
     28 
     29 TEST(MockTimerTest, FiresRepeatedly) {
     30   int calls = 0;
     31   base::MockTimer timer(true, true);
     32   base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
     33   timer.Start(FROM_HERE, delay,
     34               base::Bind(&CallMeMaybe,
     35                          base::Unretained(&calls)));
     36   timer.Fire();
     37   EXPECT_TRUE(timer.IsRunning());
     38   timer.Fire();
     39   timer.Fire();
     40   EXPECT_TRUE(timer.IsRunning());
     41   EXPECT_EQ(3, calls);
     42 }
     43 
     44 TEST(MockTimerTest, Stops) {
     45   int calls = 0;
     46   base::MockTimer timer(true, true);
     47   base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
     48   timer.Start(FROM_HERE, delay,
     49               base::Bind(&CallMeMaybe,
     50                          base::Unretained(&calls)));
     51   EXPECT_TRUE(timer.IsRunning());
     52   timer.Stop();
     53   EXPECT_FALSE(timer.IsRunning());
     54 }
     55 
     56 class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> {
     57  public:
     58   HasWeakPtr() {}
     59   virtual ~HasWeakPtr() {}
     60 
     61  private:
     62   DISALLOW_COPY_AND_ASSIGN(HasWeakPtr);
     63 };
     64 
     65 void DoNothingWithWeakPtr(HasWeakPtr* has_weak_ptr) {
     66 }
     67 
     68 TEST(MockTimerTest, DoesNotRetainClosure) {
     69   HasWeakPtr *has_weak_ptr = new HasWeakPtr();
     70   base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr());
     71   base::MockTimer timer(false, false);
     72   base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
     73   ASSERT_TRUE(weak_ptr.get());
     74   timer.Start(FROM_HERE, delay,
     75               base::Bind(&DoNothingWithWeakPtr,
     76                          base::Owned(has_weak_ptr)));
     77   ASSERT_TRUE(weak_ptr.get());
     78   timer.Fire();
     79   ASSERT_FALSE(weak_ptr.get());
     80 }
     81 
     82 }  // namespace
     83