| Index: ash/system/chromeos/session/logout_confirmation_controller_unittest.cc
|
| diff --git a/ash/system/chromeos/session/logout_confirmation_controller_unittest.cc b/ash/system/chromeos/session/logout_confirmation_controller_unittest.cc
|
| index fb9d3791ad18af6c10bd660e3e6937111be144b9..f459d8aa29881473460c1017dc479d0efef57bdd 100644
|
| --- a/ash/system/chromeos/session/logout_confirmation_controller_unittest.cc
|
| +++ b/ash/system/chromeos/session/logout_confirmation_controller_unittest.cc
|
| @@ -4,149 +4,14 @@
|
|
|
| #include "ash/system/chromeos/session/logout_confirmation_controller.h"
|
|
|
| -#include <queue>
|
| -#include <utility>
|
| -#include <vector>
|
| -
|
| #include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| -#include "base/compiler_specific.h"
|
| -#include "base/location.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/single_thread_task_runner.h"
|
| +#include "base/test/test_mock_time_task_runner.h"
|
| #include "base/thread_task_runner_handle.h"
|
| -#include "base/time/tick_clock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace ash {
|
| -namespace {
|
| -
|
| -// A SingleThreadTaskRunner that mocks the current time and allows it to be
|
| -// fast-forwarded. TODO(bartfab): Copies of this class exist in several tests.
|
| -// Consolidate them (crbug.com/329911).
|
| -class MockTimeSingleThreadTaskRunner : public base::SingleThreadTaskRunner {
|
| - public:
|
| - MockTimeSingleThreadTaskRunner();
|
| -
|
| - // base::SingleThreadTaskRunner:
|
| - virtual bool RunsTasksOnCurrentThread() const override;
|
| - virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) override;
|
| - virtual bool PostNonNestableDelayedTask(
|
| - const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) override;
|
| -
|
| - const base::TimeTicks& GetCurrentTime() const;
|
| -
|
| - void FastForwardBy(base::TimeDelta delta);
|
| - void FastForwardUntilNoTasksRemain();
|
| -
|
| - private:
|
| - // Strict weak temporal ordering of tasks.
|
| - class TemporalOrder {
|
| - public:
|
| - bool operator()(
|
| - const std::pair<base::TimeTicks, base::Closure>& first_task,
|
| - const std::pair<base::TimeTicks, base::Closure>& second_task) const;
|
| - };
|
| -
|
| - virtual ~MockTimeSingleThreadTaskRunner();
|
| -
|
| - base::TimeTicks now_;
|
| - std::priority_queue<std::pair<base::TimeTicks, base::Closure>,
|
| - std::vector<std::pair<base::TimeTicks, base::Closure> >,
|
| - TemporalOrder> tasks_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockTimeSingleThreadTaskRunner);
|
| -};
|
| -
|
| -// A base::TickClock that uses a MockTimeSingleThreadTaskRunner as the source of
|
| -// the current time.
|
| -class MockClock : public base::TickClock {
|
| - public:
|
| - explicit MockClock(scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner);
|
| - virtual ~MockClock();
|
| -
|
| - // base::TickClock:
|
| - virtual base::TimeTicks NowTicks() override;
|
| -
|
| - private:
|
| - scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockClock);
|
| -};
|
| -
|
| -
|
| -MockTimeSingleThreadTaskRunner::MockTimeSingleThreadTaskRunner() {
|
| -}
|
| -
|
| -bool MockTimeSingleThreadTaskRunner::RunsTasksOnCurrentThread() const {
|
| - return true;
|
| -}
|
| -
|
| -bool MockTimeSingleThreadTaskRunner::PostDelayedTask(
|
| - const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) {
|
| - tasks_.push(std::make_pair(now_ + delay, task));
|
| - return true;
|
| -}
|
| -
|
| -bool MockTimeSingleThreadTaskRunner::PostNonNestableDelayedTask(
|
| - const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) {
|
| - NOTREACHED();
|
| - return false;
|
| -}
|
| -
|
| -const base::TimeTicks& MockTimeSingleThreadTaskRunner::GetCurrentTime() const {
|
| - return now_;
|
| -}
|
| -
|
| -void MockTimeSingleThreadTaskRunner::FastForwardBy(base::TimeDelta delta) {
|
| - const base::TimeTicks latest = now_ + delta;
|
| - while (!tasks_.empty() && tasks_.top().first <= latest) {
|
| - now_ = tasks_.top().first;
|
| - base::Closure task = tasks_.top().second;
|
| - tasks_.pop();
|
| - task.Run();
|
| - }
|
| - now_ = latest;
|
| -}
|
| -
|
| -void MockTimeSingleThreadTaskRunner::FastForwardUntilNoTasksRemain() {
|
| - while (!tasks_.empty()) {
|
| - now_ = tasks_.top().first;
|
| - base::Closure task = tasks_.top().second;
|
| - tasks_.pop();
|
| - task.Run();
|
| - }
|
| -}
|
| -
|
| -bool MockTimeSingleThreadTaskRunner::TemporalOrder::operator()(
|
| - const std::pair<base::TimeTicks, base::Closure>& first_task,
|
| - const std::pair<base::TimeTicks, base::Closure>& second_task) const {
|
| - return first_task.first > second_task.first;
|
| -}
|
| -
|
| -MockTimeSingleThreadTaskRunner::~MockTimeSingleThreadTaskRunner() {
|
| -}
|
| -
|
| -MockClock::MockClock(scoped_refptr<MockTimeSingleThreadTaskRunner> task_runner)
|
| - : task_runner_(task_runner) {
|
| -}
|
| -
|
| -MockClock::~MockClock() {
|
| -}
|
| -
|
| -base::TimeTicks MockClock::NowTicks() {
|
| - return task_runner_->GetCurrentTime();
|
| -}
|
| -
|
| -} // namespace
|
|
|
| class LogoutConfirmationControllerTest : public testing::Test {
|
| protected:
|
| @@ -157,7 +22,7 @@ class LogoutConfirmationControllerTest : public testing::Test {
|
|
|
| bool log_out_called_;
|
|
|
| - scoped_refptr<MockTimeSingleThreadTaskRunner> runner_;
|
| + scoped_refptr<base::TestMockTimeTaskRunner> runner_;
|
| base::ThreadTaskRunnerHandle runner_handle_;
|
|
|
| LogoutConfirmationController controller_;
|
| @@ -168,12 +33,11 @@ class LogoutConfirmationControllerTest : public testing::Test {
|
|
|
| LogoutConfirmationControllerTest::LogoutConfirmationControllerTest()
|
| : log_out_called_(false),
|
| - runner_(new MockTimeSingleThreadTaskRunner),
|
| + runner_(new base::TestMockTimeTaskRunner),
|
| runner_handle_(runner_),
|
| controller_(base::Bind(&LogoutConfirmationControllerTest::LogOut,
|
| base::Unretained(this))) {
|
| - controller_.SetClockForTesting(
|
| - scoped_ptr<base::TickClock>(new MockClock(runner_)));
|
| + controller_.SetClockForTesting(runner_->GetMockTickClock());
|
| }
|
|
|
| LogoutConfirmationControllerTest::~LogoutConfirmationControllerTest() {
|
| @@ -186,7 +50,7 @@ void LogoutConfirmationControllerTest::LogOut() {
|
| // Verifies that the user is logged out immediately if logout confirmation with
|
| // a zero-length countdown is requested.
|
| TEST_F(LogoutConfirmationControllerTest, ZeroDuration) {
|
| - controller_.ConfirmLogout(runner_->GetCurrentTime());
|
| + controller_.ConfirmLogout(runner_->GetCurrentMockTime());
|
| EXPECT_FALSE(log_out_called_);
|
| runner_->FastForwardBy(base::TimeDelta());
|
| EXPECT_TRUE(log_out_called_);
|
| @@ -195,7 +59,7 @@ TEST_F(LogoutConfirmationControllerTest, ZeroDuration) {
|
| // Verifies that the user is logged out when the countdown expires.
|
| TEST_F(LogoutConfirmationControllerTest, DurationExpired) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(9));
|
| EXPECT_FALSE(log_out_called_);
|
| @@ -208,12 +72,12 @@ TEST_F(LogoutConfirmationControllerTest, DurationExpired) {
|
| // out when the new countdown expires.
|
| TEST_F(LogoutConfirmationControllerTest, DurationShortened) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(30));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(30));
|
| EXPECT_FALSE(log_out_called_);
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(9));
|
| EXPECT_FALSE(log_out_called_);
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(9));
|
| EXPECT_FALSE(log_out_called_);
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(2));
|
| @@ -225,12 +89,12 @@ TEST_F(LogoutConfirmationControllerTest, DurationShortened) {
|
| // out when the original countdown expires.
|
| TEST_F(LogoutConfirmationControllerTest, DurationExtended) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(9));
|
| EXPECT_FALSE(log_out_called_);
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(2));
|
| EXPECT_TRUE(log_out_called_);
|
| }
|
| @@ -239,7 +103,7 @@ TEST_F(LogoutConfirmationControllerTest, DurationExtended) {
|
| // user is not logged out, even when the original countdown expires.
|
| TEST_F(LogoutConfirmationControllerTest, Lock) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| controller_.OnLockStateChanged(true);
|
| runner_->FastForwardUntilNoTasksRemain();
|
| @@ -250,7 +114,7 @@ TEST_F(LogoutConfirmationControllerTest, Lock) {
|
| // out immediately.
|
| TEST_F(LogoutConfirmationControllerTest, UserAccepted) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| controller_.OnLogoutConfirmed();
|
| EXPECT_TRUE(log_out_called_);
|
| @@ -260,7 +124,7 @@ TEST_F(LogoutConfirmationControllerTest, UserAccepted) {
|
| // out, even when the original countdown expires.
|
| TEST_F(LogoutConfirmationControllerTest, UserDenied) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| controller_.OnDialogClosed();
|
| runner_->FastForwardUntilNoTasksRemain();
|
| @@ -272,14 +136,14 @@ TEST_F(LogoutConfirmationControllerTest, UserDenied) {
|
| // expires.
|
| TEST_F(LogoutConfirmationControllerTest, DurationExpiredAfterDeniedRequest) {
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| controller_.OnDialogClosed();
|
| runner_->FastForwardUntilNoTasksRemain();
|
| EXPECT_FALSE(log_out_called_);
|
|
|
| controller_.ConfirmLogout(
|
| - runner_->GetCurrentTime() + base::TimeDelta::FromSeconds(10));
|
| + runner_->GetCurrentMockTime() + base::TimeDelta::FromSeconds(10));
|
| EXPECT_FALSE(log_out_called_);
|
| runner_->FastForwardBy(base::TimeDelta::FromSeconds(9));
|
| EXPECT_FALSE(log_out_called_);
|
|
|