Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / power / peripheral_battery_observer_browsertest.cc
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 "chrome/browser/chromeos/power/peripheral_battery_observer.h"
6
7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/notifications/notification_ui_manager.h"
11 #include "chrome/test/base/in_process_browser_test.h"
12 #include "chromeos/dbus/fake_dbus_thread_manager.h"
13 #include "content/public/test/test_utils.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 using ::testing::_;
18 using ::testing::InSequence;
19 using ::testing::Return;
20 using ::testing::SaveArg;
21
22 namespace {
23
24 const char kTestBatteryPath[] = "/sys/class/power_supply/hid-AA:BB:CC-battery";
25 const char kTestBatteryAddress[] = "cc:bb:aa";
26 const char kTestDeviceName[] = "test device";
27
28 }  // namespace
29
30 namespace chromeos {
31
32 class PeripheralBatteryObserverTest : public InProcessBrowserTest {
33  public:
34   PeripheralBatteryObserverTest() {}
35   virtual ~PeripheralBatteryObserverTest() {}
36
37   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
38     FakeDBusThreadManager* fake_dbus_thread_manager =
39         new FakeDBusThreadManager;
40     fake_dbus_thread_manager->SetFakeClients();
41     DBusThreadManager::SetInstanceForTesting(fake_dbus_thread_manager);
42     InProcessBrowserTest::SetUpInProcessBrowserTestFixture();
43   }
44
45   virtual void SetUpOnMainThread() OVERRIDE {
46     observer_.reset(new PeripheralBatteryObserver());
47   }
48
49   virtual void TearDownOnMainThread() OVERRIDE {
50     observer_.reset();
51   }
52
53   virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
54     InProcessBrowserTest::TearDownInProcessBrowserTestFixture();
55   }
56
57  protected:
58   scoped_ptr<PeripheralBatteryObserver> observer_;
59
60  private:
61   DISALLOW_COPY_AND_ASSIGN(PeripheralBatteryObserverTest);
62 };
63
64 IN_PROC_BROWSER_TEST_F(PeripheralBatteryObserverTest, Basic) {
65   base::SimpleTestTickClock clock;
66   observer_->set_testing_clock(&clock);
67
68   NotificationUIManager* notification_manager =
69       g_browser_process->notification_ui_manager();
70
71   // Level 50 at time 100, no low-battery notification.
72   clock.Advance(base::TimeDelta::FromSeconds(100));
73   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
74                                              kTestDeviceName, 50);
75   EXPECT_EQ(observer_->batteries_.count(kTestBatteryAddress), 1u);
76
77   const PeripheralBatteryObserver::BatteryInfo& info =
78       observer_->batteries_[kTestBatteryAddress];
79
80   EXPECT_EQ(info.name, kTestDeviceName);
81   EXPECT_EQ(info.level, 50);
82   EXPECT_EQ(info.last_notification_timestamp, base::TimeTicks());
83   EXPECT_FALSE(notification_manager->FindById(kTestBatteryAddress) != NULL);
84
85   // Level 5 at time 110, low-battery notification.
86   clock.Advance(base::TimeDelta::FromSeconds(10));
87   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
88                                              kTestDeviceName, 5);
89   EXPECT_EQ(info.level, 5);
90   EXPECT_EQ(info.last_notification_timestamp, clock.NowTicks());
91   EXPECT_TRUE(notification_manager->FindById(kTestBatteryAddress) != NULL);
92
93   // Level -1 at time 115, cancel previous notification
94   clock.Advance(base::TimeDelta::FromSeconds(5));
95   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
96                                              kTestDeviceName, -1);
97   EXPECT_EQ(info.level, 5);
98   EXPECT_EQ(info.last_notification_timestamp,
99             clock.NowTicks() - base::TimeDelta::FromSeconds(5));
100   EXPECT_FALSE(notification_manager->FindById(kTestBatteryAddress) != NULL);
101
102   // Level 50 at time 120, no low-battery notification.
103   clock.Advance(base::TimeDelta::FromSeconds(5));
104   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
105                                              kTestDeviceName, 50);
106   EXPECT_EQ(info.level, 50);
107   EXPECT_EQ(info.last_notification_timestamp,
108             clock.NowTicks() - base::TimeDelta::FromSeconds(10));
109   EXPECT_FALSE(notification_manager->FindById(kTestBatteryAddress) != NULL);
110
111   // Level 5 at time 130, no low-battery notification (throttling).
112   clock.Advance(base::TimeDelta::FromSeconds(10));
113   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
114                                              kTestDeviceName, 5);
115   EXPECT_EQ(info.level, 5);
116   EXPECT_EQ(info.last_notification_timestamp,
117             clock.NowTicks() - base::TimeDelta::FromSeconds(20));
118   EXPECT_FALSE(notification_manager->FindById(kTestBatteryAddress) != NULL);
119 }
120
121 IN_PROC_BROWSER_TEST_F(PeripheralBatteryObserverTest, InvalidBatteryInfo) {
122   observer_->PeripheralBatteryStatusReceived("invalid-path", kTestDeviceName,
123                                              10);
124   EXPECT_TRUE(observer_->batteries_.empty());
125
126   observer_->PeripheralBatteryStatusReceived(
127       "/sys/class/power_supply/hid-battery", kTestDeviceName, 10);
128   EXPECT_TRUE(observer_->batteries_.empty());
129
130   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
131                                              kTestDeviceName, -2);
132   EXPECT_TRUE(observer_->batteries_.empty());
133
134   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
135                                              kTestDeviceName, 101);
136   EXPECT_TRUE(observer_->batteries_.empty());
137
138   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
139                                              kTestDeviceName, -1);
140   EXPECT_TRUE(observer_->batteries_.empty());
141 }
142
143 IN_PROC_BROWSER_TEST_F(PeripheralBatteryObserverTest, DeviceRemove) {
144   NotificationUIManager* notification_manager =
145       g_browser_process->notification_ui_manager();
146
147   observer_->PeripheralBatteryStatusReceived(kTestBatteryPath,
148                                              kTestDeviceName, 5);
149   EXPECT_EQ(observer_->batteries_.count(kTestBatteryAddress), 1u);
150   EXPECT_TRUE(notification_manager->FindById(kTestBatteryAddress) != NULL);
151
152   observer_->RemoveBattery(kTestBatteryAddress);
153   EXPECT_FALSE(notification_manager->FindById(kTestBatteryAddress) != NULL);
154 }
155
156 }  // namespace chromeos