// Copyright (c) 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 "chrome/browser/ui/cocoa/omnibox/omnibox_popup_cell.h" #import "chrome/browser/ui/cocoa/omnibox/omnibox_popup_matrix.h" #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" #import "ui/events/test/cocoa_test_event_utils.h" namespace { NSEvent* MouseEventInRow(OmniboxPopupMatrix* matrix, NSEventType type, NSInteger row) { NSRect cell_rect = [matrix rectOfRow:row]; NSPoint point_in_view = NSMakePoint(NSMidX(cell_rect), NSMidY(cell_rect)); NSPoint point_in_window = [matrix convertPoint:point_in_view toView:nil]; return cocoa_test_event_utils::MouseEventAtPoint( point_in_window, type, 0); } class OmniboxPopupMatrixTest : public CocoaTest, public OmniboxPopupMatrixObserver { public: OmniboxPopupMatrixTest() : selected_row_(0), clicked_row_(0), middle_clicked_row_(0) {} void SetUp() override { CocoaTest::SetUp(); matrix_.reset([[OmniboxPopupMatrix alloc] initWithObserver:this]); [[test_window() contentView] addSubview:matrix_]; NSMutableArray* array = [NSMutableArray array]; for (size_t i = 0; i < 3; ++i) [array addObject:[[[OmniboxPopupCellData alloc] init] autorelease]]; matrixController_.reset( [[OmniboxPopupTableController alloc] initWithArray:array]); [matrix_ setController:matrixController_]; }; void OnMatrixRowSelected(OmniboxPopupMatrix* matrix, size_t row) override { selected_row_ = row; } void OnMatrixRowClicked(OmniboxPopupMatrix* matrix, size_t row) override { clicked_row_ = row; } void OnMatrixRowMiddleClicked(OmniboxPopupMatrix* matrix, size_t row) override { middle_clicked_row_ = row; } protected: base::scoped_nsobject matrix_; base::scoped_nsobject matrixController_; size_t selected_row_; size_t clicked_row_; size_t middle_clicked_row_; private: DISALLOW_COPY_AND_ASSIGN(OmniboxPopupMatrixTest); }; TEST_VIEW(OmniboxPopupMatrixTest, matrix_); TEST_F(OmniboxPopupMatrixTest, HighlightedRow) { EXPECT_EQ(-1, [matrix_ highlightedRow]); [matrix_ mouseEntered:MouseEventInRow(matrix_, NSMouseMoved, 0)]; EXPECT_EQ(0, [matrix_ highlightedRow]); [matrix_ mouseEntered:MouseEventInRow(matrix_, NSMouseMoved, 2)]; EXPECT_EQ(2, [matrix_ highlightedRow]); [matrix_ mouseExited:MouseEventInRow(matrix_, NSMouseMoved, 2)]; EXPECT_EQ(-1, [matrix_ highlightedRow]); } TEST_F(OmniboxPopupMatrixTest, SelectedRow) { [NSApp postEvent:MouseEventInRow(matrix_, NSLeftMouseUp, 2) atStart:YES]; [matrix_ mouseDown:MouseEventInRow(matrix_, NSLeftMouseDown, 2)]; EXPECT_EQ(2u, selected_row_); EXPECT_EQ(2u, clicked_row_); EXPECT_EQ(0u, middle_clicked_row_); } } // namespace