16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/battery_status/battery_status_manager_linux.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/values.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content {
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace {
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, EmptyDictionary) {
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus default_status;
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(default_status.charging, status.charging);
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(default_status.chargingTime, status.chargingTime);
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(default_status.dischargingTime, status.dischargingTime);
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(default_status.level, status.level);
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, ChargingHalfFull) {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_CHARGING);
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 0);
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 50);
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(status.charging);
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.chargingTime);
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.5, status.level);
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, ChargingTimeToFull) {
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_CHARGING);
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 100.f);
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 1);
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(status.charging);
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(100, status.chargingTime);
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(.01, status.level);
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, FullyCharged) {
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_FULL);
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 100);
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToEmpty", 200);
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 100);
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(status.charging);
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0, status.chargingTime);
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(1, status.level);
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, Discharging) {
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_DISCHARGING);
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 0);
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToEmpty", 200);
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 90);
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(status.charging);
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.chargingTime);
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(200, status.dischargingTime);
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(.9, status.level);
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, DischargingTimeToEmptyUnknown) {
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_DISCHARGING);
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 0);
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToEmpty", 0);
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 90);
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(status.charging);
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.chargingTime);
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(.9, status.level);
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, DeviceStateUnknown) {
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_UNKNOWN);
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 0);
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToEmpty", 0);
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 50);
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(status.charging);
1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.chargingTime);
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(.5, status.level);
1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, DeviceStateEmpty) {
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_EMPTY);
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToFull", 0);
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("TimeToEmpty", 0);
1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 0);
1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(status.charging);
1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.chargingTime);
1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0, status.level);
1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(BatteryStatusManagerLinuxTest, LevelRoundedToThreeSignificantDigits) {
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::DictionaryValue dictionary;
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("State", UPOWER_DEVICE_STATE_DISCHARGING);
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  dictionary.SetDouble("Percentage", 14.56);
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  blink::WebBatteryStatus status = ComputeWebBatteryStatus(dictionary);
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(status.charging);
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.chargingTime);
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(std::numeric_limits<double>::infinity(), status.dischargingTime);
1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(0.15, status.level);
1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace
1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace content
144