| Index: ui/app_list/views/search_box_view_unittest.cc
|
| diff --git a/ui/app_list/views/search_box_view_unittest.cc b/ui/app_list/views/search_box_view_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3d3ca350a2a10aaa28ce724c3e966edffc94f8db
|
| --- /dev/null
|
| +++ b/ui/app_list/views/search_box_view_unittest.cc
|
| @@ -0,0 +1,163 @@
|
| +// 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_box_view.h"
|
| +
|
| +#include <cctype>
|
| +#include <map>
|
| +
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "ui/app_list/test/app_list_test_view_delegate.h"
|
| +#include "ui/app_list/views/search_box_view_delegate.h"
|
| +#include "ui/views/controls/textfield/textfield.h"
|
| +#include "ui/views/test/widget_test.h"
|
| +
|
| +namespace app_list {
|
| +namespace test {
|
| +
|
| +class KeyPressCounterView : public views::View {
|
| + public:
|
| + KeyPressCounterView() : count_(0) {}
|
| + virtual ~KeyPressCounterView() {}
|
| +
|
| + int GetCountAndReset() {
|
| + int count = count_;
|
| + count_ = 0;
|
| + return count;
|
| + }
|
| +
|
| + private:
|
| + // Overridden from views::View:
|
| + virtual bool OnKeyPressed(const ui::KeyEvent& key_event) OVERRIDE {
|
| + if (!::isalnum(static_cast<int>(key_event.key_code()))) {
|
| + ++count_;
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| + int count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(KeyPressCounterView);
|
| +};
|
| +
|
| +class SearchBoxViewTest : public views::test::WidgetTest,
|
| + public SearchBoxViewDelegate {
|
| + public:
|
| + SearchBoxViewTest() : query_changed_count_(0) {}
|
| + virtual ~SearchBoxViewTest() {}
|
| +
|
| + // Overridden from testing::Test:
|
| + virtual void SetUp() OVERRIDE {
|
| + views::test::WidgetTest::SetUp();
|
| + widget_ = CreateTopLevelPlatformWidget();
|
| + view_ = new SearchBoxView(this, &view_delegate_);
|
| + counter_view_ = new KeyPressCounterView();
|
| + widget_->GetContentsView()->AddChildView(view_);
|
| + widget_->GetContentsView()->AddChildView(counter_view_);
|
| + view_->set_contents_view(counter_view_);
|
| + }
|
| +
|
| + virtual void TearDown() OVERRIDE {
|
| + widget_->CloseNow();
|
| + views::test::WidgetTest::TearDown();
|
| + }
|
| +
|
| + protected:
|
| + SearchBoxView* view() { return view_; }
|
| +
|
| + 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 ResetAutoLaunchTimeout() {
|
| + view_delegate_.set_auto_launch_timeout(base::TimeDelta());
|
| + }
|
| +
|
| + int GetContentsViewKeyPressCountAndReset() {
|
| + return counter_view_->GetCountAndReset();
|
| + }
|
| +
|
| + void KeyPress(ui::KeyboardCode key_code) {
|
| + ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, ui::EF_NONE, true);
|
| + view_->search_box()->OnKeyPressed(event);
|
| + // Emulates the input method.
|
| + if (::isalnum(static_cast<int>(key_code))) {
|
| + base::char16 character = ::tolower(static_cast<int>(key_code));
|
| + view_->search_box()->InsertText(base::string16(1, character));
|
| + }
|
| + }
|
| +
|
| + std::string GetLastQueryAndReset() {
|
| + base::string16 query = last_query_;
|
| + last_query_.clear();
|
| + return base::UTF16ToUTF8(query);
|
| + }
|
| +
|
| + int GetQueryChangedCountAndReset() {
|
| + int result = query_changed_count_;
|
| + query_changed_count_ = 0;
|
| + return result;
|
| + }
|
| +
|
| + private:
|
| + // Overridden from SearchBoxViewDelegate:
|
| + virtual void QueryChanged(SearchBoxView* sender) OVERRIDE {
|
| + ++query_changed_count_;
|
| + last_query_ = sender->search_box()->text();
|
| + }
|
| +
|
| + AppListTestViewDelegate view_delegate_;
|
| + views::Widget* widget_;
|
| + SearchBoxView* view_;
|
| + KeyPressCounterView* counter_view_;
|
| + base::string16 last_query_;
|
| + int query_changed_count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SearchBoxViewTest);
|
| +};
|
| +
|
| +TEST_F(SearchBoxViewTest, Basic) {
|
| + KeyPress(ui::VKEY_A);
|
| + EXPECT_EQ("a", GetLastQueryAndReset());
|
| + EXPECT_EQ(1, GetQueryChangedCountAndReset());
|
| + EXPECT_EQ(0, GetContentsViewKeyPressCountAndReset());
|
| +
|
| + KeyPress(ui::VKEY_DOWN);
|
| + EXPECT_EQ(0, GetQueryChangedCountAndReset());
|
| + EXPECT_EQ(1, GetContentsViewKeyPressCountAndReset());
|
| +
|
| + view()->ClearSearch();
|
| + EXPECT_EQ(1, GetQueryChangedCountAndReset());
|
| + EXPECT_TRUE(GetLastQueryAndReset().empty());
|
| +}
|
| +
|
| +TEST_F(SearchBoxViewTest, CancelAutoLaunch) {
|
| + SetLongAutoLaunchTimeout();
|
| + ASSERT_NE(base::TimeDelta(), GetAutoLaunchTimeout());
|
| +
|
| + // Normal key event cancels the timeout.
|
| + KeyPress(ui::VKEY_A);
|
| + EXPECT_EQ(base::TimeDelta(), GetAutoLaunchTimeout());
|
| + ResetAutoLaunchTimeout();
|
| +
|
| + // Unusual key event doesn't cancel -- it will be canceled in
|
| + // SearchResultListView.
|
| + SetLongAutoLaunchTimeout();
|
| + KeyPress(ui::VKEY_DOWN);
|
| + EXPECT_NE(base::TimeDelta(), GetAutoLaunchTimeout());
|
| + ResetAutoLaunchTimeout();
|
| +
|
| + // Clearing search box also cancels.
|
| + SetLongAutoLaunchTimeout();
|
| + view()->ClearSearch();
|
| + EXPECT_EQ(base::TimeDelta(), GetAutoLaunchTimeout());
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace app_list
|
|
|