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