Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / profiles / profile_signin_confirmation_view_controller_browsertest.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/profiles/profile_signin_confirmation_view_controller.h"
6
7 #import <Cocoa/Cocoa.h>
8
9 #include "base/mac/scoped_nsobject.h"
10 #include "base/strings/sys_string_conversions.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h"
14 #include "chrome/grit/chromium_strings.h"
15 #include "chrome/grit/generated_resources.h"
16 #include "chrome/test/base/in_process_browser_test.h"
17 #import "testing/gtest_mac.h"
18 #include "ui/base/l10n/l10n_util.h"
19
20 class ProfileSigninConfirmationViewControllerTest
21   : public InProcessBrowserTest,
22     public ui::ProfileSigninConfirmationDelegate {
23
24  public:
25   ProfileSigninConfirmationViewControllerTest()
26     : window_(nil),
27       continued_(false),
28       cancelled_(false),
29       created_(false),
30       closed_(false) {
31   }
32
33  protected:
34   virtual void SetUpOnMainThread() OVERRIDE {
35   }
36
37   void SetupDialog(bool offerProfileCreation = true) {
38     window_.reset(
39         [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 400, 600)
40                                     styleMask:NSBorderlessWindowMask
41                                       backing:NSBackingStoreBuffered
42                                         defer:NO]);
43     base::Closure close = base::Bind(
44         &ProfileSigninConfirmationViewControllerTest::OnClose, this);
45     controller_.reset([[ProfileSigninConfirmationViewController alloc]
46                         initWithBrowser:browser()
47                                username:username()
48                                delegate:this
49                     closeDialogCallback:close
50                    offerProfileCreation:offerProfileCreation]);
51     [[window_ contentView] addSubview:[controller_ view]];
52     [window_ makeKeyAndOrderFront:NSApp];
53     ASSERT_TRUE([window_ isVisible]);
54   }
55
56   // Test helpers.
57   std::string username() {
58     return "foo@bar.com";
59   }
60   base::string16 learn_more() {
61     return l10n_util::GetStringUTF16(
62         IDS_ENTERPRISE_SIGNIN_PROFILE_LINK_LEARN_MORE);
63   }
64
65   // ui::ProfileSigninConfirmationDelegate:
66   virtual void OnContinueSignin() OVERRIDE { continued_ = true; }
67   virtual void OnCancelSignin() OVERRIDE { cancelled_ = true; }
68   virtual void OnSigninWithNewProfile() OVERRIDE { created_ = true; }
69   void OnClose() { closed_ = true; }
70
71   // The window containing the dialog.
72   base::scoped_nsobject<NSWindow> window_;
73
74   // Dialog under test.
75   base::scoped_nsobject<ProfileSigninConfirmationViewController> controller_;
76
77   // Visible for testing UI interactions.
78   bool continued_;
79   bool cancelled_;
80   bool created_;
81   bool closed_;
82
83  private:
84   DISALLOW_COPY_AND_ASSIGN(ProfileSigninConfirmationViewControllerTest);
85 };
86
87 IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationViewControllerTest,
88                        ContinueClicked) {
89   SetupDialog();
90
91   // Click should invoke and clear delegate and close the dialog.
92   [controller_ ok:nil];
93   EXPECT_TRUE(continued_);
94   EXPECT_TRUE(closed_);
95   EXPECT_FALSE([controller_ delegate]);
96
97   // Another click should have no effect.
98   continued_ = false;
99   closed_ = false;
100   [controller_ ok:nil];
101   EXPECT_FALSE(continued_);
102   EXPECT_FALSE(closed_);
103 }
104
105 IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationViewControllerTest,
106                        CancelClicked) {
107   SetupDialog();
108
109   // Click should invoke and clear delegate and close the dialog.
110   [controller_ cancel:nil];
111   EXPECT_TRUE(cancelled_);
112   EXPECT_TRUE(closed_);
113   EXPECT_FALSE([controller_ delegate]);
114
115   // Another click should have no effect.
116   cancelled_ = false;
117   closed_ = false;
118   [controller_ cancel:nil];
119   EXPECT_FALSE(cancelled_);
120   EXPECT_FALSE(closed_);
121 }
122
123 IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationViewControllerTest,
124                        CreateClicked) {
125   SetupDialog();
126
127   // Click should invoke and clear delegate and close the dialog.
128   [controller_ createProfile:nil];
129   EXPECT_TRUE(created_);
130   EXPECT_TRUE(closed_);
131   EXPECT_FALSE([controller_ delegate]);
132
133   // Another click should have no effect.
134   created_ = false;
135   closed_ = false;
136   [controller_ createProfile:nil];
137   EXPECT_FALSE(created_);
138   EXPECT_FALSE(closed_);
139 }
140
141 IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationViewControllerTest,
142                        CloseClicked) {
143   SetupDialog();
144
145   // Click should invoke and clear delegate and close the dialog.
146   [controller_ cancel:nil];
147   EXPECT_TRUE(cancelled_);
148   EXPECT_TRUE(closed_);
149   EXPECT_FALSE([controller_ delegate]);
150
151   // Another click should close the dialog but not invoke the delegate.
152   cancelled_ = false;
153   closed_ = false;
154   [controller_ close:nil];
155   EXPECT_FALSE(cancelled_);
156   EXPECT_TRUE(closed_);
157 }
158
159 IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationViewControllerTest,
160                        DoNotOfferNewProfile) {
161   SetupDialog(/*offerProfileCreation = */ false);
162   // Create Profile button shouldn't exist.
163   EXPECT_NSEQ(nil, [controller_ createProfileButton]);
164   // Explanation shouldn't mention creating a new profile.
165   NSString* explanationWithoutCreateProfile = base::SysUTF16ToNSString(
166       l10n_util::GetStringFUTF16(
167           IDS_ENTERPRISE_SIGNIN_EXPLANATION_WITHOUT_PROFILE_CREATION_NEW_STYLE,
168           base::UTF8ToUTF16(username()), learn_more()));
169   EXPECT_NSEQ(explanationWithoutCreateProfile,
170               [[[controller_ explanationField] textStorage] string]);
171 }
172
173 IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationViewControllerTest,
174                        OfferNewProfile) {
175   SetupDialog(/*offerProfileCreation = */ true);
176   // Create Profile button should exist and be visible.
177   EXPECT_NSNE(nil, [controller_ createProfileButton]);
178   EXPECT_TRUE([[[controller_ view] subviews]
179                 containsObject:[controller_ createProfileButton]]);
180   NSString* explanationWithCreateProfile = base::SysUTF16ToNSString(
181       l10n_util::GetStringFUTF16(
182           IDS_ENTERPRISE_SIGNIN_EXPLANATION_WITH_PROFILE_CREATION_NEW_STYLE,
183           base::UTF8ToUTF16(username()), learn_more()));
184   EXPECT_NSEQ(explanationWithCreateProfile,
185               [[[controller_ explanationField] textStorage] string]);
186 }