phone_status_view_unittest.cc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/system/phonehub/phone_status_view.h"
  5. #include "ash/components/phonehub/mutable_phone_model.h"
  6. #include "ash/constants/ash_features.h"
  7. #include "ash/style/icon_button.h"
  8. #include "ash/test/ash_test_base.h"
  9. #include "base/strings/utf_string_conversions.h"
  10. #include "base/test/scoped_feature_list.h"
  11. #include "third_party/abseil-cpp/absl/types/optional.h"
  12. #include "ui/events/test/test_event.h"
  13. #include "ui/views/controls/image_view.h"
  14. #include "ui/views/controls/label.h"
  15. #include "ui/views/test/button_test_api.h"
  16. #include "ui/views/widget/widget.h"
  17. namespace ash {
  18. using PhoneStatusModel = phonehub::PhoneStatusModel;
  19. class PhoneStatusViewTest : public AshTestBase,
  20. public PhoneStatusView::Delegate {
  21. public:
  22. PhoneStatusViewTest() = default;
  23. ~PhoneStatusViewTest() override = default;
  24. // AshTestBase:
  25. void SetUp() override {
  26. feature_list_.InitAndEnableFeature(chromeos::features::kPhoneHub);
  27. AshTestBase::SetUp();
  28. widget_ = CreateFramelessTestWidget();
  29. status_view_ = widget_->SetContentsView(
  30. std::make_unique<PhoneStatusView>(&phone_model_, this));
  31. }
  32. void TearDown() override {
  33. widget_.reset();
  34. AshTestBase::TearDown();
  35. }
  36. // PhoneStatusView::Delegate:
  37. bool CanOpenConnectedDeviceSettings() override {
  38. return can_open_connected_device_settings_;
  39. }
  40. void OpenConnectedDevicesSettings() override {
  41. connected_device_settings_opened_ = true;
  42. }
  43. protected:
  44. std::unique_ptr<views::Widget> widget_;
  45. PhoneStatusView* status_view_ = nullptr;
  46. phonehub::MutablePhoneModel phone_model_;
  47. base::test::ScopedFeatureList feature_list_;
  48. bool can_open_connected_device_settings_ = false;
  49. bool connected_device_settings_opened_ = false;
  50. };
  51. TEST_F(PhoneStatusViewTest, PhoneStatusLabelsContent) {
  52. std::u16string expected_name_text = u"Test Phone Name";
  53. std::u16string expected_provider_text = u"Test Provider";
  54. std::u16string expected_battery_text = u"10%";
  55. phone_model_.SetPhoneName(expected_name_text);
  56. PhoneStatusModel::MobileConnectionMetadata metadata = {
  57. .signal_strength = PhoneStatusModel::SignalStrength::kZeroBars,
  58. .mobile_provider = expected_provider_text,
  59. };
  60. auto phone_status =
  61. PhoneStatusModel(PhoneStatusModel::MobileStatus::kSimWithReception,
  62. metadata, PhoneStatusModel::ChargingState::kNotCharging,
  63. PhoneStatusModel::BatterySaverState::kOff, 10);
  64. phone_model_.SetPhoneStatusModel(phone_status);
  65. // All labels should display phone's status and information.
  66. EXPECT_EQ(expected_name_text, status_view_->phone_name_label_->GetText());
  67. EXPECT_EQ(expected_battery_text, status_view_->battery_label_->GetText());
  68. expected_name_text = u"New Phone Name";
  69. expected_provider_text = u"New Provider";
  70. expected_battery_text = u"20%";
  71. phone_model_.SetPhoneName(expected_name_text);
  72. metadata.mobile_provider = expected_provider_text;
  73. phone_status =
  74. PhoneStatusModel(PhoneStatusModel::MobileStatus::kSimWithReception,
  75. metadata, PhoneStatusModel::ChargingState::kNotCharging,
  76. PhoneStatusModel::BatterySaverState::kOff, 20);
  77. phone_model_.SetPhoneStatusModel(phone_status);
  78. // Changes in the model should be reflected in the labels.
  79. EXPECT_EQ(expected_name_text, status_view_->phone_name_label_->GetText());
  80. EXPECT_EQ(expected_battery_text, status_view_->battery_label_->GetText());
  81. // Simulate phone disconnected with a null |PhoneStatusModel| returned.
  82. phone_model_.SetPhoneStatusModel(absl::nullopt);
  83. // Existing phone status will be cleared to reflect the model change.
  84. EXPECT_TRUE(status_view_->battery_label_->GetText().empty());
  85. EXPECT_TRUE(status_view_->battery_icon_->GetImage().isNull());
  86. EXPECT_TRUE(status_view_->signal_icon_->GetImage().isNull());
  87. }
  88. TEST_F(PhoneStatusViewTest, ClickOnSettings) {
  89. // The settings button is not visible if we can't open the settings.
  90. EXPECT_FALSE(status_view_->settings_button_->GetVisible());
  91. // The settings button is visible if we can open settings.
  92. can_open_connected_device_settings_ = true;
  93. status_view_ = widget_->SetContentsView(
  94. std::make_unique<PhoneStatusView>(&phone_model_, this));
  95. EXPECT_TRUE(status_view_->settings_button_->GetVisible());
  96. // Click on the settings button.
  97. views::test::ButtonTestApi(status_view_->settings_button_)
  98. .NotifyClick(ui::test::TestEvent());
  99. EXPECT_TRUE(connected_device_settings_opened_);
  100. }
  101. } // namespace ash