network_detailed_view_unittest.cc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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_detailed_view.h"
  5. #include <memory>
  6. #include "ash/constants/ash_features.h"
  7. #include "ash/login_status.h"
  8. #include "ash/public/cpp/test/test_system_tray_client.h"
  9. #include "ash/strings/grit/ash_strings.h"
  10. #include "ash/style/icon_button.h"
  11. #include "ash/system/network/fake_network_detailed_view_delegate.h"
  12. #include "ash/system/network/network_info_bubble.h"
  13. #include "ash/system/tray/detailed_view_delegate.h"
  14. #include "ash/system/tray/fake_detailed_view_delegate.h"
  15. #include "ash/system/tray/tri_view.h"
  16. #include "ash/test/ash_test_base.h"
  17. #include "base/run_loop.h"
  18. #include "base/test/metrics/user_action_tester.h"
  19. #include "base/test/scoped_feature_list.h"
  20. #include "mojo/public/cpp/bindings/clone_traits.h"
  21. #include "ui/base/l10n/l10n_util.h"
  22. #include "ui/events/test/event_generator.h"
  23. #include "ui/views/controls/button/toggle_button.h"
  24. #include "ui/views/controls/separator.h"
  25. #include "ui/views/layout/box_layout.h"
  26. #include "ui/views/widget/widget.h"
  27. namespace views {
  28. class View;
  29. } // namespace views
  30. namespace ash {
  31. namespace {
  32. const std::string kNetworkdId = "/network/id";
  33. using chromeos::network_config::mojom::NetworkStatePropertiesPtr;
  34. } // namespace
  35. class NetworkDetailedViewTest : public AshTestBase {
  36. public:
  37. void SetUp() override {
  38. AshTestBase::SetUp();
  39. feature_list_.InitAndEnableFeature(features::kQuickSettingsNetworkRevamp);
  40. list_type_ = NetworkDetailedView::ListType::LIST_TYPE_NETWORK;
  41. network_detailed_view_ = new NetworkDetailedView(
  42. &fake_detailed_view_delegate_, &fake_network_detailed_view_delegate_,
  43. list_type_);
  44. widget_ = CreateFramelessTestWidget();
  45. widget_->SetFullscreen(true);
  46. widget_->SetContentsView(network_detailed_view_);
  47. base::RunLoop().RunUntilIdle();
  48. }
  49. void TearDown() override {
  50. widget_.reset();
  51. AshTestBase::TearDown();
  52. }
  53. views::Button* FindSettingsButton() {
  54. return FindViewById<views::Button*>(
  55. NetworkDetailedView::NetworkDetailedViewChildId::kSettingsButton);
  56. }
  57. views::Button* FindInfoButton() {
  58. return FindViewById<views::Button*>(
  59. NetworkDetailedView::NetworkDetailedViewChildId::kInfoButton);
  60. }
  61. NetworkInfoBubble* GetInfoBubble() {
  62. return network_detailed_view_->info_bubble_;
  63. }
  64. FakeNetworkDetailedViewDelegate* network_detailed_view_delegate() {
  65. return &fake_network_detailed_view_delegate_;
  66. }
  67. FakeDetailedViewDelegate* fake_detailed_view_delegate() {
  68. return &fake_detailed_view_delegate_;
  69. }
  70. NetworkDetailedView* network_detailed_view() {
  71. return network_detailed_view_;
  72. }
  73. void CheckHistogramBuckets(int count) {
  74. EXPECT_EQ(count, user_action_tester_.GetActionCount(
  75. "ChromeOS.SystemTray.Network.SettingsButtonPressed"));
  76. EXPECT_EQ(count, user_action_tester_.GetActionCount(
  77. "StatusArea_Network_Settings"));
  78. }
  79. private:
  80. template <class T>
  81. T FindViewById(NetworkDetailedView::NetworkDetailedViewChildId id) {
  82. return static_cast<T>(
  83. network_detailed_view_->GetViewByID(static_cast<int>(id)));
  84. }
  85. std::unique_ptr<views::Widget> widget_;
  86. NetworkDetailedView* network_detailed_view_;
  87. FakeNetworkDetailedViewDelegate fake_network_detailed_view_delegate_;
  88. FakeDetailedViewDelegate fake_detailed_view_delegate_;
  89. NetworkDetailedView::ListType list_type_;
  90. base::test::ScopedFeatureList feature_list_;
  91. base::UserActionTester user_action_tester_;
  92. };
  93. TEST_F(NetworkDetailedViewTest, PressingSettingsButtonOpensSettings) {
  94. views::Button* settings_button = FindSettingsButton();
  95. CheckHistogramBuckets(/*count=*/0);
  96. GetSessionControllerClient()->SetSessionState(
  97. session_manager::SessionState::LOCKED);
  98. LeftClickOn(settings_button);
  99. EXPECT_EQ(0, GetSystemTrayClient()->show_network_settings_count());
  100. EXPECT_EQ(0u, fake_detailed_view_delegate()->close_bubble_call_count());
  101. CheckHistogramBuckets(/*count=*/0);
  102. GetSessionControllerClient()->SetSessionState(
  103. session_manager::SessionState::ACTIVE);
  104. LeftClickOn(settings_button);
  105. EXPECT_EQ(1, GetSystemTrayClient()->show_network_settings_count());
  106. EXPECT_EQ(1u, fake_detailed_view_delegate()->close_bubble_call_count());
  107. CheckHistogramBuckets(/*count=*/1);
  108. }
  109. TEST_F(NetworkDetailedViewTest, PressingInfoButtonOpensInfoBubble) {
  110. views::Button* info_button = FindInfoButton();
  111. LeftClickOn(info_button);
  112. for (int i = 0; i < 3; ++i) {
  113. LeftClickOn(info_button);
  114. base::RunLoop().RunUntilIdle();
  115. if (i % 2 == 0) {
  116. EXPECT_FALSE(GetInfoBubble());
  117. EXPECT_TRUE(network_detailed_view()->GetWidget()->IsActive());
  118. } else {
  119. EXPECT_TRUE(GetInfoBubble());
  120. EXPECT_FALSE(network_detailed_view()->GetWidget()->IsActive());
  121. }
  122. }
  123. }
  124. } // namespace ash