| Index: ui/app_list/cocoa/apps_search_results_controller_unittest.mm
|
| diff --git a/ui/app_list/cocoa/apps_search_results_controller_unittest.mm b/ui/app_list/cocoa/apps_search_results_controller_unittest.mm
|
| deleted file mode 100644
|
| index ed840b59ff9b26a5381e6f992fc5fc2adcb28db0..0000000000000000000000000000000000000000
|
| --- a/ui/app_list/cocoa/apps_search_results_controller_unittest.mm
|
| +++ /dev/null
|
| @@ -1,316 +0,0 @@
|
| -// 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 "ui/app_list/cocoa/apps_search_results_controller.h"
|
| -
|
| -#include "base/mac/scoped_nsobject.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/strings/sys_string_conversions.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#import "testing/gtest_mac.h"
|
| -#include "ui/app_list/test/app_list_test_model.h"
|
| -#include "ui/app_list/test/test_search_result.h"
|
| -#include "ui/base/models/simple_menu_model.h"
|
| -#import "ui/events/test/cocoa_test_event_utils.h"
|
| -#include "ui/gfx/image/image_skia_util_mac.h"
|
| -#import "ui/gfx/test/ui_cocoa_test_helper.h"
|
| -
|
| -@interface TestAppsSearchResultsDelegate : NSObject<AppsSearchResultsDelegate> {
|
| - @private
|
| - app_list::test::AppListTestModel appListModel_;
|
| - app_list::SearchResult* lastOpenedResult_;
|
| - int redoSearchCount_;
|
| -}
|
| -
|
| -@property(readonly, nonatomic) app_list::SearchResult* lastOpenedResult;
|
| -@property(readonly, nonatomic) int redoSearchCount;
|
| -
|
| -- (void)quitMessageLoop;
|
| -
|
| -@end
|
| -
|
| -@implementation TestAppsSearchResultsDelegate
|
| -
|
| -@synthesize lastOpenedResult = lastOpenedResult_;
|
| -@synthesize redoSearchCount = redoSearchCount_;
|
| -
|
| -- (app_list::AppListModel*)appListModel {
|
| - return &appListModel_;
|
| -}
|
| -
|
| -- (void)openResult:(app_list::SearchResult*)result {
|
| - lastOpenedResult_ = result;
|
| -}
|
| -
|
| -- (void)redoSearch {
|
| - ++redoSearchCount_;
|
| -}
|
| -
|
| -- (void)quitMessageLoop {
|
| - base::MessageLoop::current()->QuitNow();
|
| -}
|
| -
|
| -@end
|
| -
|
| -namespace app_list {
|
| -namespace test {
|
| -namespace {
|
| -
|
| -const int kDefaultResultsCount = 3;
|
| -
|
| -class SearchResultWithMenu : public TestSearchResult {
|
| - public:
|
| - SearchResultWithMenu(const std::string& title, const std::string& details)
|
| - : menu_model_(NULL),
|
| - menu_ready_(true) {
|
| - set_title(base::ASCIIToUTF16(title));
|
| - set_details(base::ASCIIToUTF16(details));
|
| - menu_model_.AddItem(0, base::UTF8ToUTF16("Menu For: " + title));
|
| - }
|
| -
|
| - void SetMenuReadyForTesting(bool ready) {
|
| - menu_ready_ = ready;
|
| - }
|
| -
|
| - ui::MenuModel* GetContextMenuModel() override {
|
| - if (!menu_ready_)
|
| - return NULL;
|
| -
|
| - return &menu_model_;
|
| - }
|
| -
|
| - private:
|
| - ui::SimpleMenuModel menu_model_;
|
| - bool menu_ready_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SearchResultWithMenu);
|
| -};
|
| -
|
| -class AppsSearchResultsControllerTest : public ui::CocoaTest {
|
| - public:
|
| - AppsSearchResultsControllerTest() {}
|
| -
|
| - void AddTestResultAtIndex(size_t index,
|
| - const std::string& title,
|
| - const std::string& details) {
|
| - scoped_ptr<SearchResult> result(new SearchResultWithMenu(title, details));
|
| - AppListModel::SearchResults* results = [delegate_ appListModel]->results();
|
| - results->AddAt(index, result.release());
|
| - }
|
| -
|
| - SearchResult* ModelResultAt(size_t index) {
|
| - return [delegate_ appListModel]->results()->GetItemAt(index);
|
| - }
|
| -
|
| - NSCell* ViewResultAt(NSInteger index) {
|
| - NSTableView* table_view = [apps_search_results_controller_ tableView];
|
| - return [table_view preparedCellAtColumn:0
|
| - row:index];
|
| - }
|
| -
|
| - void SetMenuReadyAt(size_t index, bool ready) {
|
| - SearchResultWithMenu* result =
|
| - static_cast<SearchResultWithMenu*>(ModelResultAt(index));
|
| - result->SetMenuReadyForTesting(ready);
|
| - }
|
| -
|
| - BOOL SimulateKeyAction(SEL c) {
|
| - return [apps_search_results_controller_ handleCommandBySelector:c];
|
| - }
|
| -
|
| - void ExpectConsistent();
|
| -
|
| - // ui::CocoaTest overrides:
|
| - virtual void SetUp() override;
|
| - virtual void TearDown() override;
|
| -
|
| - protected:
|
| - base::scoped_nsobject<TestAppsSearchResultsDelegate> delegate_;
|
| - base::scoped_nsobject<AppsSearchResultsController>
|
| - apps_search_results_controller_;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(AppsSearchResultsControllerTest);
|
| -};
|
| -
|
| -void AppsSearchResultsControllerTest::ExpectConsistent() {
|
| - NSInteger item_count = [delegate_ appListModel]->results()->item_count();
|
| - ASSERT_EQ(item_count,
|
| - [[apps_search_results_controller_ tableView] numberOfRows]);
|
| -
|
| - // Compare content strings to ensure the order of items is consistent, and any
|
| - // model data that should have been reloaded has been reloaded in the view.
|
| - for (NSInteger i = 0; i < item_count; ++i) {
|
| - SearchResult* result = ModelResultAt(i);
|
| - base::string16 string_in_model = result->title();
|
| - if (!result->details().empty())
|
| - string_in_model += base::ASCIIToUTF16("\n") + result->details();
|
| - EXPECT_NSEQ(base::SysUTF16ToNSString(string_in_model),
|
| - [[ViewResultAt(i) attributedStringValue] string]);
|
| - }
|
| -}
|
| -
|
| -void AppsSearchResultsControllerTest::SetUp() {
|
| - apps_search_results_controller_.reset(
|
| - [[AppsSearchResultsController alloc] initWithAppsSearchResultsFrameSize:
|
| - NSMakeSize(400, 400)]);
|
| - // The view is initially hidden. Give it a non-zero height so it draws.
|
| - [[apps_search_results_controller_ view] setFrameSize:NSMakeSize(400, 400)];
|
| -
|
| - delegate_.reset([[TestAppsSearchResultsDelegate alloc] init]);
|
| -
|
| - // Populate with some results so that TEST_VIEW does something non-trivial.
|
| - for (int i = 0; i < kDefaultResultsCount; ++i)
|
| - AddTestResultAtIndex(i, base::StringPrintf("Result %d", i), "ItemDetail");
|
| -
|
| - SearchResult::Tags test_tags;
|
| - // Apply markup to the substring "Result" in the first item.
|
| - test_tags.push_back(SearchResult::Tag(SearchResult::Tag::NONE, 0, 1));
|
| - test_tags.push_back(SearchResult::Tag(SearchResult::Tag::URL, 1, 2));
|
| - test_tags.push_back(SearchResult::Tag(SearchResult::Tag::MATCH, 2, 3));
|
| - test_tags.push_back(SearchResult::Tag(SearchResult::Tag::DIM, 3, 4));
|
| - test_tags.push_back(SearchResult::Tag(SearchResult::Tag::MATCH |
|
| - SearchResult::Tag::URL, 4, 5));
|
| - test_tags.push_back(SearchResult::Tag(SearchResult::Tag::MATCH |
|
| - SearchResult::Tag::DIM, 5, 6));
|
| -
|
| - SearchResult* result = ModelResultAt(0);
|
| - result->SetIcon(gfx::ImageSkiaFromNSImage(
|
| - [NSImage imageNamed:NSImageNameStatusAvailable]));
|
| - result->set_title_tags(test_tags);
|
| -
|
| - [apps_search_results_controller_ setDelegate:delegate_];
|
| -
|
| - ui::CocoaTest::SetUp();
|
| - [[test_window() contentView] addSubview:
|
| - [apps_search_results_controller_ view]];
|
| -}
|
| -
|
| -void AppsSearchResultsControllerTest::TearDown() {
|
| - [apps_search_results_controller_ setDelegate:nil];
|
| - ui::CocoaTest::TearDown();
|
| -}
|
| -
|
| -NSEvent* MouseEventInRow(NSTableView* table_view, NSInteger row_index) {
|
| - NSRect row_rect = [table_view rectOfRow:row_index];
|
| - NSPoint point_in_view = NSMakePoint(NSMidX(row_rect), NSMidY(row_rect));
|
| - NSPoint point_in_window = [table_view convertPoint:point_in_view
|
| - toView:nil];
|
| - return cocoa_test_event_utils::LeftMouseDownAtPoint(point_in_window);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -TEST_VIEW(AppsSearchResultsControllerTest,
|
| - [apps_search_results_controller_ view]);
|
| -
|
| -TEST_F(AppsSearchResultsControllerTest, ModelObservers) {
|
| - NSTableView* table_view = [apps_search_results_controller_ tableView];
|
| - ExpectConsistent();
|
| -
|
| - EXPECT_EQ(1, [table_view numberOfColumns]);
|
| - EXPECT_EQ(kDefaultResultsCount, [table_view numberOfRows]);
|
| -
|
| - // Insert at start.
|
| - AddTestResultAtIndex(0, "One", std::string());
|
| - EXPECT_EQ(kDefaultResultsCount + 1, [table_view numberOfRows]);
|
| - ExpectConsistent();
|
| -
|
| - // Remove from end.
|
| - [delegate_ appListModel]->results()->DeleteAt(kDefaultResultsCount);
|
| - EXPECT_EQ(kDefaultResultsCount, [table_view numberOfRows]);
|
| - ExpectConsistent();
|
| -
|
| - // Insert at end.
|
| - AddTestResultAtIndex(kDefaultResultsCount, "Four", std::string());
|
| - EXPECT_EQ(kDefaultResultsCount + 1, [table_view numberOfRows]);
|
| - ExpectConsistent();
|
| -
|
| - // Delete from start.
|
| - [delegate_ appListModel]->results()->DeleteAt(0);
|
| - EXPECT_EQ(kDefaultResultsCount, [table_view numberOfRows]);
|
| - ExpectConsistent();
|
| -
|
| - // Test clearing results.
|
| - [delegate_ appListModel]->results()->DeleteAll();
|
| - EXPECT_EQ(0, [table_view numberOfRows]);
|
| - ExpectConsistent();
|
| -}
|
| -
|
| -TEST_F(AppsSearchResultsControllerTest, KeyboardSelectAndActivate) {
|
| - NSTableView* table_view = [apps_search_results_controller_ tableView];
|
| - EXPECT_EQ(-1, [table_view selectedRow]);
|
| -
|
| - // Pressing up when nothing is selected should select the last item.
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveUp:)));
|
| - EXPECT_EQ(kDefaultResultsCount - 1, [table_view selectedRow]);
|
| - [table_view deselectAll:nil];
|
| - EXPECT_EQ(-1, [table_view selectedRow]);
|
| -
|
| - // Pressing down when nothing is selected should select the first item.
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveDown:)));
|
| - EXPECT_EQ(0, [table_view selectedRow]);
|
| -
|
| - // Pressing up should wrap around.
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveUp:)));
|
| - EXPECT_EQ(kDefaultResultsCount - 1, [table_view selectedRow]);
|
| -
|
| - // Down should now also wrap, since the selection is at the end.
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveDown:)));
|
| - EXPECT_EQ(0, [table_view selectedRow]);
|
| -
|
| - // Regular down and up movement, ensuring the cells have correct backgrounds.
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveDown:)));
|
| - EXPECT_EQ(1, [table_view selectedRow]);
|
| - EXPECT_EQ(NSBackgroundStyleDark, [ViewResultAt(1) backgroundStyle]);
|
| - EXPECT_EQ(NSBackgroundStyleLight, [ViewResultAt(0) backgroundStyle]);
|
| -
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveUp:)));
|
| - EXPECT_EQ(0, [table_view selectedRow]);
|
| - EXPECT_EQ(NSBackgroundStyleDark, [ViewResultAt(0) backgroundStyle]);
|
| - EXPECT_EQ(NSBackgroundStyleLight, [ViewResultAt(1) backgroundStyle]);
|
| -
|
| - // Test activating items.
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(insertNewline:)));
|
| - EXPECT_EQ(ModelResultAt(0), [delegate_ lastOpenedResult]);
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(moveDown:)));
|
| - EXPECT_TRUE(SimulateKeyAction(@selector(insertNewline:)));
|
| - EXPECT_EQ(ModelResultAt(1), [delegate_ lastOpenedResult]);
|
| -}
|
| -
|
| -TEST_F(AppsSearchResultsControllerTest, ContextMenus) {
|
| - NSTableView* table_view = [apps_search_results_controller_ tableView];
|
| - NSEvent* mouse_in_row_0 = MouseEventInRow(table_view, 0);
|
| - NSEvent* mouse_in_row_1 = MouseEventInRow(table_view, 1);
|
| -
|
| - NSMenu* menu = [table_view menuForEvent:mouse_in_row_0];
|
| - EXPECT_EQ(1, [menu numberOfItems]);
|
| - EXPECT_NSEQ(@"Menu For: Result 0", [[menu itemAtIndex:0] title]);
|
| -
|
| - // Test a context menu request while the item is still installing.
|
| - SetMenuReadyAt(1, false);
|
| - menu = [table_view menuForEvent:mouse_in_row_1];
|
| - EXPECT_EQ(nil, menu);
|
| -
|
| - SetMenuReadyAt(1, true);
|
| - menu = [table_view menuForEvent:mouse_in_row_1];
|
| - EXPECT_EQ(1, [menu numberOfItems]);
|
| - EXPECT_NSEQ(@"Menu For: Result 1", [[menu itemAtIndex:0] title]);
|
| -}
|
| -
|
| -// Test that observing a search result item uninstall performs the search again.
|
| -TEST_F(AppsSearchResultsControllerTest, UninstallReperformsSearch) {
|
| - base::MessageLoopForUI message_loop;
|
| - EXPECT_EQ(0, [delegate_ redoSearchCount]);
|
| - ModelResultAt(0)->NotifyItemUninstalled();
|
| - [delegate_ performSelector:@selector(quitMessageLoop)
|
| - withObject:nil
|
| - afterDelay:0];
|
| - message_loop.Run();
|
| - EXPECT_EQ(1, [delegate_ redoSearchCount]);
|
| -}
|
| -
|
| -} // namespace test
|
| -} // namespace app_list
|
|
|