app_list_window_controller_unittest.mm revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Copyright 2013 The Chromium Authors. All rights reserved. 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// found in the LICENSE file. 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#import "base/mac/scoped_nsobject.h" 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/strings/utf_string_conversions.h" 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#import "testing/gtest_mac.h" 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ui/app_list/app_list_view_delegate.h" 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#import "ui/app_list/cocoa/app_list_view_controller.h" 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#import "ui/app_list/cocoa/app_list_window_controller.h" 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ui/app_list/search_box_model.h" 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ui/app_list/test/app_list_test_view_delegate.h" 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#import "ui/gfx/test/ui_cocoa_test_helper.h" 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectnamespace { 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass AppListWindowControllerTest : public ui::CocoaTest { 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public: 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project AppListWindowControllerTest(); 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project protected: 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project virtual void TearDown() OVERRIDE; 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner base::scoped_nsobject<AppListWindowController> controller_; 252c538c86c15d597cc875dc926e4e39285c5625dfDavid 'Digit' Turner 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner app_list::test::AppListTestViewDelegate* delegate() { 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return static_cast<app_list::test::AppListTestViewDelegate*>( 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner [[controller_ appListViewController] delegate]); 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner private: 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project DISALLOW_COPY_AND_ASSIGN(AppListWindowControllerTest); 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 352c538c86c15d597cc875dc926e4e39285c5625dfDavid 'Digit' TurnerAppListWindowControllerTest::AppListWindowControllerTest() { 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project Init(); 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project scoped_ptr<app_list::AppListViewDelegate> delegate( 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project new app_list::test::AppListTestViewDelegate); 395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner controller_.reset([[AppListWindowController alloc] init]); 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ appListViewController] setDelegate:delegate.Pass()]; 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid AppListWindowControllerTest::TearDown() { 445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner EXPECT_TRUE(controller_.get()); 455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner [[controller_ window] close]; 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner [[controller_ appListViewController] 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project setDelegate:scoped_ptr<app_list::AppListViewDelegate>()]; 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project controller_.reset(); 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ui::CocoaTest::TearDown(); 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} // namespace 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// Test showing, hiding and closing the app list window. 555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerTEST_F(AppListWindowControllerTest, ShowHideCloseRelease) { 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_TRUE([controller_ window]); 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ window] makeKeyAndOrderFront:nil]; 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_TRUE([[controller_ window] isVisible]); 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_TRUE([[[controller_ window] contentView] superview]); 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ window] close]; // Hide. 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_FALSE([[controller_ window] isVisible]); 625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner [[controller_ window] makeKeyAndOrderFront:nil]; 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Test that the key bound to cancel (usually Escape) asks the controller to 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// dismiss the window. 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectTEST_F(AppListWindowControllerTest, DismissWithEscape) { 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ window] makeKeyAndOrderFront:nil]; 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_EQ(0, delegate()->dismiss_count()); 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ window] cancelOperation:controller_]; 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_EQ(1, delegate()->dismiss_count()); 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Test that search results are cleared when the window closes, not when a 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// search result is selected. If cleared upon selection, the animation showing 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// the results sliding away is seen as the window closes, which looks weird. 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectTEST_F(AppListWindowControllerTest, CloseClearsSearch) { 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ window] makeKeyAndOrderFront:nil]; 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project app_list::SearchBoxModel* model = delegate()->GetModel()->search_box(); 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project AppListViewController* view_controller = [controller_ appListViewController]; 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_FALSE([view_controller showingSearchResults]); 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const base::string16 search_text(base::ASCIIToUTF16("test")); 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project model->SetText(search_text); 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_TRUE([view_controller showingSearchResults]); 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_EQ(0, delegate()->open_search_result_count()); 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [view_controller openResult:nil]; 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_EQ(1, delegate()->open_search_result_count()); 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_TRUE([view_controller showingSearchResults]); 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project [[controller_ window] close]; // Hide. 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project EXPECT_FALSE([view_controller showingSearchResults]); 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project