Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / ash / system / chromeos / power / power_status_unittest.cc
blobe5bee7e4447a26deabcaa422c5703b4c69e8e557
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.
5 #include "ash/system/chromeos/power/power_status.h"
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"
13 namespace ash {
14 namespace {
16 class TestObserver : public PowerStatus::Observer {
17 public:
18 TestObserver() : power_changed_count_(0) {}
19 virtual ~TestObserver() {}
21 int power_changed_count() const { return power_changed_count_; }
23 // PowerStatus::Observer overrides:
24 virtual void OnPowerStatusChanged() OVERRIDE { ++power_changed_count_; }
26 private:
27 int power_changed_count_;
29 DISALLOW_COPY_AND_ASSIGN(TestObserver);
32 } // namespace
34 class PowerStatusTest : public testing::Test {
35 public:
36 PowerStatusTest() : power_status_(NULL) {}
37 virtual ~PowerStatusTest() {}
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());
47 virtual void TearDown() OVERRIDE {
48 power_status_->RemoveObserver(test_observer_.get());
49 test_observer_.reset();
50 PowerStatus::Shutdown();
51 chromeos::DBusThreadManager::Shutdown();
54 protected:
55 base::MessageLoopForUI message_loop_;
56 PowerStatus* power_status_; // Not owned.
57 scoped_ptr<TestObserver> test_observer_;
59 private:
60 DISALLOW_COPY_AND_ASSIGN(PowerStatusTest);
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());
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());
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)));
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);
107 PowerStatus::SplitTimeIntoHoursAndMinutes(
108 base::TimeDelta::FromSeconds(60), &hours, &minutes);
109 EXPECT_EQ(0, hours);
110 EXPECT_EQ(1, minutes);
112 PowerStatus::SplitTimeIntoHoursAndMinutes(
113 base::TimeDelta::FromSeconds(3600), &hours, &minutes);
114 EXPECT_EQ(1, hours);
115 EXPECT_EQ(0, minutes);
117 PowerStatus::SplitTimeIntoHoursAndMinutes(
118 base::TimeDelta::FromSeconds(3600 + 60), &hours, &minutes);
119 EXPECT_EQ(1, hours);
120 EXPECT_EQ(1, minutes);
122 PowerStatus::SplitTimeIntoHoursAndMinutes(
123 base::TimeDelta::FromSeconds(7 * 3600 + 23 * 60), &hours, &minutes);
124 EXPECT_EQ(7, hours);
125 EXPECT_EQ(23, minutes);
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);
133 PowerStatus::SplitTimeIntoHoursAndMinutes(
134 base::TimeDelta::FromSeconds(2 * 3600 + 3 * 60 + 29), &hours, &minutes);
135 EXPECT_EQ(2, hours);
136 EXPECT_EQ(3, minutes);
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);
145 PowerStatus::SplitTimeIntoHoursAndMinutes(
146 base::TimeDelta::FromSecondsD(3600.1), &hours, &minutes);
147 EXPECT_EQ(1, hours);
148 EXPECT_EQ(0, minutes);
151 } // namespace ash