| Index: ash/common/system/chromeos/power/tray_power_unittest.cc
|
| diff --git a/ash/common/system/chromeos/power/tray_power_unittest.cc b/ash/common/system/chromeos/power/tray_power_unittest.cc
|
| deleted file mode 100644
|
| index 76f3e1728f17c75fe62aabd13350b24fc4d89714..0000000000000000000000000000000000000000
|
| --- a/ash/common/system/chromeos/power/tray_power_unittest.cc
|
| +++ /dev/null
|
| @@ -1,434 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ash/common/system/chromeos/power/tray_power.h"
|
| -
|
| -#include <map>
|
| -#include <memory>
|
| -#include <string>
|
| -
|
| -#include "ash/test/ash_test_base.h"
|
| -#include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
|
| -#include "ui/message_center/fake_message_center.h"
|
| -
|
| -using message_center::Notification;
|
| -using power_manager::PowerSupplyProperties;
|
| -
|
| -namespace {
|
| -
|
| -class MockMessageCenter : public message_center::FakeMessageCenter {
|
| - public:
|
| - MockMessageCenter() : add_count_(0), remove_count_(0), update_count_(0) {}
|
| - ~MockMessageCenter() override {}
|
| -
|
| - int add_count() const { return add_count_; }
|
| - int remove_count() const { return remove_count_; }
|
| - int update_count() const { return update_count_; }
|
| -
|
| - // message_center::FakeMessageCenter overrides:
|
| - void AddNotification(std::unique_ptr<Notification> notification) override {
|
| - add_count_++;
|
| - notifications_.insert(
|
| - std::make_pair(notification->id(), std::move(notification)));
|
| - }
|
| - void RemoveNotification(const std::string& id, bool by_user) override {
|
| - Notification* notification = FindVisibleNotificationById(id);
|
| - if (notification && notification->delegate())
|
| - notification->delegate()->Close(by_user);
|
| - remove_count_++;
|
| - notifications_.erase(id);
|
| - }
|
| - void UpdateNotification(
|
| - const std::string& id,
|
| - std::unique_ptr<Notification> new_notification) override {
|
| - update_count_++;
|
| - Notification* notification = FindVisibleNotificationById(id);
|
| - if (notification)
|
| - notifications_.erase(id);
|
| - notifications_.insert(
|
| - std::make_pair(new_notification->id(), std::move(new_notification)));
|
| - }
|
| -
|
| - Notification* FindVisibleNotificationById(const std::string& id) override {
|
| - auto it = notifications_.find(id);
|
| - return it == notifications_.end() ? NULL : it->second.get();
|
| - }
|
| -
|
| - private:
|
| - int add_count_;
|
| - int remove_count_;
|
| - int update_count_;
|
| - std::map<std::string, std::unique_ptr<Notification>> notifications_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockMessageCenter);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -namespace ash {
|
| -
|
| -class TrayPowerTest : public test::AshTestBase {
|
| - public:
|
| - TrayPowerTest() {}
|
| - ~TrayPowerTest() override {}
|
| -
|
| - MockMessageCenter* message_center() { return message_center_.get(); }
|
| - TrayPower* tray_power() { return tray_power_.get(); }
|
| -
|
| - // test::AshTestBase::SetUp() overrides:
|
| - void SetUp() override {
|
| - test::AshTestBase::SetUp();
|
| - message_center_.reset(new MockMessageCenter());
|
| - tray_power_.reset(new TrayPower(NULL, message_center_.get()));
|
| - }
|
| -
|
| - void TearDown() override {
|
| - tray_power_.reset();
|
| - message_center_.reset();
|
| - test::AshTestBase::TearDown();
|
| - }
|
| -
|
| - TrayPower::NotificationState notification_state() const {
|
| - return tray_power_->notification_state_;
|
| - }
|
| -
|
| - bool MaybeShowUsbChargerNotification(const PowerSupplyProperties& proto) {
|
| - PowerStatus::Get()->SetProtoForTesting(proto);
|
| - return tray_power_->MaybeShowUsbChargerNotification();
|
| - }
|
| -
|
| - void MaybeShowDualRoleNotification(const PowerSupplyProperties& proto) {
|
| - PowerStatus::Get()->SetProtoForTesting(proto);
|
| - tray_power_->MaybeShowDualRoleNotification();
|
| - }
|
| -
|
| - void UpdateNotificationState(const PowerSupplyProperties& proto,
|
| - TrayPower::NotificationState expected_state,
|
| - bool expected_add,
|
| - bool expected_remove) {
|
| - int prev_add = message_center_->add_count();
|
| - int prev_remove = message_center_->remove_count();
|
| - PowerStatus::Get()->SetProtoForTesting(proto);
|
| - tray_power_->OnPowerStatusChanged();
|
| - EXPECT_EQ(expected_state, notification_state());
|
| - EXPECT_EQ(expected_add, message_center_->add_count() == prev_add + 1);
|
| - EXPECT_EQ(expected_remove,
|
| - message_center_->remove_count() == prev_remove + 1);
|
| - }
|
| -
|
| - void SetUsbChargerConnected(bool connected) {
|
| - tray_power_->usb_charger_was_connected_ = connected;
|
| - }
|
| -
|
| - // Returns a discharging PowerSupplyProperties more appropriate for testing.
|
| - static PowerSupplyProperties DefaultPowerSupplyProperties() {
|
| - PowerSupplyProperties proto;
|
| - proto.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED);
|
| - proto.set_battery_state(
|
| - power_manager::PowerSupplyProperties_BatteryState_DISCHARGING);
|
| - proto.set_battery_percent(50.0);
|
| - proto.set_battery_time_to_empty_sec(3 * 60 * 60);
|
| - proto.set_battery_time_to_full_sec(2 * 60 * 60);
|
| - proto.set_is_calculating_battery_time(false);
|
| - return proto;
|
| - }
|
| -
|
| - private:
|
| - std::unique_ptr<MockMessageCenter> message_center_;
|
| - std::unique_ptr<TrayPower> tray_power_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TrayPowerTest);
|
| -};
|
| -
|
| -TEST_F(TrayPowerTest, MaybeShowUsbChargerNotification) {
|
| - PowerSupplyProperties discharging = DefaultPowerSupplyProperties();
|
| - EXPECT_FALSE(MaybeShowUsbChargerNotification(discharging));
|
| - EXPECT_EQ(0, message_center()->add_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| -
|
| - // Notification shows when connecting a USB charger.
|
| - PowerSupplyProperties usb_connected = DefaultPowerSupplyProperties();
|
| - usb_connected.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - EXPECT_TRUE(MaybeShowUsbChargerNotification(usb_connected));
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| - SetUsbChargerConnected(true);
|
| -
|
| - // Change in charge does not trigger the notification again.
|
| - PowerSupplyProperties more_charge = DefaultPowerSupplyProperties();
|
| - more_charge.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - more_charge.set_battery_time_to_full_sec(60 * 60);
|
| - more_charge.set_battery_percent(75.0);
|
| - EXPECT_FALSE(MaybeShowUsbChargerNotification(more_charge));
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| -
|
| - // Disconnecting a USB charger with the notification showing should close
|
| - // the notification.
|
| - EXPECT_TRUE(MaybeShowUsbChargerNotification(discharging));
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| - SetUsbChargerConnected(false);
|
| -
|
| - // Notification shows when connecting a USB charger again.
|
| - EXPECT_TRUE(MaybeShowUsbChargerNotification(usb_connected));
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| - SetUsbChargerConnected(true);
|
| -
|
| - // Notification hides when external power switches to AC.
|
| - PowerSupplyProperties ac_charger = DefaultPowerSupplyProperties();
|
| - ac_charger.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_AC);
|
| - EXPECT_TRUE(MaybeShowUsbChargerNotification(ac_charger));
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(2, message_center()->remove_count());
|
| - SetUsbChargerConnected(false);
|
| -
|
| - // Notification shows when external power switches back to USB.
|
| - EXPECT_TRUE(MaybeShowUsbChargerNotification(usb_connected));
|
| - EXPECT_EQ(3, message_center()->add_count());
|
| - EXPECT_EQ(2, message_center()->remove_count());
|
| - SetUsbChargerConnected(true);
|
| -
|
| - // Notification does not re-appear after being manually dismissed if
|
| - // power supply flickers between AC and USB charger.
|
| - message_center()->RemoveNotification(TrayPower::kUsbNotificationId, true);
|
| - EXPECT_EQ(3, message_center()->remove_count());
|
| - EXPECT_TRUE(MaybeShowUsbChargerNotification(ac_charger));
|
| - SetUsbChargerConnected(false);
|
| - EXPECT_FALSE(MaybeShowUsbChargerNotification(usb_connected));
|
| - EXPECT_EQ(3, message_center()->add_count());
|
| - SetUsbChargerConnected(true);
|
| -
|
| - // Notification appears again after being manually dismissed if the charger
|
| - // is removed, and then a USB charger is attached.
|
| - MaybeShowUsbChargerNotification(discharging);
|
| - EXPECT_EQ(3, message_center()->add_count());
|
| - SetUsbChargerConnected(false);
|
| - MaybeShowUsbChargerNotification(usb_connected);
|
| - EXPECT_EQ(4, message_center()->add_count());
|
| - SetUsbChargerConnected(true);
|
| -}
|
| -
|
| -TEST_F(TrayPowerTest, MaybeShowDualRoleNotification) {
|
| - PowerSupplyProperties discharging = DefaultPowerSupplyProperties();
|
| - discharging.set_supports_dual_role_devices(true);
|
| - MaybeShowDualRoleNotification(discharging);
|
| - EXPECT_EQ(0, message_center()->add_count());
|
| - EXPECT_EQ(0, message_center()->update_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| -
|
| - // Notification shows when connecting a dual-role device.
|
| - PowerSupplyProperties dual_role = DefaultPowerSupplyProperties();
|
| - dual_role.set_supports_dual_role_devices(true);
|
| - power_manager::PowerSupplyProperties_PowerSource* source =
|
| - dual_role.add_available_external_power_source();
|
| - source->set_id("dual-role1");
|
| - source->set_active_by_default(false);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(0, message_center()->update_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| -
|
| - // Connecting another dual-role device updates the notification to be plural.
|
| - source = dual_role.add_available_external_power_source();
|
| - source->set_id("dual-role2");
|
| - source->set_active_by_default(false);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(1, message_center()->update_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| -
|
| - // Connecting a 3rd dual-role device doesn't affect the notification.
|
| - source = dual_role.add_available_external_power_source();
|
| - source->set_id("dual-role3");
|
| - source->set_active_by_default(false);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(1, message_center()->update_count());
|
| - EXPECT_EQ(0, message_center()->remove_count());
|
| -
|
| - // Connecting a legacy USB device removes the notification.
|
| - PowerSupplyProperties legacy(dual_role);
|
| - power_manager::PowerSupplyProperties_PowerSource* legacy_source =
|
| - legacy.add_available_external_power_source();
|
| - legacy_source->set_id("legacy");
|
| - legacy_source->set_active_by_default(true);
|
| - legacy.set_external_power_source_id("legacy");
|
| - legacy.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - MaybeShowDualRoleNotification(legacy);
|
| - EXPECT_EQ(1, message_center()->add_count());
|
| - EXPECT_EQ(1, message_center()->update_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| -
|
| - // Removing the legacy USB device adds the notification again.
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(1, message_center()->update_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| -
|
| - // Charging from the device updates the notification.
|
| - dual_role.set_external_power_source_id("dual-role1");
|
| - dual_role.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(2, message_center()->update_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| -
|
| - // Adding a device as a sink doesn't change the notification, because the
|
| - // notification exposes the source.
|
| - source = dual_role.add_available_external_power_source();
|
| - source->set_active_by_default(false);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(2, message_center()->update_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| -
|
| - // Changing the source to a sink changes the notification.
|
| - dual_role.set_external_power_source_id("");
|
| - dual_role.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(3, message_center()->update_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| -
|
| - // An unrelated change has no effect.
|
| - dual_role.set_battery_time_to_empty_sec(2 * 60 * 60);
|
| - MaybeShowDualRoleNotification(dual_role);
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(3, message_center()->update_count());
|
| - EXPECT_EQ(1, message_center()->remove_count());
|
| -
|
| - // Removing devices hides the notification.
|
| - MaybeShowDualRoleNotification(discharging);
|
| - EXPECT_EQ(2, message_center()->add_count());
|
| - EXPECT_EQ(3, message_center()->update_count());
|
| - EXPECT_EQ(2, message_center()->remove_count());
|
| -}
|
| -
|
| -TEST_F(TrayPowerTest, UpdateNotificationState) {
|
| - // No notifications when no battery present.
|
| - PowerSupplyProperties no_battery = DefaultPowerSupplyProperties();
|
| - no_battery.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_AC);
|
| - no_battery.set_battery_state(
|
| - power_manager::PowerSupplyProperties_BatteryState_NOT_PRESENT);
|
| - {
|
| - SCOPED_TRACE("No notifications when no battery present");
|
| - UpdateNotificationState(no_battery, TrayPower::NOTIFICATION_NONE, false,
|
| - false);
|
| - }
|
| -
|
| - // No notification when calculating remaining battery time.
|
| - PowerSupplyProperties calculating = DefaultPowerSupplyProperties();
|
| - calculating.set_is_calculating_battery_time(true);
|
| - {
|
| - SCOPED_TRACE("No notification when calculating remaining battery time");
|
| - UpdateNotificationState(calculating, TrayPower::NOTIFICATION_NONE, false,
|
| - false);
|
| - }
|
| -
|
| - // No notification when charging.
|
| - PowerSupplyProperties charging = DefaultPowerSupplyProperties();
|
| - charging.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_AC);
|
| - charging.set_battery_state(
|
| - power_manager::PowerSupplyProperties_BatteryState_CHARGING);
|
| - {
|
| - SCOPED_TRACE("No notification when charging");
|
| - UpdateNotificationState(charging, TrayPower::NOTIFICATION_NONE, false,
|
| - false);
|
| - }
|
| -
|
| - // When the rounded minutes-to-empty are above the threshold, no notification
|
| - // should be shown.
|
| - PowerSupplyProperties low = DefaultPowerSupplyProperties();
|
| - low.set_battery_time_to_empty_sec(TrayPower::kLowPowerMinutes * 60 + 30);
|
| - {
|
| - SCOPED_TRACE("No notification when time to empty above threshold");
|
| - UpdateNotificationState(low, TrayPower::NOTIFICATION_NONE, false, false);
|
| - }
|
| -
|
| - // When the rounded value matches the threshold, the notification should
|
| - // appear.
|
| - low.set_battery_time_to_empty_sec(TrayPower::kLowPowerMinutes * 60 + 29);
|
| - {
|
| - SCOPED_TRACE("Notification when time to empty matches threshold");
|
| - UpdateNotificationState(low, TrayPower::NOTIFICATION_LOW_POWER, true,
|
| - false);
|
| - }
|
| -
|
| - // It should persist at lower values.
|
| - low.set_battery_time_to_empty_sec(TrayPower::kLowPowerMinutes * 60 - 20);
|
| - {
|
| - SCOPED_TRACE("Notification persists at lower values");
|
| - UpdateNotificationState(low, TrayPower::NOTIFICATION_LOW_POWER, false,
|
| - false);
|
| - }
|
| -
|
| - // The critical low battery notification should be shown when the rounded
|
| - // value is at the lower threshold.
|
| - PowerSupplyProperties critical = DefaultPowerSupplyProperties();
|
| - critical.set_battery_time_to_empty_sec(TrayPower::kCriticalMinutes * 60 + 29);
|
| - {
|
| - SCOPED_TRACE("Critical notification when time to empty is critical");
|
| - UpdateNotificationState(critical, TrayPower::NOTIFICATION_CRITICAL, true,
|
| - true);
|
| - }
|
| -
|
| - // The notification should be dismissed when the no-warning threshold is
|
| - // reached.
|
| - PowerSupplyProperties safe = DefaultPowerSupplyProperties();
|
| - safe.set_battery_time_to_empty_sec(TrayPower::kNoWarningMinutes * 60 - 29);
|
| - {
|
| - SCOPED_TRACE("Notification removed when battery not low");
|
| - UpdateNotificationState(safe, TrayPower::NOTIFICATION_NONE, false, true);
|
| - }
|
| -
|
| - // Test that rounded percentages are used when a USB charger is connected.
|
| - PowerSupplyProperties low_usb = DefaultPowerSupplyProperties();
|
| - low_usb.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - low_usb.set_battery_percent(TrayPower::kLowPowerPercentage + 0.5);
|
| - {
|
| - SCOPED_TRACE("No notification for rounded battery percent");
|
| - UpdateNotificationState(low_usb, TrayPower::NOTIFICATION_NONE, true, false);
|
| - }
|
| -
|
| - low_usb.set_battery_percent(TrayPower::kLowPowerPercentage + 0.49);
|
| - {
|
| - SCOPED_TRACE("Notification for rounded low power percent");
|
| - UpdateNotificationState(low_usb, TrayPower::NOTIFICATION_LOW_POWER, true,
|
| - false);
|
| - }
|
| -
|
| - PowerSupplyProperties critical_usb = DefaultPowerSupplyProperties();
|
| - critical_usb.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - critical_usb.set_battery_percent(TrayPower::kCriticalPercentage + 0.2);
|
| - {
|
| - SCOPED_TRACE("Notification for rounded critical power percent");
|
| - UpdateNotificationState(critical_usb, TrayPower::NOTIFICATION_CRITICAL,
|
| - true, true);
|
| - }
|
| -
|
| - PowerSupplyProperties safe_usb = DefaultPowerSupplyProperties();
|
| - safe_usb.set_external_power(
|
| - power_manager::PowerSupplyProperties_ExternalPower_USB);
|
| - safe_usb.set_battery_percent(TrayPower::kNoWarningPercentage - 0.1);
|
| - {
|
| - SCOPED_TRACE("Notification removed for rounded percent above threshold");
|
| - UpdateNotificationState(safe_usb, TrayPower::NOTIFICATION_NONE, false,
|
| - true);
|
| - }
|
| -}
|
| -
|
| -} // namespace ash
|
|
|