| // Copyright 2013 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. |
| |
| #import "base/mac/scoped_nsobject.h" |
| #include "base/macros.h" |
| #include "base/strings/utf_string_conversions.h" |
| #import "testing/gtest_mac.h" |
| #include "ui/app_list/app_list_view_delegate.h" |
| #import "ui/app_list/cocoa/app_list_view_controller.h" |
| #import "ui/app_list/cocoa/app_list_window_controller.h" |
| #include "ui/app_list/search_box_model.h" |
| #include "ui/app_list/test/app_list_test_view_delegate.h" |
| #import "ui/gfx/test/ui_cocoa_test_helper.h" |
| |
| namespace { |
| |
| class AppListWindowControllerTest : public ui::CocoaTest { |
| public: |
| AppListWindowControllerTest(); |
| |
| protected: |
| void TearDown() override; |
| |
| base::scoped_nsobject<AppListWindowController> controller_; |
| |
| app_list::test::AppListTestViewDelegate* delegate() { |
| return delegate_.get(); |
| } |
| |
| private: |
| std::unique_ptr<app_list::test::AppListTestViewDelegate> delegate_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AppListWindowControllerTest); |
| }; |
| |
| AppListWindowControllerTest::AppListWindowControllerTest() |
| : delegate_(new app_list::test::AppListTestViewDelegate) { |
| Init(); |
| controller_.reset([[AppListWindowController alloc] init]); |
| [[controller_ appListViewController] setDelegate:delegate()]; |
| } |
| |
| void AppListWindowControllerTest::TearDown() { |
| EXPECT_TRUE(controller_.get()); |
| [[controller_ window] close]; |
| [[controller_ appListViewController] setDelegate:NULL]; |
| controller_.reset(); |
| ui::CocoaTest::TearDown(); |
| } |
| |
| } // namespace |
| |
| // Test showing, hiding and closing the app list window. |
| TEST_F(AppListWindowControllerTest, ShowHideCloseRelease) { |
| EXPECT_TRUE([controller_ window]); |
| [[controller_ window] makeKeyAndOrderFront:nil]; |
| EXPECT_TRUE([[controller_ window] isVisible]); |
| EXPECT_TRUE([[[controller_ window] contentView] superview]); |
| [[controller_ window] close]; // Hide. |
| EXPECT_FALSE([[controller_ window] isVisible]); |
| [[controller_ window] makeKeyAndOrderFront:nil]; |
| } |
| |
| // Test that the key bound to cancel (usually Escape) asks the controller to |
| // dismiss the window. |
| TEST_F(AppListWindowControllerTest, DismissWithEscape) { |
| [[controller_ window] makeKeyAndOrderFront:nil]; |
| EXPECT_EQ(0, delegate()->dismiss_count()); |
| [[controller_ window] cancelOperation:controller_]; |
| EXPECT_EQ(1, delegate()->dismiss_count()); |
| } |
| |
| // Test that search results are cleared when the window closes, not when a |
| // search result is selected. If cleared upon selection, the animation showing |
| // the results sliding away is seen as the window closes, which looks weird. |
| TEST_F(AppListWindowControllerTest, CloseClearsSearch) { |
| [[controller_ window] makeKeyAndOrderFront:nil]; |
| app_list::SearchBoxModel* model = delegate()->GetModel()->search_box(); |
| AppListViewController* view_controller = [controller_ appListViewController]; |
| |
| EXPECT_FALSE([view_controller showingSearchResults]); |
| |
| const base::string16 search_text(base::ASCIIToUTF16("test")); |
| model->SetText(search_text); |
| EXPECT_TRUE([view_controller showingSearchResults]); |
| |
| EXPECT_EQ(0, delegate()->open_search_result_count()); |
| [view_controller openResult:nil]; |
| EXPECT_EQ(1, delegate()->open_search_result_count()); |
| |
| EXPECT_TRUE([view_controller showingSearchResults]); |
| [[controller_ window] close]; // Hide. |
| EXPECT_FALSE([view_controller showingSearchResults]); |
| } |