1 // Copyright 2013 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/system/chromeos/power/power_event_observer.h" 6 7 #include "ash/test/ash_test_base.h" 8 #include "base/memory/scoped_ptr.h" 9 #include "base/time/time.h" 10 #include "chromeos/dbus/dbus_thread_manager.h" 11 #include "chromeos/dbus/power_manager_client.h" 12 13 namespace ash { 14 15 class PowerEventObserverTest : public test::AshTestBase { 16 public: 17 PowerEventObserverTest() {} 18 virtual ~PowerEventObserverTest() {} 19 20 // test::AshTestBase::SetUp() overrides: 21 virtual void SetUp() OVERRIDE { 22 test::AshTestBase::SetUp(); 23 observer_.reset(new PowerEventObserver()); 24 } 25 26 virtual void TearDown() OVERRIDE { 27 observer_.reset(); 28 test::AshTestBase::TearDown(); 29 } 30 31 protected: 32 scoped_ptr<PowerEventObserver> observer_; 33 34 private: 35 DISALLOW_COPY_AND_ASSIGN(PowerEventObserverTest); 36 }; 37 38 TEST_F(PowerEventObserverTest, LockBeforeSuspend) { 39 chromeos::PowerManagerClient* client = 40 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 41 ASSERT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 42 43 // Check that the observer requests a suspend-readiness callback when it hears 44 // that the system is about to suspend. 45 SetCanLockScreen(true); 46 SetShouldLockScreenBeforeSuspending(true); 47 observer_->SuspendImminent(); 48 EXPECT_EQ(1, client->GetNumPendingSuspendReadinessCallbacks()); 49 50 // It should run the callback when it hears that the screen is locked. 51 observer_->ScreenIsLocked(); 52 RunAllPendingInMessageLoop(); 53 EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 54 55 // If the system is already locked, no callback should be requested. 56 observer_->SuspendDone(base::TimeDelta()); 57 observer_->ScreenIsUnlocked(); 58 observer_->ScreenIsLocked(); 59 observer_->SuspendImminent(); 60 EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 61 62 // It also shouldn't request a callback if it isn't instructed to lock the 63 // screen. 64 observer_->SuspendDone(base::TimeDelta()); 65 SetShouldLockScreenBeforeSuspending(false); 66 observer_->SuspendImminent(); 67 EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); 68 } 69 70 } // namespace ash 71