Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2267)

Unified Diff: ash/common/system/chromeos/power/power_status_unittest.cc

Issue 2063633002: Render Ash material design battery image icon without PNGs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add battery percentage constant Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « ash/common/system/chromeos/power/power_status.cc ('k') | ash/common/system/chromeos/power/power_status_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698