- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / autofill / autofill_account_chooser_unittest.mm
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.
4
5 #import "chrome/browser/ui/cocoa/autofill/autofill_account_chooser.h"
6
7 #import <Cocoa/Cocoa.h>
8
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"
17
18 namespace {
19
20 class AutofillAccountChooserTest : public ui::CocoaTest {
21  public:
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_];
27  }
28
29  protected:
30   base::scoped_nsobject<AutofillAccountChooser> view_;
31   testing::NiceMock<autofill::MockAutofillDialogViewDelegate> delegate_;
32
33  private:
34   DISALLOW_COPY_AND_ASSIGN(AutofillAccountChooserTest);
35 };
36
37 class MenuDelegate : public ui::SimpleMenuModel::Delegate {
38  public:
39   virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
40     return false;
41   }
42
43   virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
44     return true;
45   }
46
47   virtual bool GetAcceleratorForCommandId(
48         int command_id,
49         ui::Accelerator* accelerator) OVERRIDE { return false; }
50
51   virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {}
52 };
53
54 }  // namespace
55
56 TEST_VIEW(AutofillAccountChooserTest, view_);
57
58 // Make sure account chooser has all required subviews
59 TEST_F(AutofillAccountChooserTest, SubViews) {
60   bool hasIcon = false;
61   bool hasLink = false;
62   bool hasPopup = false;
63
64   for (id view in [view_ subviews]) {
65     if ([view isKindOfClass:[NSImageView class]]) {
66       hasIcon = true;
67     } else if ([view isKindOfClass:[MenuButton class]]) {
68       hasPopup = true;
69     } else if ([view isKindOfClass:[NSButton class]])  {
70       if ([[view cell] isKindOfClass:[HyperlinkButtonCell class]])
71         hasLink = true;
72     }
73   }
74
75   EXPECT_TRUE(hasIcon);
76   EXPECT_TRUE(hasLink);
77   EXPECT_TRUE(hasPopup);
78 }
79
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, ASCIIToUTF16("one"));
86   model.AddItem(2, ASCIIToUTF16("two"));
87
88   EXPECT_CALL(delegate_, MenuModelForAccountChooser())
89       .WillOnce(Return(&model));
90   [view_ update];
91
92   MenuButton* button = nil;
93   for (id view in [view_ subviews]) {
94     if ([view isKindOfClass:[MenuButton class]]) {
95       button = view;
96       break;
97     }
98   }
99
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]);
105 }