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

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: memory Created 5 years, 9 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 "testing/gtest_mac.h"
11 #import "third_party/ocmock/OCMock/OCMock.h"
12 #include "third_party/ocmock/gtest_support.h"
13 #include "ui/gfx/image/image.h"
14
15 @interface CredentialItemView(Testing)
16 @property(nonatomic, readonly) NSTextField* nameLabel;
17 @property(nonatomic, readonly) NSTextField* usernameLabel;
18 @property(nonatomic, readonly) NSImageView* avatarView;
19 @end
20
21 // A test implementation of a CredentialItemDelegate to stub out interactions.
22 @interface CredentialItemTestDelegate : NSObject<CredentialItemDelegate>
23 @property(nonatomic, readonly) BOOL didFetchAvatar;
24 @property(nonatomic, readonly) GURL fetchedAvatarURL;
25 @property(nonatomic, readonly) CredentialItemView* viewForFetchedAvatar;
26 @property(nonatomic, readonly) BOOL didSelectPasswordForm;
27 @property(nonatomic, readonly) autofill::PasswordForm selectedPasswordForm;
28 @property(nonatomic, readonly)
29 password_manager::CredentialType selectedCredentialType;
30 @end
31
32 @implementation CredentialItemTestDelegate
33 @synthesize didFetchAvatar = didFetchAvatar_;
34 @synthesize fetchedAvatarURL = fetchedAvatarURL_;
35 @synthesize viewForFetchedAvatar = viewForFetchedAvatar_;
36 @synthesize didSelectPasswordForm = didSelectPasswordForm_;
37 @synthesize selectedPasswordForm = selectedPasswordForm_;
38 @synthesize selectedCredentialType = selectedCredentialType_;
39
40 - (void)fetchAvatar:(const GURL&)avatarURL forView:(CredentialItemView*)view {
41 didFetchAvatar_ = YES;
42 fetchedAvatarURL_ = avatarURL;
43 viewForFetchedAvatar_ = view;
44 }
45
46 - (void)selectPasswordForm:(const autofill::PasswordForm&)passwordForm
47 credentialType:(password_manager::CredentialType)credentialType {
48 didSelectPasswordForm_ = YES;
49 selectedPasswordForm_ = passwordForm;
50 selectedCredentialType_ = credentialType;
51 }
52
53 @end
54
55 namespace {
56
57 // Determines whether |left| and |right| have the same data representation.
58 // Necessary because [CredentialItemView defaultAvatar] does some ImageSkia
59 // stuff that creates new NSImage instances.
60 bool ImagesEqual(NSImage* left, NSImage* right) {
dconnelly 2015/03/04 12:30:54 This had to come back. See comment.
groby-ooo-7-16 2015/03/04 16:17:59 Ah well - it was worth a try :)
61 if (!left || !right)
62 return left == right;
63
64 gfx::Image leftImage([left copy]);
65 gfx::Image rightImage([right copy]);
66 return leftImage.As1xPNGBytes()->Equals(rightImage.As1xPNGBytes());
67 }
68
69 // Returns a PasswordForm with only a username.
70 autofill::PasswordForm BasicCredential() {
71 autofill::PasswordForm credential;
72 credential.username_value = base::ASCIIToUTF16("taco");
73 return credential;
74 }
75
76 // Returns a PasswordForm with a username and display name.
77 autofill::PasswordForm CredentialWithName() {
78 autofill::PasswordForm credential;
79 credential.username_value = base::ASCIIToUTF16("pizza");
80 credential.display_name = base::ASCIIToUTF16("margherita pizza");
81 return credential;
82 }
83
84 // Returns a PasswordForm with a username and avatar URL.
85 autofill::PasswordForm CredentialWithAvatar() {
86 autofill::PasswordForm credential;
87 credential.username_value = base::ASCIIToUTF16("sandwich");
88 credential.avatar_url = GURL("http://sandwich.com/pastrami.jpg");
89 return credential;
90 }
91
92 // Returns a PasswordForm with a username, display name, and avatar URL.
93 autofill::PasswordForm CredentialWithNameAndAvatar() {
94 autofill::PasswordForm credential;
95 credential.username_value = base::ASCIIToUTF16("noodle");
96 credential.display_name = base::ASCIIToUTF16("pasta amatriciana");
97 credential.avatar_url = GURL("http://pasta.com/amatriciana.png");
98 return credential;
99 }
100
101 // Tests for CredentialItemViewTest.
102 class CredentialItemViewTest : public CocoaTest {
103 protected:
104 void SetUp() override {
105 delegate_.reset([[CredentialItemTestDelegate alloc] init]);
106 }
107
108 // Returns a delegate for testing.
109 CredentialItemTestDelegate* delegate() { return delegate_.get(); }
110
111 // Returns an autoreleased view populated from |form|.
112 CredentialItemView* view(const autofill::PasswordForm& form) {
113 return [[[CredentialItemView alloc]
114 initWithPasswordForm:form
115 credentialType:password_manager::CredentialType::
116 CREDENTIAL_TYPE_LOCAL
117 delegate:delegate()] autorelease];
118 }
119
120 private:
121 base::scoped_nsobject<CredentialItemTestDelegate> delegate_;
122 };
123
124 TEST_F(CredentialItemViewTest, BasicCredential) {
125 autofill::PasswordForm form(BasicCredential());
126 CredentialItemView* item = view(form);
127
128 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
129 [item usernameLabel].stringValue);
130 EXPECT_EQ(nil, [item nameLabel]);
131 EXPECT_FALSE([delegate() didFetchAvatar]);
132 EXPECT_TRUE(
133 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
134 }
135
136 TEST_F(CredentialItemViewTest, CredentialWithName) {
137 autofill::PasswordForm form(CredentialWithName());
138 CredentialItemView* item = view(form);
139
140 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
141 [item usernameLabel].stringValue);
142 EXPECT_NSEQ(base::SysUTF16ToNSString(form.display_name),
143 [item nameLabel].stringValue);
144 EXPECT_FALSE([delegate() didFetchAvatar]);
145 EXPECT_TRUE(
146 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
147 }
148
149 TEST_F(CredentialItemViewTest, CredentialWithAvatar) {
150 autofill::PasswordForm form(CredentialWithAvatar());
151 CredentialItemView* item = view(form);
152
153 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value),
154 [item usernameLabel].stringValue);
155 EXPECT_EQ(nil, [item nameLabel]);
156 EXPECT_TRUE([delegate() didFetchAvatar]);
157 EXPECT_EQ(form.avatar_url, [delegate() fetchedAvatarURL]);
158 EXPECT_EQ(item, [delegate() viewForFetchedAvatar]);
159 EXPECT_TRUE(
160 ImagesEqual([CredentialItemView defaultAvatar], [item avatarView].image));
161
162 [item updateAvatar:nil];
163 EXPECT_FALSE([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 [item updateAvatar:nil];
181 EXPECT_FALSE([item avatarView].image);
182 }
183
184 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/passwords/credential_item_view.mm ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698