| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/app_list/views/search_result_list_view.h" | 5 #include "ui/app_list/views/search_result_list_view.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "ui/app_list/app_list_model.h" | 10 #include "ui/app_list/app_list_model.h" |
| 11 #include "ui/app_list/search_result.h" | 11 #include "ui/app_list/search_result.h" |
| 12 #include "ui/app_list/test/app_list_test_view_delegate.h" | 12 #include "ui/app_list/test/app_list_test_view_delegate.h" |
| 13 #include "ui/app_list/views/progress_bar_view.h" |
| 13 #include "ui/app_list/views/search_result_list_view_delegate.h" | 14 #include "ui/app_list/views/search_result_list_view_delegate.h" |
| 14 #include "ui/app_list/views/search_result_view.h" | 15 #include "ui/app_list/views/search_result_view.h" |
| 15 #include "ui/views/test/views_test_base.h" | 16 #include "ui/views/test/views_test_base.h" |
| 16 | 17 |
| 17 namespace app_list { | 18 namespace app_list { |
| 18 namespace test { | 19 namespace test { |
| 19 | 20 |
| 20 namespace { | 21 namespace { |
| 21 int kDefaultSearchItems = 5; | 22 int kDefaultSearchItems = 5; |
| 22 } // namespace | 23 } // namespace |
| 23 | 24 |
| 24 class SearchResultListViewTest : public views::ViewsTestBase, | 25 class SearchResultListViewTest : public views::ViewsTestBase, |
| 25 public SearchResultListViewDelegate { | 26 public SearchResultListViewDelegate { |
| 26 public: | 27 public: |
| 27 SearchResultListViewTest() {} | 28 SearchResultListViewTest() {} |
| 28 virtual ~SearchResultListViewTest() {} | 29 virtual ~SearchResultListViewTest() {} |
| 29 | 30 |
| 30 // Overridden from testing::Test: | 31 // Overridden from testing::Test: |
| 31 virtual void SetUp() OVERRIDE { | 32 virtual void SetUp() OVERRIDE { |
| 32 views::ViewsTestBase::SetUp(); | 33 views::ViewsTestBase::SetUp(); |
| 33 view_.reset(new SearchResultListView(this, &view_delegate_)); | 34 view_.reset(new SearchResultListView(this, &view_delegate_)); |
| 34 view_->SetResults(view_delegate_.GetModel()->results()); | 35 view_->SetResults(view_delegate_.GetModel()->results()); |
| 35 view_->SetSelectedIndex(0); | 36 view_->SetSelectedIndex(0); |
| 36 } | 37 } |
| 37 | 38 |
| 38 protected: | 39 protected: |
| 39 SearchResultListView* view() { return view_.get(); } | 40 SearchResultListView* view() { return view_.get(); } |
| 40 | 41 |
| 42 AppListModel::SearchResults* GetResults() { |
| 43 return view_delegate_.GetModel()->results(); |
| 44 } |
| 45 |
| 41 void SetLongAutoLaunchTimeout() { | 46 void SetLongAutoLaunchTimeout() { |
| 42 // Sets a long timeout that lasts longer than the test run. | 47 // Sets a long timeout that lasts longer than the test run. |
| 43 view_delegate_.set_auto_launch_timeout(base::TimeDelta::FromDays(1)); | 48 view_delegate_.set_auto_launch_timeout(base::TimeDelta::FromDays(1)); |
| 44 } | 49 } |
| 45 | 50 |
| 46 base::TimeDelta GetAutoLaunchTimeout() { | 51 base::TimeDelta GetAutoLaunchTimeout() { |
| 47 return view_delegate_.GetAutoLaunchTimeout(); | 52 return view_delegate_.GetAutoLaunchTimeout(); |
| 48 } | 53 } |
| 49 | 54 |
| 50 void SetUpSearchResults() { | 55 void SetUpSearchResults() { |
| 51 AppListModel::SearchResults* results = view_delegate_.GetModel()->results(); | 56 AppListModel::SearchResults* results = GetResults(); |
| 52 for (int i = 0; i < kDefaultSearchItems; ++i) | 57 for (int i = 0; i < kDefaultSearchItems; ++i) |
| 53 results->Add(new SearchResult()); | 58 results->Add(new SearchResult()); |
| 54 | 59 |
| 55 // Adding results will schedule Update(). | 60 // Adding results will schedule Update(). |
| 56 RunPendingMessages(); | 61 RunPendingMessages(); |
| 57 } | 62 } |
| 58 | 63 |
| 59 int GetOpenResultCountAndReset(int ranking) { | 64 int GetOpenResultCountAndReset(int ranking) { |
| 60 int result = view_delegate_.open_search_result_counts()[ranking]; | 65 int result = view_delegate_.open_search_result_counts()[ranking]; |
| 61 view_delegate_.open_search_result_counts().clear(); | 66 view_delegate_.open_search_result_counts().clear(); |
| 62 return result; | 67 return result; |
| 63 } | 68 } |
| 64 | 69 |
| 65 int GetSearchResults() { | 70 int GetResultCount() { return view_->last_visible_index_ + 1; } |
| 66 return view_->last_visible_index_ + 1; | |
| 67 } | |
| 68 | 71 |
| 69 int GetSelectedIndex() { | 72 int GetSelectedIndex() { |
| 70 return view_->selected_index_; | 73 return view_->selected_index_; |
| 71 } | 74 } |
| 72 | 75 |
| 73 void ResetSelectedIndex() { | 76 void ResetSelectedIndex() { |
| 74 view_->SetSelectedIndex(0); | 77 view_->SetSelectedIndex(0); |
| 75 } | 78 } |
| 76 | 79 |
| 77 void AddTestResultAtIndex(int index) { | 80 void AddTestResultAtIndex(int index) { |
| 78 view_delegate_.GetModel()->results()->Add(new SearchResult()); | 81 GetResults()->Add(new SearchResult()); |
| 79 } | 82 } |
| 80 | 83 |
| 81 void DeleteResultAt(int index) { | 84 void DeleteResultAt(int index) { GetResults()->DeleteAt(index); } |
| 82 view_delegate_.GetModel()->results()->DeleteAt(index); | |
| 83 } | |
| 84 | 85 |
| 85 bool KeyPress(ui::KeyboardCode key_code) { | 86 bool KeyPress(ui::KeyboardCode key_code) { |
| 86 ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE); | 87 ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE); |
| 87 return view_->OnKeyPressed(event); | 88 return view_->OnKeyPressed(event); |
| 88 } | 89 } |
| 89 | 90 |
| 90 bool IsAutoLaunching() { | 91 bool IsAutoLaunching() { |
| 91 return view_->auto_launch_animation_; | 92 return view_->auto_launch_animation_; |
| 92 } | 93 } |
| 93 | 94 |
| 94 void ForceAutoLaunch() { | 95 void ForceAutoLaunch() { |
| 95 view_->ForceAutoLaunchForTest(); | 96 view_->ForceAutoLaunchForTest(); |
| 96 } | 97 } |
| 97 | 98 |
| 98 void ExpectConsistent() { | 99 void ExpectConsistent() { |
| 99 // Adding results will schedule Update(). | 100 // Adding results will schedule Update(). |
| 100 RunPendingMessages(); | 101 RunPendingMessages(); |
| 101 | 102 |
| 102 AppListModel::SearchResults* results = view_delegate_.GetModel()->results(); | 103 AppListModel::SearchResults* results = GetResults(); |
| 103 for (size_t i = 0; i < results->item_count(); ++i) { | 104 for (size_t i = 0; i < results->item_count(); ++i) { |
| 104 EXPECT_EQ(results->GetItemAt(i), view_->GetResultViewAt(i)->result()); | 105 EXPECT_EQ(results->GetItemAt(i), view_->GetResultViewAt(i)->result()); |
| 105 } | 106 } |
| 106 } | 107 } |
| 107 | 108 |
| 109 ProgressBarView* GetProgressBarAt(size_t index) { |
| 110 return view()->GetResultViewAt(index)->progress_bar_; |
| 111 } |
| 112 |
| 108 private: | 113 private: |
| 109 virtual void OnResultInstalled(SearchResult* result) OVERRIDE {} | 114 virtual void OnResultInstalled(SearchResult* result) OVERRIDE {} |
| 110 virtual void OnResultUninstalled(SearchResult* result) OVERRIDE {} | 115 virtual void OnResultUninstalled(SearchResult* result) OVERRIDE {} |
| 111 | 116 |
| 112 AppListTestViewDelegate view_delegate_; | 117 AppListTestViewDelegate view_delegate_; |
| 113 scoped_ptr<SearchResultListView> view_; | 118 scoped_ptr<SearchResultListView> view_; |
| 114 | 119 |
| 115 DISALLOW_COPY_AND_ASSIGN(SearchResultListViewTest); | 120 DISALLOW_COPY_AND_ASSIGN(SearchResultListViewTest); |
| 116 }; | 121 }; |
| 117 | 122 |
| 118 TEST_F(SearchResultListViewTest, Basic) { | 123 TEST_F(SearchResultListViewTest, Basic) { |
| 119 SetUpSearchResults(); | 124 SetUpSearchResults(); |
| 120 | 125 |
| 121 const int results = GetSearchResults(); | 126 const int results = GetResultCount(); |
| 122 EXPECT_EQ(kDefaultSearchItems, results); | 127 EXPECT_EQ(kDefaultSearchItems, results); |
| 123 EXPECT_EQ(0, GetSelectedIndex()); | 128 EXPECT_EQ(0, GetSelectedIndex()); |
| 124 EXPECT_FALSE(IsAutoLaunching()); | 129 EXPECT_FALSE(IsAutoLaunching()); |
| 125 | 130 |
| 126 EXPECT_TRUE(KeyPress(ui::VKEY_RETURN)); | 131 EXPECT_TRUE(KeyPress(ui::VKEY_RETURN)); |
| 127 EXPECT_EQ(1, GetOpenResultCountAndReset(0)); | 132 EXPECT_EQ(1, GetOpenResultCountAndReset(0)); |
| 128 | 133 |
| 129 for (int i = 1; i < results; ++i) { | 134 for (int i = 1; i < results; ++i) { |
| 130 EXPECT_TRUE(KeyPress(ui::VKEY_DOWN)); | 135 EXPECT_TRUE(KeyPress(ui::VKEY_DOWN)); |
| 131 EXPECT_EQ(i, GetSelectedIndex()); | 136 EXPECT_EQ(i, GetSelectedIndex()); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 | 207 |
| 203 // Insert at end. | 208 // Insert at end. |
| 204 AddTestResultAtIndex(kDefaultSearchItems); | 209 AddTestResultAtIndex(kDefaultSearchItems); |
| 205 ExpectConsistent(); | 210 ExpectConsistent(); |
| 206 | 211 |
| 207 // Delete from start. | 212 // Delete from start. |
| 208 DeleteResultAt(0); | 213 DeleteResultAt(0); |
| 209 ExpectConsistent(); | 214 ExpectConsistent(); |
| 210 } | 215 } |
| 211 | 216 |
| 217 // Regression test for http://crbug.com/402859 to ensure ProgressBar is |
| 218 // initialized properly in SearchResultListView::SetResult(). |
| 219 TEST_F(SearchResultListViewTest, ProgressBar) { |
| 220 SetUpSearchResults(); |
| 221 |
| 222 GetResults()->GetItemAt(0)->SetIsInstalling(true); |
| 223 EXPECT_EQ(0.0f, GetProgressBarAt(0)->current_value()); |
| 224 GetResults()->GetItemAt(0)->SetPercentDownloaded(10); |
| 225 |
| 226 DeleteResultAt(0); |
| 227 RunPendingMessages(); |
| 228 EXPECT_EQ(0.0f, GetProgressBarAt(0)->current_value()); |
| 229 } |
| 230 |
| 212 } // namespace test | 231 } // namespace test |
| 213 } // namespace app_list | 232 } // namespace app_list |
| OLD | NEW |