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