| Index: ash/common/system/chromeos/power/power_status_unittest.cc
|
| diff --git a/ash/common/system/chromeos/power/power_status_unittest.cc b/ash/common/system/chromeos/power/power_status_unittest.cc
|
| index 5115828f5156cf034650ee4c7d437210b4800e9f..e676bc184a303af6f33e4c436f0e479d86a3d567 100644
|
| --- a/ash/common/system/chromeos/power/power_status_unittest.cc
|
| +++ b/ash/common/system/chromeos/power/power_status_unittest.cc
|
| @@ -6,6 +6,8 @@
|
|
|
| #include <memory>
|
|
|
| +#include "ash/common/material_design/material_design_controller.h"
|
| +#include "ash/test/material_design_controller_test_api.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -34,7 +36,9 @@ class TestObserver : public PowerStatus::Observer {
|
|
|
| } // namespace
|
|
|
| -class PowerStatusTest : public testing::Test {
|
| +class PowerStatusTest
|
| + : public testing::Test,
|
| + public testing::WithParamInterface<MaterialDesignController::Mode> {
|
| public:
|
| PowerStatusTest() : power_status_(NULL) {}
|
| ~PowerStatusTest() override {}
|
| @@ -45,9 +49,12 @@ class PowerStatusTest : public testing::Test {
|
| power_status_ = PowerStatus::Get();
|
| test_observer_.reset(new TestObserver);
|
| power_status_->AddObserver(test_observer_.get());
|
| + material_design_state_.reset(
|
| + new test::MaterialDesignControllerTestAPI(GetParam()));
|
| }
|
|
|
| void TearDown() override {
|
| + material_design_state_.reset();
|
| power_status_->RemoveObserver(test_observer_.get());
|
| test_observer_.reset();
|
| PowerStatus::Shutdown();
|
| @@ -60,10 +67,21 @@ class PowerStatusTest : public testing::Test {
|
| std::unique_ptr<TestObserver> test_observer_;
|
|
|
| private:
|
| + std::unique_ptr<test::MaterialDesignControllerTestAPI> material_design_state_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(PowerStatusTest);
|
| };
|
|
|
| -TEST_F(PowerStatusTest, InitializeAndUpdate) {
|
| +// The prefix has intentionally been left blank since there is only one
|
| +// parameterization of this test fixture.
|
| +INSTANTIATE_TEST_CASE_P(
|
| + /* prefix intentionally left blank */,
|
| + PowerStatusTest,
|
| + testing::Values(MaterialDesignController::NON_MATERIAL,
|
| + MaterialDesignController::MATERIAL_NORMAL,
|
| + MaterialDesignController::MATERIAL_EXPERIMENTAL));
|
| +
|
| +TEST_P(PowerStatusTest, InitializeAndUpdate) {
|
| // Test that the initial power supply state should be acquired after
|
| // PowerStatus is instantiated. This depends on
|
| // PowerManagerClientStubImpl, which responds to power status update
|
| @@ -79,7 +97,7 @@ TEST_F(PowerStatusTest, InitializeAndUpdate) {
|
| EXPECT_EQ(2, test_observer_->power_changed_count());
|
| }
|
|
|
| -TEST_F(PowerStatusTest, ShouldDisplayBatteryTime) {
|
| +TEST_P(PowerStatusTest, ShouldDisplayBatteryTime) {
|
| EXPECT_FALSE(PowerStatus::ShouldDisplayBatteryTime(
|
| base::TimeDelta::FromSeconds(-1)));
|
| EXPECT_FALSE(PowerStatus::ShouldDisplayBatteryTime(
|
| @@ -100,7 +118,7 @@ TEST_F(PowerStatusTest, ShouldDisplayBatteryTime) {
|
| PowerStatus::kMaxBatteryTimeToDisplaySec + 1)));
|
| }
|
|
|
| -TEST_F(PowerStatusTest, SplitTimeIntoHoursAndMinutes) {
|
| +TEST_P(PowerStatusTest, SplitTimeIntoHoursAndMinutes) {
|
| int hours = 0, minutes = 0;
|
| PowerStatus::SplitTimeIntoHoursAndMinutes(
|
| base::TimeDelta::FromSeconds(0), &hours, &minutes);
|
| @@ -151,7 +169,10 @@ TEST_F(PowerStatusTest, SplitTimeIntoHoursAndMinutes) {
|
| EXPECT_EQ(0, minutes);
|
| }
|
|
|
| -TEST_F(PowerStatusTest, GetBatteryImageInfo) {
|
| +TEST_P(PowerStatusTest, GetBatteryImageInfo) {
|
| + const bool use_md_icon =
|
| + ash::MaterialDesignController::UseMaterialDesignSystemIcons();
|
| +
|
| PowerSupplyProperties prop;
|
| prop.set_external_power(PowerSupplyProperties::AC);
|
| prop.set_battery_state(PowerSupplyProperties::CHARGING);
|
| @@ -166,10 +187,16 @@ TEST_F(PowerStatusTest, GetBatteryImageInfo) {
|
| EXPECT_EQ(info_charging_98,
|
| power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT));
|
|
|
| - // The dark icon set should use a different image.
|
| + // The dark icon set should use a different image for non-MD, but the
|
| + // same image for MD.
|
| prop.set_battery_percent(98.0);
|
| - EXPECT_NE(info_charging_98,
|
| - power_status_->GetBatteryImageInfo(PowerStatus::ICON_DARK));
|
| + if (use_md_icon) {
|
| + EXPECT_EQ(info_charging_98,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_DARK));
|
| + } else {
|
| + EXPECT_NE(info_charging_98,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_DARK));
|
| + }
|
|
|
| // A different icon should be used when the battery is full, too.
|
| prop.set_battery_state(PowerSupplyProperties::FULL);
|
| @@ -193,4 +220,136 @@ TEST_F(PowerStatusTest, GetBatteryImageInfo) {
|
| power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT));
|
| }
|
|
|
| +// Tests that the |icon_badge| member of BatteryImageInfo is set correctly
|
| +// with various power supply property values.
|
| +TEST_P(PowerStatusTest, BatteryImageInfoIconBadge) {
|
| + // The |icon_badge| member is only populated for the material design
|
| + // battery icon.
|
| + if (!ash::MaterialDesignController::UseMaterialDesignSystemIcons())
|
| + return;
|
| +
|
| + PowerSupplyProperties prop;
|
| +
|
| + // A charging battery connected to AC power should have an ICON_BADGE_BOLT.
|
| + prop.set_external_power(PowerSupplyProperties::AC);
|
| + prop.set_battery_state(PowerSupplyProperties::CHARGING);
|
| + prop.set_battery_percent(98.0);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_BOLT,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +
|
| + // A discharging battery connected to AC should also have an ICON_BADGE_BOLT.
|
| + prop.set_battery_state(PowerSupplyProperties::DISCHARGING);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_BOLT,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +
|
| + // A charging battery connected to USB power should have an
|
| + // ICON_BADGE_UNRELIABLE.
|
| + prop.set_external_power(PowerSupplyProperties::USB);
|
| + prop.set_battery_state(PowerSupplyProperties::CHARGING);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_UNRELIABLE,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +
|
| + // A discharging battery connected to USB power should also have an
|
| + // ICON_BADGE_UNRELIABLE.
|
| + prop.set_battery_state(PowerSupplyProperties::DISCHARGING);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_UNRELIABLE,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +
|
| + // Show an ICON_BADGE_X when no battery is present.
|
| + prop.set_external_power(PowerSupplyProperties::DISCONNECTED);
|
| + prop.set_battery_state(PowerSupplyProperties::NOT_PRESENT);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_X,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +
|
| + // Do not show a badge when the battery is discharging.
|
| + prop.set_battery_state(PowerSupplyProperties::DISCHARGING);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_NONE,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +
|
| + // Show ICON_BADGE_ALERT for a discharging battery when it falls below
|
| + // a charge level of PowerStatus::kCriticalBatteryChargePercentageMd.
|
| + prop.set_battery_percent(PowerStatus::kCriticalBatteryChargePercentageMd);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_NONE,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| + prop.set_battery_percent(PowerStatus::kCriticalBatteryChargePercentageMd - 1);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + PowerStatus::ICON_BADGE_ALERT,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).icon_badge);
|
| +}
|
| +
|
| +// Tests that the |charge_level| member of BatteryImageInfo is set correctly
|
| +// with various power supply property values.
|
| +TEST_P(PowerStatusTest, BatteryImageInfoChargeLevel) {
|
| + // The |charge_level| member is only populated for the material design
|
| + // battery icon.
|
| + if (!ash::MaterialDesignController::UseMaterialDesignSystemIcons())
|
| + return;
|
| +
|
| + PowerSupplyProperties prop;
|
| +
|
| + // No charge level is drawn when the battery is not present.
|
| + prop.set_external_power(PowerSupplyProperties::DISCONNECTED);
|
| + prop.set_battery_state(PowerSupplyProperties::NOT_PRESENT);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + 0,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| +
|
| + // A charge level of 0 when the battery is 0% full.
|
| + prop.set_external_power(PowerSupplyProperties::AC);
|
| + prop.set_battery_state(PowerSupplyProperties::CHARGING);
|
| + prop.set_battery_percent(0.0);
|
| + EXPECT_EQ(
|
| + 0,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| +
|
| + // A charge level of 1 when the battery is up to 16% full, and a level of 2
|
| + // for 17% full.
|
| + prop.set_battery_percent(16.0);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + 1,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| + prop.set_battery_percent(17.0);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + 2,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| +
|
| + // A charge level of 6 when the battery is 50% full.
|
| + prop.set_battery_percent(50.0);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + 6,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| +
|
| + // A charge level of 11 when the battery is 99% full, and a level of 12 when
|
| + // the battery is 100% full.
|
| + prop.set_battery_percent(99.0);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + 11,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| + prop.set_battery_percent(100.0);
|
| + power_status_->SetProtoForTesting(prop);
|
| + EXPECT_EQ(
|
| + 12,
|
| + power_status_->GetBatteryImageInfo(PowerStatus::ICON_LIGHT).charge_level);
|
| +}
|
| +
|
| } // namespace ash
|
|
|