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 |