power_button_test_base.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. // Copyright 2017 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 "ash/system/power/power_button_test_base.h"
  5. #include "ash/public/cpp/test/shell_test_api.h"
  6. #include "ash/session/session_controller_impl.h"
  7. #include "ash/session/test_session_controller_client.h"
  8. #include "ash/shell.h"
  9. #include "ash/system/power/power_button_controller.h"
  10. #include "ash/system/power/power_button_controller_test_api.h"
  11. #include "ash/wm/lock_state_controller.h"
  12. #include "ash/wm/lock_state_controller_test_api.h"
  13. #include "ash/wm/tablet_mode/tablet_mode_controller.h"
  14. #include "base/command_line.h"
  15. #include "base/memory/ptr_util.h"
  16. #include "base/test/simple_test_tick_clock.h"
  17. #include "chromeos/dbus/power/power_manager_client.h"
  18. #include "ui/events/event.h"
  19. #include "ui/events/test/event_generator.h"
  20. namespace ash {
  21. PowerButtonTestBase::PowerButtonTestBase() = default;
  22. PowerButtonTestBase::PowerButtonTestBase(
  23. base::test::TaskEnvironment::TimeSource time)
  24. : AshTestBase(time) {}
  25. PowerButtonTestBase::~PowerButtonTestBase() = default;
  26. void PowerButtonTestBase::SetUp() {
  27. AshTestBase::SetUp();
  28. lock_state_controller_ = Shell::Get()->lock_state_controller();
  29. lock_state_test_api_ =
  30. std::make_unique<LockStateControllerTestApi>(lock_state_controller_);
  31. }
  32. void PowerButtonTestBase::TearDown() {
  33. AshTestBase::TearDown();
  34. }
  35. void PowerButtonTestBase::ResetPowerButtonController() {
  36. ShellTestApi().ResetPowerButtonControllerForTest();
  37. power_button_test_api_ = nullptr;
  38. InitPowerButtonControllerMembers(
  39. chromeos::PowerManagerClient::TabletMode::UNSUPPORTED);
  40. }
  41. void PowerButtonTestBase::InitPowerButtonControllerMembers(
  42. chromeos::PowerManagerClient::TabletMode initial_tablet_mode_switch_state) {
  43. power_button_controller_ = Shell::Get()->power_button_controller();
  44. power_button_test_api_ =
  45. std::make_unique<PowerButtonControllerTestApi>(power_button_controller_);
  46. power_button_test_api_->SetTickClock(&tick_clock_);
  47. if (initial_tablet_mode_switch_state !=
  48. chromeos::PowerManagerClient::TabletMode::UNSUPPORTED) {
  49. SetTabletModeSwitchState(initial_tablet_mode_switch_state);
  50. } else {
  51. screenshot_controller_ = nullptr;
  52. }
  53. }
  54. void PowerButtonTestBase::SetTabletModeSwitchState(
  55. chromeos::PowerManagerClient::TabletMode tablet_mode_switch_state) {
  56. power_button_controller_->OnGetSwitchStates(
  57. chromeos::PowerManagerClient::SwitchStates{
  58. chromeos::PowerManagerClient::LidState::OPEN,
  59. tablet_mode_switch_state});
  60. screenshot_controller_ = power_button_test_api_->GetScreenshotController();
  61. }
  62. void PowerButtonTestBase::LaunchArcPowerButtonEvent() {
  63. power_button_controller_->OnArcPowerButtonMenuEvent();
  64. }
  65. void PowerButtonTestBase::PressPowerButton() {
  66. power_button_controller_->PowerButtonEventReceived(true,
  67. tick_clock_.NowTicks());
  68. }
  69. void PowerButtonTestBase::ReleasePowerButton() {
  70. power_button_controller_->PowerButtonEventReceived(false,
  71. tick_clock_.NowTicks());
  72. }
  73. void PowerButtonTestBase::PressKey(ui::KeyboardCode key_code) {
  74. GetEventGenerator()->PressKey(key_code, ui::EF_NONE);
  75. }
  76. void PowerButtonTestBase::ReleaseKey(ui::KeyboardCode key_code) {
  77. GetEventGenerator()->ReleaseKey(key_code, ui::EF_NONE);
  78. }
  79. void PowerButtonTestBase::GenerateMouseMoveEvent() {
  80. GetEventGenerator()->MoveMouseTo(10, 10);
  81. }
  82. void PowerButtonTestBase::Initialize(
  83. PowerButtonController::ButtonType button_type,
  84. LoginStatus status) {
  85. power_button_test_api_->SetPowerButtonType(button_type);
  86. if (status == LoginStatus::NOT_LOGGED_IN)
  87. ClearLogin();
  88. else
  89. CreateUserSessions(1);
  90. if (status == LoginStatus::GUEST)
  91. SetCanLockScreen(false);
  92. }
  93. void PowerButtonTestBase::LockScreen() {
  94. lock_state_controller_->OnLockStateChanged(true);
  95. GetSessionControllerClient()->LockScreen();
  96. }
  97. void PowerButtonTestBase::UnlockScreen() {
  98. lock_state_controller_->OnLockStateChanged(false);
  99. GetSessionControllerClient()->UnlockScreen();
  100. }
  101. void PowerButtonTestBase::EnableTabletMode(bool enable) {
  102. Shell::Get()->tablet_mode_controller()->SetEnabledForTest(enable);
  103. }
  104. void PowerButtonTestBase::AdvanceClockToAvoidIgnoring() {
  105. tick_clock_.Advance(PowerButtonController::kIgnoreRepeatedButtonUpDelay +
  106. base::Milliseconds(1));
  107. }
  108. } // namespace ash