| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 "chromeos/power/power_state_override.h" | |
| 6 | |
| 7 #include "base/basictypes.h" | |
| 8 #include "base/memory/scoped_ptr.h" | |
| 9 #include "base/message_loop.h" | |
| 10 #include "chromeos/dbus/mock_power_manager_client.h" | |
| 11 #include "chromeos/dbus/mock_dbus_thread_manager.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 | |
| 14 using ::testing::_; | |
| 15 using ::testing::Mock; | |
| 16 using ::testing::SaveArg; | |
| 17 | |
| 18 namespace chromeos { | |
| 19 | |
| 20 class PowerStateOverrideTest : public testing::Test { | |
| 21 protected: | |
| 22 PowerStateOverrideTest() : dbus_thread_manager_shut_down_(false) {} | |
| 23 virtual ~PowerStateOverrideTest() {} | |
| 24 | |
| 25 virtual void SetUp() { | |
| 26 MockDBusThreadManager* dbus_manager = new MockDBusThreadManager; | |
| 27 DBusThreadManager::InitializeForTesting(dbus_manager); | |
| 28 power_manager_client_ = dbus_manager->mock_power_manager_client(); | |
| 29 } | |
| 30 | |
| 31 virtual void TearDown() { | |
| 32 if (!dbus_thread_manager_shut_down_) | |
| 33 DBusThreadManager::Shutdown(); | |
| 34 } | |
| 35 | |
| 36 protected: | |
| 37 // Shuts down the DBusThreadManager prematurely. | |
| 38 void ShutDownDBusThreadManager() { | |
| 39 DBusThreadManager::Shutdown(); | |
| 40 dbus_thread_manager_shut_down_ = true; | |
| 41 } | |
| 42 | |
| 43 // Needed for PowerStateOverride's timer. | |
| 44 MessageLoop message_loop_; | |
| 45 | |
| 46 MockPowerManagerClient* power_manager_client_; // not owned | |
| 47 | |
| 48 // Has the singleton DBusThreadManager already been manually shut down? | |
| 49 bool dbus_thread_manager_shut_down_; | |
| 50 }; | |
| 51 | |
| 52 TEST_F(PowerStateOverrideTest, AddAndRemoveOverrides) { | |
| 53 // An arbitrary ID to return in response to a request with ID 0. | |
| 54 const uint32 kRequestId = 10; | |
| 55 | |
| 56 // Override bitmaps corresponding to different modes. | |
| 57 const uint32 kDisplayOverrides = | |
| 58 PowerManagerClient::DISABLE_IDLE_DIM | | |
| 59 PowerManagerClient::DISABLE_IDLE_BLANK | | |
| 60 PowerManagerClient::DISABLE_IDLE_SUSPEND; | |
| 61 const uint32 kSystemOverrides = | |
| 62 PowerManagerClient::DISABLE_IDLE_SUSPEND; | |
| 63 | |
| 64 // Block display sleep and pass a request ID to the callback. | |
| 65 chromeos::PowerStateRequestIdCallback request_id_callback; | |
| 66 EXPECT_CALL(*power_manager_client_, | |
| 67 RequestPowerStateOverrides(0, _, kDisplayOverrides, _)) | |
| 68 .WillOnce(SaveArg<3>(&request_id_callback)); | |
| 69 scoped_refptr<PowerStateOverride> override( | |
| 70 new PowerStateOverride(PowerStateOverride::BLOCK_DISPLAY_SLEEP)); | |
| 71 // Make sure our PostTask to the request power state overrides runs. | |
| 72 message_loop_.RunUntilIdle(); | |
| 73 request_id_callback.Run(kRequestId); | |
| 74 | |
| 75 // The request should be canceled when the PowerStateOverride is destroyed. | |
| 76 EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId)); | |
| 77 override = NULL; | |
| 78 | |
| 79 // Now send a request to just block the system from suspending. | |
| 80 EXPECT_CALL(*power_manager_client_, | |
| 81 RequestPowerStateOverrides(0, _, kSystemOverrides, _)) | |
| 82 .WillOnce(SaveArg<3>(&request_id_callback)); | |
| 83 override = new PowerStateOverride(PowerStateOverride::BLOCK_SYSTEM_SUSPEND); | |
| 84 // Make sure our PostTask to the request power state overrides runs. | |
| 85 message_loop_.RunUntilIdle(); | |
| 86 request_id_callback.Run(kRequestId); | |
| 87 EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId)); | |
| 88 override = NULL; | |
| 89 } | |
| 90 | |
| 91 TEST_F(PowerStateOverrideTest, DBusThreadManagerShutDown) { | |
| 92 const uint32 kRequestId = 10; | |
| 93 chromeos::PowerStateRequestIdCallback request_id_callback; | |
| 94 EXPECT_CALL(*power_manager_client_, RequestPowerStateOverrides(0, _, _, _)) | |
| 95 .WillOnce(SaveArg<3>(&request_id_callback)); | |
| 96 scoped_refptr<PowerStateOverride> override( | |
| 97 new PowerStateOverride(PowerStateOverride::BLOCK_DISPLAY_SLEEP)); | |
| 98 // Make sure our PostTask to the request power state overrides runs. | |
| 99 message_loop_.RunUntilIdle(); | |
| 100 request_id_callback.Run(kRequestId); | |
| 101 | |
| 102 // When the DBusThreadManager is about to be shut down, PowerStateOverride | |
| 103 // should cancel its request. | |
| 104 EXPECT_CALL(*power_manager_client_, CancelPowerStateOverrides(kRequestId)); | |
| 105 ShutDownDBusThreadManager(); | |
| 106 } | |
| 107 | |
| 108 } // namespace chromeos | |
| OLD | NEW |