Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: chrome/browser/ui/cocoa/passwords/credential_item_view_unittest.mm

Issue 878743007: Implement CredentialItemView and tests for the Mac account chooser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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/credential_item_view.h"
6
7 #include "base/strings/sys_string_conversions.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
10 #include "grit/theme_resources.h"
11 #include "testing/gtest_mac.h"
12 #import "third_party/ocmock/OCMock/OCMock.h"
13 #include "third_party/ocmock/gtest_support.h"
14 #include "ui/base/resource/resource_bundle.h"
15 #include "ui/gfx/image/image.h"
16
17 // A test implementation of a CredentialItemDelegate to stub out interactions.
18 @interface CredentialItemTestDelegate : NSObject<CredentialItemDelegate>
19 @property(readonly) BOOL didFetchAvatar;
20 @property(readonly) GURL fetchedAvatarURL;
21 @property(readonly) CredentialItemView* viewForFetchedAvatar;
22 @property(readonly) BOOL didSelectPasswordForm;
23 @property(readonly) autofill::PasswordForm selectedPasswordForm;
24 @property(readonly) password_manager::CredentialType selectedCredentialType;
25 @end
26
27 @implementation CredentialItemTestDelegate
28 @synthesize didFetchAvatar = didFetchAvatar_;
29 @synthesize fetchedAvatarURL = fetchedAvatarURL_;
30 @synthesize viewForFetchedAvatar = viewForFetchedAvatar_;
31 @synthesize didSelectPasswordForm = didSelectPasswordForm_;
32 @synthesize selectedPasswordForm = selectedPasswordForm_;
33 @synthesize selectedCredentialType = selectedCredentialType_;
34
35 - (void)fetchAvatar:(const GURL&)avatarURL forView:(CredentialItemView*)view {
36 didFetchAvatar_ = YES;
37 fetchedAvatarURL_ = avatarURL;
38 viewForFetchedAvatar_ = view;
39 }
40
41 - (void)selectPasswordForm:(const autofill::PasswordForm&)passwordForm
42 credentialType:(password_manager::CredentialType)credentialType {
43 didSelectPasswordForm_ = YES;
44 selectedPasswordForm_ = passwordForm;
45 selectedCredentialType_ = credentialType;
46 }
47
48 @end
49
50 namespace {
51
52 // Returns an NSImage suitable for use as a test avatar.
53 NSImage* TestAvatar() {
54 return ResourceBundle::GetSharedInstance()
groby-ooo-7-16 2015/02/19 17:01:33 Why not just use an empty NSImage and skip using t
dconnelly 2015/02/20 15:36:06 Done.
55 .GetNativeImageNamed(IDR_BOOKMARK_BAR_FOLDER)
56 .ToNSImage();
57 }
58
59 // Determines whether |left| and |right| have the same data representation.
60 bool ImagesEqual(NSImage* left, NSImage* right) {
groby-ooo-7-16 2015/02/19 17:01:33 Do you need this byte-by-byte comparison? Isn't EX
dconnelly 2015/02/20 15:36:06 Done.
61 if (!left || !right)
62 return left == right;
63 gfx::Image leftImage([left copy]);
64 gfx::Image rightImage([right copy]);
65 return leftImage.As1xPNGBytes()->Equals(rightImage.As1xPNGBytes());
66 }
67
68 // Returns a PasswordForm with only a username.
69 autofill::PasswordForm BasicCredential() {
70 autofill::PasswordForm credential;
groby-ooo-7-16 2015/02/19 17:01:33 I vaguely recall autofill has various test helpers
dconnelly 2015/02/20 15:36:06 These are pretty basic and skip everything that ac
71 credential.username_value = base::ASCIIToUTF16("taco");
72 return credential;
73 }
74
75 // Returns a PasswordForm with a username and display name.
76 autofill::PasswordForm CredentialWithName() {
77 autofill::PasswordForm credential;
78 credential.username_value = base::ASCIIToUTF16("pizza");
79 credential.display_name = base::ASCIIToUTF16("margherita pizza");
80 return credential;
81 }
82
83 // Returns a PasswordForm with a username and avatar URL.
84 autofill::PasswordForm CredentialWithAvatar() {
85 autofill::PasswordForm credential;
86 credential.username_value = base::ASCIIToUTF16("sandwich");
87 credential.avatar_url = GURL("http://sandwich.com/pastrami.jpg");
88 return credential;
89 }
90
91 // Returns a PasswordForm with a username, display name, and avatar URL.
92 autofill::PasswordForm CredentialWithNameAndAvatar() {
93 autofill::PasswordForm credential;
94 credential.username_value = base::ASCIIToUTF16("noodle");
95 credential.display_name = base::ASCIIToUTF16("pasta amatriciana");
96 credential.avatar_url = GURL("http://pasta.com/amatriciana.png");
97 return credential;
98 }
99
100 // Tests for CredentialItemViewTest.
101 class CredentialItemViewTest : public CocoaTest {
102 protected:
103 void SetUp() override {
104 delegate_.reset([[CredentialItemTestDelegate alloc] init]);
105 }
106
107 // Returns a delegate for testing.
108 CredentialItemTestDelegate* delegate() { return delegate_.get(); }
109
110 // Returns an autoreleased view populated from |form|.
111 CredentialItemView* view(const autofill::PasswordForm& form) {
112 return [[[CredentialItemView alloc]
113 initWithPasswordForm:form
114 credentialType:password_manager::CredentialType::
115 CREDENTIAL_TYPE_LOCAL
116 delegate:delegate()] autorelease];
117 }
118
119 private:
120 base::scoped_nsobject<CredentialItemTestDelegate> delegate_;
121 };
groby-ooo-7-16 2015/02/19 17:01:33 Please add a TEST_VIEW test
dconnelly 2015/02/20 15:36:06 CredentialItemView can't |display| itself. Should
122
123 TEST_F(CredentialItemViewTest, BasicCredential) {
124 autofill::PasswordForm form(BasicCredential());
125 CredentialItemView* item = view(form);
126
127 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
128 [item usernameLabel].stringValue);
129 EXPECT_EQ(nil, [item nameLabel]);
130 EXPECT_FALSE([delegate() didFetchAvatar]);
131 EXPECT_TRUE(
132 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
133 }
134
135 TEST_F(CredentialItemViewTest, CredentialWithName) {
136 autofill::PasswordForm form(CredentialWithName());
137 CredentialItemView* item = view(form);
138
139 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
140 [item usernameLabel].stringValue);
141 EXPECT_NSEQ(base::SysUTF16ToNSString(form.display_name),
142 [item nameLabel].stringValue);
143 EXPECT_FALSE([delegate() didFetchAvatar]);
144 EXPECT_TRUE(
145 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
146 }
147
148 TEST_F(CredentialItemViewTest, CredentialWithAvatar) {
149 autofill::PasswordForm form(CredentialWithAvatar());
150 CredentialItemView* item = view(form);
151
152 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
153 [item usernameLabel].stringValue);
154 EXPECT_EQ(nil, [item nameLabel]);
155 EXPECT_TRUE([delegate() didFetchAvatar]);
156 EXPECT_EQ(form.avatar_url, [delegate() fetchedAvatarURL]);
157 EXPECT_EQ(item, [delegate() viewForFetchedAvatar]);
158 EXPECT_TRUE(
159 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
160
161 NSImage* testAvatar = TestAvatar();
162 [item updateAvatar:testAvatar];
163 EXPECT_TRUE(ImagesEqual(testAvatar, [item avatarView].image));
164 }
165
166 TEST_F(CredentialItemViewTest, CredentialWithNameAndAvatar) {
167 autofill::PasswordForm form(CredentialWithNameAndAvatar());
168 CredentialItemView* item = view(form);
169
170 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
171 [item usernameLabel].stringValue);
172 EXPECT_NSEQ(base::SysUTF16ToNSString(form.display_name),
173 [item nameLabel].stringValue);
174 EXPECT_TRUE([delegate() didFetchAvatar]);
175 EXPECT_EQ(form.avatar_url, [delegate() fetchedAvatarURL]);
176 EXPECT_EQ(item, [delegate() viewForFetchedAvatar]);
177 EXPECT_TRUE(
178 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
179
180 NSImage* testAvatar = TestAvatar();
181 [item updateAvatar:testAvatar];
182 EXPECT_TRUE(ImagesEqual(testAvatar, [item avatarView].image));
183 }
184
185 TEST_F(CredentialItemViewTest, ClickNotifiesDelegate) {
186 autofill::PasswordForm form(BasicCredential());
187 CredentialItemView* item = view(form);
188
189 EXPECT_FALSE([delegate() didSelectPasswordForm]);
190 [item performClick:nil];
191 EXPECT_TRUE([delegate() didSelectPasswordForm]);
192 EXPECT_EQ(form, [delegate() selectedPasswordForm]);
193 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL,
194 [delegate() selectedCredentialType]);
195 EXPECT_TRUE(
196 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
197 }
198
199 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698