network_list_wifi_header_view_unittest.cc 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. // Copyright 2022 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/network/network_list_wifi_header_view_impl.h"
  5. #include <memory>
  6. #include "ash/constants/ash_features.h"
  7. #include "ash/public/cpp/test/test_system_tray_client.h"
  8. #include "ash/strings/grit/ash_strings.h"
  9. #include "ash/style/icon_button.h"
  10. #include "ash/system/network/fake_network_list_network_header_view_delegate.h"
  11. #include "ash/system/tray/tray_toggle_button.h"
  12. #include "ash/test/ash_test_base.h"
  13. #include "base/run_loop.h"
  14. #include "base/test/scoped_feature_list.h"
  15. #include "chromeos/services/network_config/public/cpp/cros_network_config_test_helper.h"
  16. #include "ui/base/l10n/l10n_util.h"
  17. #include "ui/views/controls/label.h"
  18. #include "ui/views/widget/widget.h"
  19. namespace ash {
  20. namespace {
  21. using chromeos::network_config::CrosNetworkConfigTestHelper;
  22. } // namespace
  23. class NetworkListWifiHeaderViewTest : public AshTestBase {
  24. public:
  25. NetworkListWifiHeaderViewTest() = default;
  26. ~NetworkListWifiHeaderViewTest() override = default;
  27. // AshTestBase:
  28. void SetUp() override {
  29. AshTestBase::SetUp();
  30. feature_list_.InitAndEnableFeature(features::kQuickSettingsNetworkRevamp);
  31. std::unique_ptr<NetworkListWifiHeaderViewImpl>
  32. network_list_wifi_header_view =
  33. std::make_unique<NetworkListWifiHeaderViewImpl>(
  34. &fake_network_list_network_header_delegate_);
  35. widget_ = CreateFramelessTestWidget();
  36. widget_->SetFullscreen(true);
  37. network_list_wifi_header_view_ =
  38. widget_->SetContentsView(std::move(network_list_wifi_header_view));
  39. }
  40. void TearDown() override {
  41. widget_.reset();
  42. AshTestBase::TearDown();
  43. }
  44. void SetJoinWifiButtonState(bool enabled, bool visible) {
  45. network_list_wifi_header_view()->SetJoinWifiButtonState(enabled, visible);
  46. }
  47. void SetToggleState(bool enabled, bool is_on) {
  48. network_list_wifi_header_view()->SetToggleState(enabled, is_on);
  49. }
  50. NetworkStateTestHelper* network_state_helper() {
  51. return &network_config_helper_.network_state_helper();
  52. }
  53. IconButton* GetJoinWifiButton() {
  54. return FindViewById<IconButton*>(
  55. NetworkListWifiHeaderViewImpl::kJoinWifiButtonId);
  56. }
  57. TrayToggleButton* GetToggleButton() {
  58. return FindViewById<TrayToggleButton*>(
  59. NetworkListNetworkHeaderView::kToggleButtonId);
  60. }
  61. views::Label* GetLabelView() {
  62. return FindViewById<views::Label*>(
  63. NetworkListHeaderView::kTitleLabelViewId);
  64. }
  65. FakeNetworkListNetworkHeaderViewDelegate*
  66. fake_network_list_network_header_delegate() {
  67. return &fake_network_list_network_header_delegate_;
  68. }
  69. NetworkListWifiHeaderViewImpl* network_list_wifi_header_view() {
  70. return network_list_wifi_header_view_;
  71. }
  72. private:
  73. template <class T>
  74. T FindViewById(int id) {
  75. return static_cast<T>(
  76. network_list_wifi_header_view_->container()->GetViewByID(id));
  77. }
  78. std::unique_ptr<views::Widget> widget_;
  79. CrosNetworkConfigTestHelper network_config_helper_;
  80. base::test::ScopedFeatureList feature_list_;
  81. FakeNetworkListNetworkHeaderViewDelegate
  82. fake_network_list_network_header_delegate_;
  83. NetworkListWifiHeaderViewImpl* network_list_wifi_header_view_;
  84. };
  85. TEST_F(NetworkListWifiHeaderViewTest, HeaderLabel) {
  86. views::Label* label_view = GetLabelView();
  87. ASSERT_NE(nullptr, label_view);
  88. EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_NETWORK_WIFI),
  89. label_view->GetText());
  90. }
  91. TEST_F(NetworkListWifiHeaderViewTest, JoinWifiButtonStates) {
  92. IconButton* join_wifi_button = GetJoinWifiButton();
  93. ASSERT_NE(nullptr, join_wifi_button);
  94. EXPECT_TRUE(join_wifi_button->GetEnabled());
  95. EXPECT_TRUE(join_wifi_button->GetVisible());
  96. EXPECT_EQ(0, GetSystemTrayClient()->show_network_create_count());
  97. LeftClickOn(join_wifi_button);
  98. EXPECT_EQ(1, GetSystemTrayClient()->show_network_create_count());
  99. EXPECT_EQ(::onc::network_type::kWiFi,
  100. GetSystemTrayClient()->last_network_type());
  101. SetJoinWifiButtonState(/*enabled=*/false, /*visible=*/false);
  102. EXPECT_FALSE(join_wifi_button->GetVisible());
  103. EXPECT_FALSE(join_wifi_button->GetEnabled());
  104. }
  105. TEST_F(NetworkListWifiHeaderViewTest, WifiToggleButton) {
  106. TrayToggleButton* toggle_button = GetToggleButton();
  107. ASSERT_NE(nullptr, toggle_button);
  108. EXPECT_TRUE(toggle_button->GetEnabled());
  109. IconButton* join_wifi_button = GetJoinWifiButton();
  110. ASSERT_NE(nullptr, join_wifi_button);
  111. EXPECT_TRUE(join_wifi_button->GetEnabled());
  112. SetToggleState(/*enabled=*/false, /*is_on=*/false);
  113. base::RunLoop().RunUntilIdle();
  114. EXPECT_FALSE(toggle_button->GetEnabled());
  115. EXPECT_FALSE(toggle_button->GetIsOn());
  116. // Add WiFi button is disabled each time WiFi is turned off.
  117. EXPECT_FALSE(join_wifi_button->GetEnabled());
  118. SetToggleState(/*enabled=*/true, /*is_on=*/true);
  119. base::RunLoop().RunUntilIdle();
  120. EXPECT_TRUE(toggle_button->GetEnabled());
  121. EXPECT_TRUE(toggle_button->GetIsOn());
  122. // Add WiFi button is enabled each time WiFi is turned on.
  123. EXPECT_TRUE(join_wifi_button->GetEnabled());
  124. EXPECT_EQ(
  125. 0u,
  126. fake_network_list_network_header_delegate()->wifi_toggle_clicked_count());
  127. LeftClickOn(toggle_button);
  128. EXPECT_EQ(
  129. 1u,
  130. fake_network_list_network_header_delegate()->wifi_toggle_clicked_count());
  131. EXPECT_FALSE(toggle_button->GetIsOn());
  132. }
  133. } // namespace ash