search_result_page_view_unittest.cc 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Copyright 2014 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/app_list/views/search_result_page_view.h"
  5. #include <memory>
  6. #include <utility>
  7. #include <vector>
  8. #include "ash/app_list/app_list_test_view_delegate.h"
  9. #include "ash/app_list/model/app_list_model.h"
  10. #include "ash/app_list/model/search/test_search_result.h"
  11. #include "ash/app_list/views/app_list_main_view.h"
  12. #include "ash/app_list/views/app_list_view.h"
  13. #include "ash/app_list/views/contents_view.h"
  14. #include "ash/app_list/views/search_result_list_view.h"
  15. #include "ash/app_list/views/search_result_tile_item_list_view.h"
  16. #include "ash/app_list/views/search_result_view.h"
  17. #include "ash/constants/ash_features.h"
  18. #include "ash/public/cpp/app_list/app_list_features.h"
  19. #include "ash/public/cpp/test/test_app_list_color_provider.h"
  20. #include "base/memory/ptr_util.h"
  21. #include "base/test/scoped_feature_list.h"
  22. #include "testing/gtest/include/gtest/gtest.h"
  23. #include "ui/aura/window.h"
  24. #include "ui/views/test/views_test_base.h"
  25. namespace ash {
  26. namespace test {
  27. class SearchResultPageViewTest : public views::ViewsTestBase {
  28. public:
  29. SearchResultPageViewTest() = default;
  30. SearchResultPageViewTest(const SearchResultPageViewTest&) = delete;
  31. SearchResultPageViewTest& operator=(const SearchResultPageViewTest&) = delete;
  32. ~SearchResultPageViewTest() override = default;
  33. // Overridden from testing::Test:
  34. void SetUp() override {
  35. // Search result page view unittests are not relevant when productivity
  36. // launcher is enabled.
  37. scoped_feature_list_.InitWithFeatureState(features::kProductivityLauncher,
  38. false);
  39. views::ViewsTestBase::SetUp();
  40. // Setting up views.
  41. delegate_ = std::make_unique<AppListTestViewDelegate>();
  42. app_list_view_ = new AppListView(delegate_.get());
  43. app_list_view_->InitView(GetContext());
  44. app_list_view_->Show(AppListViewState::kPeeking, false /*is_side_shelf*/);
  45. ContentsView* contents_view =
  46. app_list_view_->app_list_main_view()->contents_view();
  47. view_ = contents_view->search_result_page_view();
  48. tile_list_view_ = contents_view->search_result_page_view()
  49. ->GetSearchResultTileItemListViewForTest();
  50. list_view_ = contents_view->search_result_page_view()
  51. ->GetSearchResultListViewForTest();
  52. }
  53. void TearDown() override {
  54. app_list_view_->GetWidget()->Close();
  55. views::ViewsTestBase::TearDown();
  56. }
  57. protected:
  58. SearchResultPageView* view() const { return view_; }
  59. SearchResultTileItemListView* tile_list_view() const {
  60. return tile_list_view_;
  61. }
  62. SearchResultListView* list_view() const { return list_view_; }
  63. SearchModel::SearchResults* GetResults() const {
  64. return AppListModelProvider::Get()->search_model()->results();
  65. }
  66. private:
  67. TestAppListColorProvider color_provider_; // Needed by AppListView.
  68. AppListView* app_list_view_ = nullptr; // Owned by native widget.
  69. SearchResultPageView* view_ = nullptr; // Owned by views hierarchy.
  70. SearchResultTileItemListView* tile_list_view_ =
  71. nullptr; // Owned by views hierarchy.
  72. SearchResultListView* list_view_ = nullptr; // Owned by views hierarchy.
  73. std::unique_ptr<AppListTestViewDelegate> delegate_;
  74. base::test::ScopedFeatureList scoped_feature_list_;
  75. };
  76. TEST_F(SearchResultPageViewTest, ResultsSorted) {
  77. SearchModel::SearchResults* results = GetResults();
  78. // Add 3 results and expect the tile list view to be the first result
  79. // container view.
  80. TestSearchResult* tile_result = new TestSearchResult();
  81. tile_result->set_display_type(ash::SearchResultDisplayType::kTile);
  82. tile_result->set_display_score(1.0);
  83. results->Add(base::WrapUnique(tile_result));
  84. {
  85. TestSearchResult* list_result = new TestSearchResult();
  86. list_result->set_display_type(ash::SearchResultDisplayType::kList);
  87. list_result->set_display_score(0.5);
  88. results->Add(base::WrapUnique(list_result));
  89. }
  90. {
  91. TestSearchResult* list_result = new TestSearchResult();
  92. list_result->set_display_type(ash::SearchResultDisplayType::kList);
  93. list_result->set_display_score(0.3);
  94. results->Add(base::WrapUnique(list_result));
  95. }
  96. // Adding results will schedule Update().
  97. RunPendingMessages();
  98. ASSERT_GE(view()->result_container_views().size(), 3u);
  99. // Privacy container is hidden.
  100. EXPECT_FALSE(view()->result_container_views()[0]->GetVisible());
  101. EXPECT_TRUE(tile_list_view()->GetVisible());
  102. EXPECT_EQ(tile_list_view(), view()->result_container_views()[1]);
  103. EXPECT_TRUE(list_view()->GetVisible());
  104. EXPECT_EQ(list_view(), view()->result_container_views()[2]);
  105. // Change the relevance of the tile result to be lower than list results. The
  106. // tile container should still be displayed first.
  107. tile_result->set_display_score(0.4);
  108. results->NotifyItemsChanged(0, 1);
  109. RunPendingMessages();
  110. // Privacy container is hidden.
  111. EXPECT_FALSE(view()->result_container_views()[0]->GetVisible());
  112. EXPECT_EQ(tile_list_view(), view()->result_container_views()[1]);
  113. EXPECT_TRUE(tile_list_view()->GetVisible());
  114. EXPECT_EQ(list_view(), view()->result_container_views()[2]);
  115. EXPECT_TRUE(list_view()->GetVisible());
  116. }
  117. TEST_F(SearchResultPageViewTest, EmptyResultListNotVisible) {
  118. SearchModel::SearchResults* results = GetResults();
  119. // Add a tile result with 0 score and leave the list results empty - list
  120. // result container should be hidden.
  121. auto tile_result = std::make_unique<TestSearchResult>();
  122. tile_result->set_display_type(ash::SearchResultDisplayType::kTile);
  123. tile_result->set_display_score(0.0);
  124. results->Add(std::move(tile_result));
  125. // Adding results will schedule Update().
  126. RunPendingMessages();
  127. EXPECT_TRUE(tile_list_view()->GetVisible());
  128. EXPECT_FALSE(list_view()->GetVisible());
  129. }
  130. TEST_F(SearchResultPageViewTest, EmptyTileItemListResultsContainerHidden) {
  131. SearchModel::SearchResults* results = GetResults();
  132. // Add a list result with 0 score and leave the tile results empty - the tile
  133. // item list container should be hidden.
  134. auto list_result = std::make_unique<TestSearchResult>();
  135. list_result->set_display_type(ash::SearchResultDisplayType::kList);
  136. list_result->set_display_score(0.0);
  137. results->Add(std::move(list_result));
  138. // Adding results will schedule Update().
  139. RunPendingMessages();
  140. EXPECT_TRUE(list_view()->GetVisible());
  141. EXPECT_FALSE(tile_list_view()->GetVisible());
  142. }
  143. } // namespace test
  144. } // namespace ash