| Index: ui/app_list/views/search_result_list_view_unittest.cc
|
| diff --git a/ui/app_list/views/search_result_list_view_unittest.cc b/ui/app_list/views/search_result_list_view_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..16d9b85498b31828ca571f7d12345366b1385685
|
| --- /dev/null
|
| +++ b/ui/app_list/views/search_result_list_view_unittest.cc
|
| @@ -0,0 +1,189 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/app_list/views/search_result_list_view.h"
|
| +
|
| +#include <map>
|
| +
|
| +#include "ui/app_list/app_list_model.h"
|
| +#include "ui/app_list/search_result.h"
|
| +#include "ui/app_list/test/app_list_test_view_delegate.h"
|
| +#include "ui/app_list/views/search_result_list_view_delegate.h"
|
| +#include "ui/views/test/views_test_base.h"
|
| +
|
| +namespace app_list {
|
| +namespace test {
|
| +
|
| +namespace {
|
| +int kDefaultSearchItems = 5;
|
| +} // namespace
|
| +
|
| +class SearchResultListViewTest : public views::ViewsTestBase,
|
| + public SearchResultListViewDelegate {
|
| + public:
|
| + SearchResultListViewTest() {}
|
| + virtual ~SearchResultListViewTest() {}
|
| +
|
| + // Overridden from testing::Test:
|
| + virtual void SetUp() OVERRIDE {
|
| + views::ViewsTestBase::SetUp();
|
| + view_.reset(new SearchResultListView(this, &view_delegate_));
|
| + view_->SetResults(view_delegate_.GetModel()->results());
|
| + view_->SetSelectedIndex(0);
|
| + }
|
| +
|
| + protected:
|
| + SearchResultListView* view() { return view_.get(); }
|
| +
|
| + void SetLongAutoLaunchTimeout() {
|
| + // Sets a long timeout that lasts longer than the test run.
|
| + view_delegate_.set_auto_launch_timeout(base::TimeDelta::FromDays(1));
|
| + }
|
| +
|
| + base::TimeDelta GetAutoLaunchTimeout() {
|
| + return view_delegate_.GetAutoLaunchTimeout();
|
| + }
|
| +
|
| + void SetUpSearchResults() {
|
| + AppListModel::SearchResults* results = view_delegate_.GetModel()->results();
|
| + for (int i = 0; i < kDefaultSearchItems; ++i)
|
| + results->Add(new SearchResult());
|
| +
|
| + // Adding results will schedule Update().
|
| + RunPendingMessages();
|
| + }
|
| +
|
| + int GetOpenResultCountAndReset(int ranking) {
|
| + int result = open_result_counts_[ranking];
|
| + open_result_counts_.clear();
|
| + return result;
|
| + }
|
| +
|
| + int GetSearchResults() {
|
| + return view_->last_visible_index_ + 1;
|
| + }
|
| +
|
| + int GetSelectedIndex() {
|
| + return view_->selected_index_;
|
| + }
|
| +
|
| + void ResetSelectedIndex() {
|
| + view_->SetSelectedIndex(0);
|
| + }
|
| +
|
| + bool KeyPress(ui::KeyboardCode key_code) {
|
| + ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE, true);
|
| + return view_->OnKeyPressed(event);
|
| + }
|
| +
|
| + bool IsAutoLaunching() {
|
| + return view_->auto_launch_animation_;
|
| + }
|
| +
|
| + void ForceAutoLaunch() {
|
| + view_->ForceAutoLaunchForTest();
|
| + }
|
| +
|
| + private:
|
| + // Overridden from SearchResultListViewDelegate:
|
| + virtual void OpenResult(SearchResult* result,
|
| + bool auto_launch,
|
| + int event_flags) OVERRIDE {
|
| + const AppListModel::SearchResults* results =
|
| + view_delegate_.GetModel()->results();
|
| + for (size_t i = 0; i < results->item_count(); ++i) {
|
| + if (results->GetItemAt(i) == result) {
|
| + open_result_counts_[i]++;
|
| + break;
|
| + }
|
| + }
|
| + }
|
| + virtual void InvokeResultAction(SearchResult* result,
|
| + int action_index,
|
| + int event_flags) OVERRIDE {}
|
| + virtual void OnResultInstalled(SearchResult* result) OVERRIDE {}
|
| + virtual void OnResultUninstalled(SearchResult* result) OVERRIDE {}
|
| +
|
| + AppListTestViewDelegate view_delegate_;
|
| + scoped_ptr<SearchResultListView> view_;
|
| + std::map<int, int> open_result_counts_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SearchResultListViewTest);
|
| +};
|
| +
|
| +TEST_F(SearchResultListViewTest, Basic) {
|
| + SetUpSearchResults();
|
| +
|
| + const int results = GetSearchResults();
|
| + EXPECT_EQ(kDefaultSearchItems, results);
|
| + EXPECT_EQ(0, GetSelectedIndex());
|
| + EXPECT_FALSE(IsAutoLaunching());
|
| +
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_RETURN));
|
| + EXPECT_EQ(1, GetOpenResultCountAndReset(0));
|
| +
|
| + for (int i = 1; i < results; ++i) {
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_DOWN));
|
| + EXPECT_EQ(i, GetSelectedIndex());
|
| + }
|
| + // Doesn't rotate.
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_DOWN));
|
| + EXPECT_EQ(results - 1, GetSelectedIndex());
|
| +
|
| + for (int i = 1; i < results; ++i) {
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_UP));
|
| + EXPECT_EQ(results - i - 1, GetSelectedIndex());
|
| + }
|
| + // Doesn't rotate.
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_UP));
|
| + EXPECT_EQ(0, GetSelectedIndex());
|
| + ResetSelectedIndex();
|
| +
|
| + for (int i = 1; i < results; ++i) {
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_TAB));
|
| + EXPECT_EQ(i, GetSelectedIndex());
|
| + }
|
| + // Doesn't rotate.
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_TAB));
|
| + EXPECT_EQ(results - 1, GetSelectedIndex());
|
| +}
|
| +
|
| +TEST_F(SearchResultListViewTest, AutoLaunch) {
|
| + SetLongAutoLaunchTimeout();
|
| + SetUpSearchResults();
|
| +
|
| + EXPECT_TRUE(IsAutoLaunching());
|
| + ForceAutoLaunch();
|
| +
|
| + EXPECT_FALSE(IsAutoLaunching());
|
| + EXPECT_EQ(1, GetOpenResultCountAndReset(0));
|
| +
|
| + // The timeout has to be cleared after the auto-launch, to prevent opening
|
| + // the search result twice. See the comment in AnimationEnded().
|
| + EXPECT_EQ(base::TimeDelta(), GetAutoLaunchTimeout());
|
| +}
|
| +
|
| +TEST_F(SearchResultListViewTest, CancelAutoLaunch) {
|
| + SetLongAutoLaunchTimeout();
|
| + SetUpSearchResults();
|
| +
|
| + EXPECT_TRUE(IsAutoLaunching());
|
| +
|
| + EXPECT_TRUE(KeyPress(ui::VKEY_DOWN));
|
| + EXPECT_FALSE(IsAutoLaunching());
|
| +
|
| + SetLongAutoLaunchTimeout();
|
| + view()->UpdateAutoLaunchState();
|
| + EXPECT_TRUE(IsAutoLaunching());
|
| +
|
| + view()->SetVisible(false);
|
| + EXPECT_FALSE(IsAutoLaunching());
|
| +
|
| + SetLongAutoLaunchTimeout();
|
| + view()->SetVisible(true);
|
| + EXPECT_TRUE(IsAutoLaunching());
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace app_list
|
|
|