mock_timer_unittest.cc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #include "base/timer/mock_timer.h"
  5. #include "base/bind.h"
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. namespace {
  8. void CallMeMaybe(int *number) {
  9. (*number)++;
  10. }
  11. TEST(MockTimerTest, FiresOnce) {
  12. int calls = 0;
  13. base::MockOneShotTimer timer;
  14. base::TimeDelta delay = base::Seconds(2);
  15. timer.Start(FROM_HERE, delay,
  16. base::BindOnce(&CallMeMaybe, base::Unretained(&calls)));
  17. EXPECT_EQ(delay, timer.GetCurrentDelay());
  18. EXPECT_TRUE(timer.IsRunning());
  19. timer.Fire();
  20. EXPECT_FALSE(timer.IsRunning());
  21. EXPECT_EQ(1, calls);
  22. }
  23. TEST(MockTimerTest, FiresRepeatedly) {
  24. int calls = 0;
  25. base::MockRepeatingTimer timer;
  26. base::TimeDelta delay = base::Seconds(2);
  27. timer.Start(FROM_HERE, delay,
  28. base::BindRepeating(&CallMeMaybe, base::Unretained(&calls)));
  29. timer.Fire();
  30. EXPECT_TRUE(timer.IsRunning());
  31. timer.Fire();
  32. timer.Fire();
  33. EXPECT_TRUE(timer.IsRunning());
  34. EXPECT_EQ(3, calls);
  35. }
  36. TEST(MockTimerTest, Stops) {
  37. int calls = 0;
  38. base::MockRepeatingTimer timer;
  39. base::TimeDelta delay = base::Seconds(2);
  40. timer.Start(FROM_HERE, delay,
  41. base::BindRepeating(&CallMeMaybe, base::Unretained(&calls)));
  42. EXPECT_TRUE(timer.IsRunning());
  43. timer.Stop();
  44. EXPECT_FALSE(timer.IsRunning());
  45. }
  46. class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> {
  47. public:
  48. HasWeakPtr() = default;
  49. HasWeakPtr(const HasWeakPtr&) = delete;
  50. HasWeakPtr& operator=(const HasWeakPtr&) = delete;
  51. virtual ~HasWeakPtr() = default;
  52. };
  53. TEST(MockTimerTest, DoesNotRetainClosure) {
  54. HasWeakPtr *has_weak_ptr = new HasWeakPtr();
  55. base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr());
  56. base::MockOneShotTimer timer;
  57. base::TimeDelta delay = base::Seconds(2);
  58. ASSERT_TRUE(weak_ptr.get());
  59. timer.Start(FROM_HERE, delay,
  60. base::BindOnce([](HasWeakPtr*) {}, base::Owned(has_weak_ptr)));
  61. ASSERT_TRUE(weak_ptr.get());
  62. timer.Fire();
  63. ASSERT_FALSE(weak_ptr.get());
  64. }
  65. } // namespace