1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #import "chrome/browser/ui/cocoa/autofill/autofill_account_chooser.h"
7 #import <Cocoa/Cocoa.h>
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/ui/autofill/mock_autofill_dialog_view_delegate.h"
11 #import "chrome/browser/ui/cocoa/menu_button.h"
12 #include "testing/gtest_mac.h"
13 #include "testing/platform_test.h"
14 #import "ui/base/cocoa/controls/hyperlink_button_cell.h"
15 #include "ui/base/models/simple_menu_model.h"
16 #import "ui/base/test/ui_cocoa_test_helper.h"
20 class AutofillAccountChooserTest : public ui::CocoaTest {
22 AutofillAccountChooserTest() {
23 NSRect frame = NSMakeRect(0, 0, 500, 200);
24 view_.reset([[AutofillAccountChooser alloc] initWithFrame:frame
25 delegate:&delegate_]);
26 [[test_window() contentView] addSubview:view_];
30 base::scoped_nsobject<AutofillAccountChooser> view_;
31 testing::NiceMock<autofill::MockAutofillDialogViewDelegate> delegate_;
34 DISALLOW_COPY_AND_ASSIGN(AutofillAccountChooserTest);
37 class MenuDelegate : public ui::SimpleMenuModel::Delegate {
39 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
43 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
47 virtual bool GetAcceleratorForCommandId(
49 ui::Accelerator* accelerator) OVERRIDE { return false; }
51 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {}
56 TEST_VIEW(AutofillAccountChooserTest, view_);
58 // Make sure account chooser has all required subviews
59 TEST_F(AutofillAccountChooserTest, SubViews) {
62 bool hasPopup = false;
64 for (id view in [view_ subviews]) {
65 if ([view isKindOfClass:[NSImageView class]]) {
67 } else if ([view isKindOfClass:[MenuButton class]]) {
69 } else if ([view isKindOfClass:[NSButton class]]) {
70 if ([[view cell] isKindOfClass:[HyperlinkButtonCell class]])
77 EXPECT_TRUE(hasPopup);
80 // Validate that the account menu is properly populated.
81 TEST_F(AutofillAccountChooserTest, PopulatesMenu) {
82 using namespace testing;
83 MenuDelegate delegate;
84 ui::SimpleMenuModel model(&delegate);
85 model.AddItem(1, base::ASCIIToUTF16("one"));
86 model.AddItem(2, base::ASCIIToUTF16("two"));
88 EXPECT_CALL(delegate_, MenuModelForAccountChooser())
89 .WillOnce(Return(&model));
92 MenuButton* button = nil;
93 for (id view in [view_ subviews]) {
94 if ([view isKindOfClass:[MenuButton class]]) {
100 NSArray* items = [[button attachedMenu] itemArray];
101 EXPECT_EQ(3U, [items count]);
102 EXPECT_NSEQ(@"", [[items objectAtIndex:0] title]);
103 EXPECT_NSEQ(@"one", [[items objectAtIndex:1] title]);
104 EXPECT_NSEQ(@"two", [[items objectAtIndex:2] title]);