Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ash / system / chromeos / power / power_status_unittest.cc
1 // Copyright (c) 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_status.h"
6
7 #include <set>
8 #include <string>
9
10 #include "base/command_line.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop/message_loop.h"
13 #include "chromeos/dbus/dbus_thread_manager.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "third_party/cros_system_api/dbus/service_constants.h"
16
17 namespace ash {
18 namespace {
19
20 class TestObserver : public PowerStatus::Observer {
21  public:
22   TestObserver() : power_changed_count_(0) {}
23   virtual ~TestObserver() {}
24
25   int power_changed_count() const { return power_changed_count_; }
26
27   // PowerStatus::Observer overrides:
28   virtual void OnPowerStatusChanged() OVERRIDE { ++power_changed_count_; }
29
30  private:
31   int power_changed_count_;
32
33   DISALLOW_COPY_AND_ASSIGN(TestObserver);
34 };
35
36 }  // namespace
37
38 class PowerStatusTest : public testing::Test {
39  public:
40   PowerStatusTest() : power_status_(NULL) {}
41   virtual ~PowerStatusTest() {}
42
43   virtual void SetUp() OVERRIDE {
44     chromeos::DBusThreadManager::InitializeWithStub();
45     PowerStatus::Initialize();
46     power_status_ = PowerStatus::Get();
47     test_observer_.reset(new TestObserver);
48     power_status_->AddObserver(test_observer_.get());
49   }
50
51   virtual void TearDown() OVERRIDE {
52     power_status_->RemoveObserver(test_observer_.get());
53     test_observer_.reset();
54     PowerStatus::Shutdown();
55     chromeos::DBusThreadManager::Shutdown();
56   }
57
58  protected:
59   base::MessageLoopForUI message_loop_;
60   PowerStatus* power_status_;  // Not owned.
61   scoped_ptr<TestObserver> test_observer_;
62
63  private:
64   DISALLOW_COPY_AND_ASSIGN(PowerStatusTest);
65 };
66
67 TEST_F(PowerStatusTest, InitializeAndUpdate) {
68   // Test that the initial power supply state should be acquired after
69   // PowerStatus is instantiated. This depends on
70   // PowerManagerClientStubImpl, which responds to power status update
71   // requests, pretends there is a battery present, and generates some valid
72   // power supply status data.
73   message_loop_.RunUntilIdle();
74   EXPECT_EQ(1, test_observer_->power_changed_count());
75
76   // Test RequestUpdate, test_obsever_ should be notified for power suuply
77   // status change.
78   power_status_->RequestStatusUpdate();
79   message_loop_.RunUntilIdle();
80   EXPECT_EQ(2, test_observer_->power_changed_count());
81 }
82
83 TEST_F(PowerStatusTest, ShouldDisplayBatteryTime) {
84   EXPECT_FALSE(PowerStatus::ShouldDisplayBatteryTime(
85       base::TimeDelta::FromSeconds(-1)));
86   EXPECT_FALSE(PowerStatus::ShouldDisplayBatteryTime(
87       base::TimeDelta::FromSeconds(0)));
88   EXPECT_FALSE(PowerStatus::ShouldDisplayBatteryTime(
89       base::TimeDelta::FromSeconds(59)));
90   EXPECT_TRUE(PowerStatus::ShouldDisplayBatteryTime(
91       base::TimeDelta::FromSeconds(60)));
92   EXPECT_TRUE(PowerStatus::ShouldDisplayBatteryTime(
93       base::TimeDelta::FromSeconds(600)));
94   EXPECT_TRUE(PowerStatus::ShouldDisplayBatteryTime(
95       base::TimeDelta::FromSeconds(3600)));
96   EXPECT_TRUE(PowerStatus::ShouldDisplayBatteryTime(
97       base::TimeDelta::FromSeconds(
98           PowerStatus::kMaxBatteryTimeToDisplaySec)));
99   EXPECT_FALSE(PowerStatus::ShouldDisplayBatteryTime(
100       base::TimeDelta::FromSeconds(
101           PowerStatus::kMaxBatteryTimeToDisplaySec + 1)));
102 }
103
104 TEST_F(PowerStatusTest, SplitTimeIntoHoursAndMinutes) {
105   int hours = 0, minutes = 0;
106   PowerStatus::SplitTimeIntoHoursAndMinutes(
107       base::TimeDelta::FromSeconds(0), &hours, &minutes);
108   EXPECT_EQ(0, hours);
109   EXPECT_EQ(0, minutes);
110
111   PowerStatus::SplitTimeIntoHoursAndMinutes(
112       base::TimeDelta::FromSeconds(60), &hours, &minutes);
113   EXPECT_EQ(0, hours);
114   EXPECT_EQ(1, minutes);
115
116   PowerStatus::SplitTimeIntoHoursAndMinutes(
117       base::TimeDelta::FromSeconds(3600), &hours, &minutes);
118   EXPECT_EQ(1, hours);
119   EXPECT_EQ(0, minutes);
120
121   PowerStatus::SplitTimeIntoHoursAndMinutes(
122       base::TimeDelta::FromSeconds(3600 + 60), &hours, &minutes);
123   EXPECT_EQ(1, hours);
124   EXPECT_EQ(1, minutes);
125
126   PowerStatus::SplitTimeIntoHoursAndMinutes(
127       base::TimeDelta::FromSeconds(7 * 3600 + 23 * 60), &hours, &minutes);
128   EXPECT_EQ(7, hours);
129   EXPECT_EQ(23, minutes);
130
131   // Check that minutes are rounded.
132   PowerStatus::SplitTimeIntoHoursAndMinutes(
133       base::TimeDelta::FromSeconds(2 * 3600 + 3 * 60 + 30), &hours, &minutes);
134   EXPECT_EQ(2, hours);
135   EXPECT_EQ(4, minutes);
136
137   PowerStatus::SplitTimeIntoHoursAndMinutes(
138       base::TimeDelta::FromSeconds(2 * 3600 + 3 * 60 + 29), &hours, &minutes);
139   EXPECT_EQ(2, hours);
140   EXPECT_EQ(3, minutes);
141
142   // Check that times close to hour boundaries aren't incorrectly rounded such
143   // that they display 60 minutes: http://crbug.com/368261
144   PowerStatus::SplitTimeIntoHoursAndMinutes(
145       base::TimeDelta::FromSecondsD(3599.9), &hours, &minutes);
146   EXPECT_EQ(1, hours);
147   EXPECT_EQ(0, minutes);
148
149   PowerStatus::SplitTimeIntoHoursAndMinutes(
150       base::TimeDelta::FromSecondsD(3600.1), &hours, &minutes);
151   EXPECT_EQ(1, hours);
152   EXPECT_EQ(0, minutes);
153 }
154
155 }  // namespace ash