You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.2 KiB
81 lines
2.2 KiB
4 months ago
|
// Copyright 2014 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include "base/timer/mock_timer.h"
|
||
|
|
||
|
#include "base/macros.h"
|
||
|
#include "testing/gtest/include/gtest/gtest.h"
|
||
|
|
||
|
namespace {
|
||
|
|
||
|
void CallMeMaybe(int *number) {
|
||
|
(*number)++;
|
||
|
}
|
||
|
|
||
|
TEST(MockTimerTest, FiresOnce) {
|
||
|
int calls = 0;
|
||
|
base::MockOneShotTimer timer;
|
||
|
base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
|
||
|
timer.Start(FROM_HERE, delay,
|
||
|
base::Bind(&CallMeMaybe,
|
||
|
base::Unretained(&calls)));
|
||
|
EXPECT_EQ(delay, timer.GetCurrentDelay());
|
||
|
EXPECT_TRUE(timer.IsRunning());
|
||
|
timer.Fire();
|
||
|
EXPECT_FALSE(timer.IsRunning());
|
||
|
EXPECT_EQ(1, calls);
|
||
|
}
|
||
|
|
||
|
TEST(MockTimerTest, FiresRepeatedly) {
|
||
|
int calls = 0;
|
||
|
base::MockRepeatingTimer timer;
|
||
|
base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
|
||
|
timer.Start(FROM_HERE, delay,
|
||
|
base::Bind(&CallMeMaybe,
|
||
|
base::Unretained(&calls)));
|
||
|
timer.Fire();
|
||
|
EXPECT_TRUE(timer.IsRunning());
|
||
|
timer.Fire();
|
||
|
timer.Fire();
|
||
|
EXPECT_TRUE(timer.IsRunning());
|
||
|
EXPECT_EQ(3, calls);
|
||
|
}
|
||
|
|
||
|
TEST(MockTimerTest, Stops) {
|
||
|
int calls = 0;
|
||
|
base::MockRepeatingTimer timer;
|
||
|
base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
|
||
|
timer.Start(FROM_HERE, delay,
|
||
|
base::Bind(&CallMeMaybe,
|
||
|
base::Unretained(&calls)));
|
||
|
EXPECT_TRUE(timer.IsRunning());
|
||
|
timer.Stop();
|
||
|
EXPECT_FALSE(timer.IsRunning());
|
||
|
}
|
||
|
|
||
|
class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> {
|
||
|
public:
|
||
|
HasWeakPtr() = default;
|
||
|
virtual ~HasWeakPtr() = default;
|
||
|
|
||
|
private:
|
||
|
DISALLOW_COPY_AND_ASSIGN(HasWeakPtr);
|
||
|
};
|
||
|
|
||
|
TEST(MockTimerTest, DoesNotRetainClosure) {
|
||
|
HasWeakPtr *has_weak_ptr = new HasWeakPtr();
|
||
|
base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr());
|
||
|
base::MockOneShotTimer timer;
|
||
|
base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
|
||
|
ASSERT_TRUE(weak_ptr.get());
|
||
|
timer.Start(FROM_HERE, delay,
|
||
|
base::Bind(base::DoNothing::Repeatedly<HasWeakPtr*>(),
|
||
|
base::Owned(has_weak_ptr)));
|
||
|
ASSERT_TRUE(weak_ptr.get());
|
||
|
timer.Fire();
|
||
|
ASSERT_FALSE(weak_ptr.get());
|
||
|
}
|
||
|
|
||
|
} // namespace
|