| // Copyright 2018 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/rotation/rotation_lock_feature_pod_controller.h" |
| |
| #include "ash/shell.h" |
| #include "ash/system/unified/feature_pod_button.h" |
| #include "ash/test/ash_test_base.h" |
| #include "ash/wm/tablet_mode/tablet_mode_controller.h" |
| #include "base/command_line.h" |
| #include "ui/display/display_switches.h" |
| |
| namespace ash { |
| |
| class RotationLockFeaturePodControllerTest : public AshTestBase { |
| public: |
| RotationLockFeaturePodControllerTest() = default; |
| ~RotationLockFeaturePodControllerTest() override = default; |
| |
| // AshTestBase: |
| void SetUp() override; |
| void TearDown() override; |
| |
| protected: |
| void SetUpController(); |
| |
| RotationLockFeaturePodController* controller() const { |
| return controller_.get(); |
| } |
| |
| FeaturePodButton* button_view() const { return button_view_.get(); } |
| |
| private: |
| std::unique_ptr<RotationLockFeaturePodController> controller_; |
| std::unique_ptr<FeaturePodButton> button_view_; |
| |
| DISALLOW_COPY_AND_ASSIGN(RotationLockFeaturePodControllerTest); |
| }; |
| |
| void RotationLockFeaturePodControllerTest::SetUp() { |
| // The Display used for testing is not an internal display. This flag |
| // allows for DisplayManager to treat it as one. |
| base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| ::switches::kUseFirstDisplayAsInternal); |
| AshTestBase::SetUp(); |
| } |
| |
| void RotationLockFeaturePodControllerTest::TearDown() { |
| controller_.reset(); |
| button_view_.reset(); |
| AshTestBase::TearDown(); |
| } |
| |
| void RotationLockFeaturePodControllerTest::SetUpController() { |
| controller_ = std::make_unique<RotationLockFeaturePodController>(); |
| button_view_.reset(controller_->CreateButton()); |
| } |
| |
| // Tests that when the button is initially created, that it is created |
| // not visible. |
| TEST_F(RotationLockFeaturePodControllerTest, CreateButton) { |
| SetUpController(); |
| EXPECT_FALSE(button_view()->visible()); |
| } |
| |
| // Tests that when the button is created, while TabletMode is active, |
| // that it is visible. |
| TEST_F(RotationLockFeaturePodControllerTest, CreateButtonDuringTabletMode) { |
| Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); |
| SetUpController(); |
| EXPECT_TRUE(button_view()->visible()); |
| Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(false); |
| EXPECT_FALSE(button_view()->visible()); |
| } |
| |
| // Tests that the enabling of TabletMode affects a previously created default |
| // view, changing the visibility. |
| TEST_F(RotationLockFeaturePodControllerTest, |
| ButtonVisibilityChangesDuringTabletMode) { |
| SetUpController(); |
| Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); |
| EXPECT_TRUE(button_view()->visible()); |
| Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(false); |
| EXPECT_FALSE(button_view()->visible()); |
| } |
| |
| TEST_F(RotationLockFeaturePodControllerTest, OnIconPressed) { |
| SetUpController(); |
| TabletModeController* tablet_mode_controller = |
| Shell::Get()->tablet_mode_controller(); |
| ScreenOrientationController* screen_orientation_controller = |
| Shell::Get()->screen_orientation_controller(); |
| ASSERT_FALSE(screen_orientation_controller->rotation_locked()); |
| tablet_mode_controller->EnableTabletModeWindowManager(true); |
| ASSERT_TRUE(button_view()->visible()); |
| EXPECT_FALSE(button_view()->IsToggled()); |
| |
| controller()->OnIconPressed(); |
| EXPECT_TRUE(screen_orientation_controller->rotation_locked()); |
| EXPECT_TRUE(button_view()->visible()); |
| EXPECT_TRUE(button_view()->IsToggled()); |
| |
| controller()->OnIconPressed(); |
| EXPECT_FALSE(screen_orientation_controller->rotation_locked()); |
| EXPECT_TRUE(button_view()->visible()); |
| EXPECT_FALSE(button_view()->IsToggled()); |
| |
| tablet_mode_controller->EnableTabletModeWindowManager(false); |
| } |
| |
| } // namespace ash |