OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 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 |
| 5 #include "ash/wm/maximize_mode/maximize_mode_controller.h" |
| 6 |
| 7 #include "ash/accelerometer/accelerometer_controller.h" |
| 8 #include "ash/shell.h" |
| 9 #include "ash/test/ash_test_base.h" |
| 10 #include "ui/gfx/vector3d_f.h" |
| 11 |
| 12 namespace ash { |
| 13 namespace internal { |
| 14 |
| 15 class MaximizeModeControllerTest : public test::AshTestBase { |
| 16 public: |
| 17 MaximizeModeControllerTest() {} |
| 18 virtual ~MaximizeModeControllerTest() {} |
| 19 |
| 20 virtual void SetUp() OVERRIDE { |
| 21 test::AshTestBase::SetUp(); |
| 22 Shell::GetInstance()->accelerometer_controller()->RemoveObserver( |
| 23 maximize_mode_controller()); |
| 24 } |
| 25 |
| 26 virtual void TearDown() OVERRIDE { |
| 27 Shell::GetInstance()->accelerometer_controller()->AddObserver( |
| 28 maximize_mode_controller()); |
| 29 test::AshTestBase::TearDown(); |
| 30 } |
| 31 |
| 32 MaximizeModeController* maximize_mode_controller() { |
| 33 return Shell::GetInstance()->maximize_mode_controller(); |
| 34 } |
| 35 |
| 36 void TriggerAccelerometerUpdate(const gfx::Vector3dF& base, |
| 37 const gfx::Vector3dF& lid) { |
| 38 maximize_mode_controller()->OnAccelerometerUpdated(base, lid); |
| 39 } |
| 40 |
| 41 bool IsMaximizeModeStarted() const { |
| 42 return Shell::GetInstance()->IsMaximizeModeWindowManagerEnabled(); |
| 43 } |
| 44 |
| 45 private: |
| 46 DISALLOW_COPY_AND_ASSIGN(MaximizeModeControllerTest); |
| 47 }; |
| 48 |
| 49 // Tests that opening the lid beyond 180 will enter touchview, and that it will |
| 50 // exit when the lid comes back from 180. Also tests the thresholds, i.e. it |
| 51 // will stick to the current mode. |
| 52 TEST_F(MaximizeModeControllerTest, EnterExitThresholds) { |
| 53 // For the simple test the base remains steady. |
| 54 gfx::Vector3dF base(0.0f, 0.0f, 1.0f); |
| 55 |
| 56 // Lid open 90 degrees. |
| 57 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 58 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 59 |
| 60 // Open just past 180. |
| 61 TriggerAccelerometerUpdate(base, gfx::Vector3dF(0.05f, 0.0f, -1.0f)); |
| 62 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 63 |
| 64 // Open up 270 degrees. |
| 65 TriggerAccelerometerUpdate(base, gfx::Vector3dF(1.0f, 0.0f, 0.0f)); |
| 66 EXPECT_TRUE(IsMaximizeModeStarted()); |
| 67 |
| 68 // Open up 360 degrees and appearing to be slightly past it (i.e. as if almost |
| 69 // closed). |
| 70 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-0.05f, 0.0f, 1.0f)); |
| 71 EXPECT_TRUE(IsMaximizeModeStarted()); |
| 72 |
| 73 // Open just before 180. |
| 74 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-0.05f, 0.0f, -1.0f)); |
| 75 EXPECT_TRUE(IsMaximizeModeStarted()); |
| 76 |
| 77 // Open 90 degrees. |
| 78 TriggerAccelerometerUpdate(base, gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 79 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 80 } |
| 81 |
| 82 // Tests that when the hinge is nearly vertically aligned, the current state |
| 83 // persists as the computed angle is highly inaccurate in this orientation. |
| 84 TEST_F(MaximizeModeControllerTest, HingeAligned) { |
| 85 // Laptop in normal orientation lid open 90 degrees. |
| 86 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| 87 gfx::Vector3dF(-1.0f, 0.0f, 0.0f)); |
| 88 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 89 |
| 90 // Completely vertical. |
| 91 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.0f), |
| 92 gfx::Vector3dF(0.0f, -1.0f, 0.0f)); |
| 93 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 94 |
| 95 // Close to vertical but with hinge appearing to be open 270 degrees. |
| 96 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.01f), |
| 97 gfx::Vector3dF(0.01f, -1.0f, 0.0f)); |
| 98 EXPECT_FALSE(IsMaximizeModeStarted()); |
| 99 |
| 100 // Flat and open 270 degrees should start maximize mode. |
| 101 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, 0.0f, 1.0f), |
| 102 gfx::Vector3dF(1.0f, 0.0f, 0.0f)); |
| 103 EXPECT_TRUE(IsMaximizeModeStarted()); |
| 104 |
| 105 // Normal 90 degree orientation but near vertical should stay in maximize |
| 106 // mode. |
| 107 TriggerAccelerometerUpdate(gfx::Vector3dF(0.0f, -1.0f, 0.01f), |
| 108 gfx::Vector3dF(-0.01f, -1.0f, 0.0f)); |
| 109 EXPECT_TRUE(IsMaximizeModeStarted()); |
| 110 } |
| 111 |
| 112 } // namespace internal |
| 113 } // namespace ash |
OLD | NEW |