blob: 3662318cc53b2038bd85db5cb5eafb740aa6ed69 [file] [log] [blame]
// Copyright 2017 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 "ash/system/power/power_button_test_base.h"
#include "ash/public/cpp/ash_switches.h"
#include "ash/session/session_controller.h"
#include "ash/session/test_session_controller_client.h"
#include "ash/shell.h"
#include "ash/shell_test_api.h"
#include "ash/system/power/power_button_controller.h"
#include "ash/system/power/power_button_controller_test_api.h"
#include "ash/wm/lock_state_controller.h"
#include "ash/wm/lock_state_controller_test_api.h"
#include "ash/wm/tablet_mode/tablet_mode_controller.h"
#include "base/command_line.h"
#include "base/memory/ptr_util.h"
#include "base/test/simple_test_tick_clock.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_power_manager_client.h"
#include "chromeos/dbus/fake_session_manager_client.h"
#include "ui/events/event.h"
#include "ui/events/test/event_generator.h"
namespace ash {
PowerButtonTestBase::PowerButtonTestBase() = default;
PowerButtonTestBase::~PowerButtonTestBase() = default;
void PowerButtonTestBase::SetUp() {
// This also initializes DBusThreadManager.
std::unique_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
chromeos::DBusThreadManager::GetSetterForTesting();
power_manager_client_ = new chromeos::FakePowerManagerClient();
dbus_setter->SetPowerManagerClient(base::WrapUnique(power_manager_client_));
session_manager_client_ = new chromeos::FakeSessionManagerClient;
dbus_setter->SetSessionManagerClient(
base::WrapUnique(session_manager_client_));
AshTestBase::SetUp();
lock_state_controller_ = Shell::Get()->lock_state_controller();
lock_state_test_api_ =
std::make_unique<LockStateControllerTestApi>(lock_state_controller_);
}
void PowerButtonTestBase::TearDown() {
AshTestBase::TearDown();
chromeos::DBusThreadManager::Shutdown();
}
void PowerButtonTestBase::ResetPowerButtonController() {
ShellTestApi().ResetPowerButtonControllerForTest();
power_button_test_api_ = nullptr;
InitPowerButtonControllerMembers(
chromeos::PowerManagerClient::TabletMode::UNSUPPORTED);
}
void PowerButtonTestBase::InitPowerButtonControllerMembers(
chromeos::PowerManagerClient::TabletMode initial_tablet_mode_switch_state) {
power_button_controller_ = Shell::Get()->power_button_controller();
power_button_test_api_ =
std::make_unique<PowerButtonControllerTestApi>(power_button_controller_);
power_button_test_api_->SetTickClock(&tick_clock_);
if (initial_tablet_mode_switch_state !=
chromeos::PowerManagerClient::TabletMode::UNSUPPORTED) {
SetTabletModeSwitchState(initial_tablet_mode_switch_state);
} else {
screenshot_controller_ = nullptr;
}
}
void PowerButtonTestBase::SetTabletModeSwitchState(
chromeos::PowerManagerClient::TabletMode tablet_mode_switch_state) {
power_button_controller_->OnGetSwitchStates(
chromeos::PowerManagerClient::SwitchStates{
chromeos::PowerManagerClient::LidState::OPEN,
tablet_mode_switch_state});
screenshot_controller_ = power_button_test_api_->GetScreenshotController();
}
void PowerButtonTestBase::PressPowerButton() {
power_button_controller_->PowerButtonEventReceived(true,
tick_clock_.NowTicks());
}
void PowerButtonTestBase::ReleasePowerButton() {
power_button_controller_->PowerButtonEventReceived(false,
tick_clock_.NowTicks());
}
void PowerButtonTestBase::PressKey(ui::KeyboardCode key_code) {
GetEventGenerator()->PressKey(key_code, ui::EF_NONE);
}
void PowerButtonTestBase::ReleaseKey(ui::KeyboardCode key_code) {
GetEventGenerator()->ReleaseKey(key_code, ui::EF_NONE);
}
void PowerButtonTestBase::GenerateMouseMoveEvent() {
GetEventGenerator()->MoveMouseTo(10, 10);
}
void PowerButtonTestBase::Initialize(
PowerButtonController::ButtonType button_type,
LoginStatus status) {
power_button_test_api_->SetPowerButtonType(button_type);
if (status == LoginStatus::NOT_LOGGED_IN)
ClearLogin();
else
CreateUserSessions(1);
if (status == LoginStatus::GUEST)
SetCanLockScreen(false);
}
void PowerButtonTestBase::LockScreen() {
lock_state_controller_->OnLockStateChanged(true);
Shell::Get()->session_controller()->LockScreenAndFlushForTest();
}
void PowerButtonTestBase::UnlockScreen() {
lock_state_controller_->OnLockStateChanged(false);
GetSessionControllerClient()->UnlockScreen();
}
void PowerButtonTestBase::EnableTabletMode(bool enable) {
Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(enable);
}
void PowerButtonTestBase::AdvanceClockToAvoidIgnoring() {
tick_clock_.Advance(PowerButtonController::kIgnoreRepeatedButtonUpDelay +
base::TimeDelta::FromMilliseconds(1));
}
} // namespace ash