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