Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / passwords / manage_passwords_bubble_pending_view_controller_unittest.mm
1 // Copyright 2014 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/passwords/manage_passwords_bubble_pending_view_controller.h"
6
7 #include "base/mac/scoped_nsobject.h"
8 #include "base/strings/string16.h"
9 #include "base/strings/utf_string_conversions.h"
10 #import "chrome/browser/ui/cocoa/bubble_combobox.h"
11 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
12 #import "chrome/browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.h"
13 #include "chrome/browser/ui/cocoa/passwords/manage_passwords_controller_test.h"
14 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
15 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h"
16 #include "chrome/browser/ui/passwords/save_password_refusal_combobox_model.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/gtest_mac.h"
19
20 @interface ManagePasswordsBubblePendingViewTestDelegate
21     : NSObject<ManagePasswordsBubblePendingViewDelegate> {
22   BOOL dismissed_;
23   BOOL neverSave_;
24 }
25 @property(readonly) BOOL dismissed;
26 @property(readonly) BOOL neverSave;
27 @end
28
29 @implementation ManagePasswordsBubblePendingViewTestDelegate
30
31 @synthesize dismissed = dismissed_;
32 @synthesize neverSave = neverSave_;
33
34 - (void)viewShouldDismiss {
35   dismissed_ = YES;
36 }
37
38 - (void)passwordShouldNeverBeSavedOnSiteWithExistingPasswords {
39   neverSave_ = YES;
40 }
41
42 @end
43
44 namespace {
45
46 void ClickMenuItem(BubbleCombobox* button, int index) {
47   // Skip the title if applicable.
48   [[button menu]
49       performActionForItemAtIndex:(button.pullsDown ? index + 1 : index)];
50 }
51
52 class ManagePasswordsBubblePendingViewControllerTest
53     : public ManagePasswordsControllerTest {
54  public:
55   ManagePasswordsBubblePendingViewControllerTest() : controller_(nil) {}
56
57   virtual void SetUp() override {
58     ManagePasswordsControllerTest::SetUp();
59     delegate_.reset(
60         [[ManagePasswordsBubblePendingViewTestDelegate alloc] init]);
61     ui_controller()->SetState(password_manager::ui::PENDING_PASSWORD_STATE);
62   }
63
64   ManagePasswordsBubblePendingViewTestDelegate* delegate() {
65     return delegate_.get();
66   }
67
68   ManagePasswordsBubblePendingViewController* controller() {
69     if (!controller_) {
70       controller_.reset([[ManagePasswordsBubblePendingViewController alloc]
71           initWithModel:model()
72                delegate:delegate()]);
73       [controller_ loadView];
74     }
75     return controller_.get();
76   }
77
78  private:
79   base::scoped_nsobject<ManagePasswordsBubblePendingViewController> controller_;
80   base::scoped_nsobject<ManagePasswordsBubblePendingViewTestDelegate> delegate_;
81 };
82
83 TEST_F(ManagePasswordsBubblePendingViewControllerTest,
84        ShouldSavePasswordAndDismissWhenSaveClicked) {
85   [controller().saveButton performClick:nil];
86
87   EXPECT_TRUE([delegate() dismissed]);
88   EXPECT_TRUE(ui_controller()->saved_password());
89   EXPECT_FALSE(ui_controller()->never_saved_password());
90 }
91
92 TEST_F(ManagePasswordsBubblePendingViewControllerTest,
93        ShouldNopeAndDismissWhenNopeClicked) {
94   BubbleCombobox* nopeButton = [controller() nopeButton];
95   ClickMenuItem(nopeButton, SavePasswordRefusalComboboxModel::INDEX_NOPE);
96
97   EXPECT_TRUE([delegate() dismissed]);
98   EXPECT_FALSE(ui_controller()->saved_password());
99   EXPECT_FALSE(ui_controller()->never_saved_password());
100 }
101
102 TEST_F(ManagePasswordsBubblePendingViewControllerTest,
103        ShouldNeverSaveAndDismissWhenNeverSaveClickedWithoutAnyBestMatches) {
104   BubbleCombobox* nopeButton = [controller() nopeButton];
105   ClickMenuItem(nopeButton,
106                 SavePasswordRefusalComboboxModel::INDEX_NEVER_FOR_THIS_SITE);
107
108   EXPECT_TRUE([delegate() dismissed]);
109   EXPECT_FALSE(ui_controller()->saved_password());
110   EXPECT_TRUE(ui_controller()->never_saved_password());
111 }
112
113 TEST_F(ManagePasswordsBubblePendingViewControllerTest,
114        ShouldConfirmNeverSaveWhenNeverSaveClickedOnSiteWithPasswordsSaved) {
115   // Add some matches.
116   autofill::PasswordForm form;
117   form.username_value = base::ASCIIToUTF16("username");
118   form.password_value = base::ASCIIToUTF16("password");
119   autofill::ConstPasswordFormMap map;
120   map[base::ASCIIToUTF16("username")] = &form;
121   ui_controller()->SetPasswordFormMap(map);
122   EXPECT_FALSE(model()->best_matches().empty());
123
124   BubbleCombobox* nopeButton = [controller() nopeButton];
125   ClickMenuItem(nopeButton,
126                 SavePasswordRefusalComboboxModel::INDEX_NEVER_FOR_THIS_SITE);
127
128   EXPECT_TRUE([delegate() neverSave]);
129   EXPECT_FALSE(ui_controller()->saved_password());
130   EXPECT_FALSE(ui_controller()->never_saved_password());
131 }
132
133 }  // namespace