OLD | NEW |
(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 // Returns an NSImage suitable for use as a test avatar. |
| 58 NSImage* TestAvatar() { |
| 59 return [[[NSImage alloc] init] autorelease]; |
| 60 } |
| 61 |
| 62 // Returns a PasswordForm with only a username. |
| 63 autofill::PasswordForm BasicCredential() { |
| 64 autofill::PasswordForm credential; |
| 65 credential.username_value = base::ASCIIToUTF16("taco"); |
| 66 return credential; |
| 67 } |
| 68 |
| 69 // Returns a PasswordForm with a username and display name. |
| 70 autofill::PasswordForm CredentialWithName() { |
| 71 autofill::PasswordForm credential; |
| 72 credential.username_value = base::ASCIIToUTF16("pizza"); |
| 73 credential.display_name = base::ASCIIToUTF16("margherita pizza"); |
| 74 return credential; |
| 75 } |
| 76 |
| 77 // Returns a PasswordForm with a username and avatar URL. |
| 78 autofill::PasswordForm CredentialWithAvatar() { |
| 79 autofill::PasswordForm credential; |
| 80 credential.username_value = base::ASCIIToUTF16("sandwich"); |
| 81 credential.avatar_url = GURL("http://sandwich.com/pastrami.jpg"); |
| 82 return credential; |
| 83 } |
| 84 |
| 85 // Returns a PasswordForm with a username, display name, and avatar URL. |
| 86 autofill::PasswordForm CredentialWithNameAndAvatar() { |
| 87 autofill::PasswordForm credential; |
| 88 credential.username_value = base::ASCIIToUTF16("noodle"); |
| 89 credential.display_name = base::ASCIIToUTF16("pasta amatriciana"); |
| 90 credential.avatar_url = GURL("http://pasta.com/amatriciana.png"); |
| 91 return credential; |
| 92 } |
| 93 |
| 94 // Tests for CredentialItemViewTest. |
| 95 class CredentialItemViewTest : public CocoaTest { |
| 96 protected: |
| 97 void SetUp() override { |
| 98 delegate_.reset([[CredentialItemTestDelegate alloc] init]); |
| 99 } |
| 100 |
| 101 // Returns a delegate for testing. |
| 102 CredentialItemTestDelegate* delegate() { return delegate_.get(); } |
| 103 |
| 104 // Returns an autoreleased view populated from |form|. |
| 105 CredentialItemView* view(const autofill::PasswordForm& form) { |
| 106 return [[[CredentialItemView alloc] |
| 107 initWithPasswordForm:form |
| 108 credentialType:password_manager::CredentialType:: |
| 109 CREDENTIAL_TYPE_LOCAL |
| 110 delegate:delegate()] autorelease]; |
| 111 } |
| 112 |
| 113 private: |
| 114 base::scoped_nsobject<CredentialItemTestDelegate> delegate_; |
| 115 }; |
| 116 |
| 117 TEST_VIEW(CredentialItemViewTest, CredentialItemView); |
| 118 |
| 119 TEST_F(CredentialItemViewTest, BasicCredential) { |
| 120 autofill::PasswordForm form(BasicCredential()); |
| 121 CredentialItemView* item = view(form); |
| 122 |
| 123 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value), |
| 124 [item usernameLabel].stringValue); |
| 125 EXPECT_EQ(nil, [item nameLabel]); |
| 126 EXPECT_FALSE([delegate() didFetchAvatar]); |
| 127 EXPECT_NSEQ([CredentialItemView defaultAvatar], [item avatarView].image); |
| 128 } |
| 129 |
| 130 TEST_F(CredentialItemViewTest, CredentialWithName) { |
| 131 autofill::PasswordForm form(CredentialWithName()); |
| 132 CredentialItemView* item = view(form); |
| 133 |
| 134 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value), |
| 135 [item usernameLabel].stringValue); |
| 136 EXPECT_NSEQ(base::SysUTF16ToNSString(form.display_name), |
| 137 [item nameLabel].stringValue); |
| 138 EXPECT_FALSE([delegate() didFetchAvatar]); |
| 139 EXPECT_NSEQ([CredentialItemView defaultAvatar], [item avatarView].image); |
| 140 } |
| 141 |
| 142 TEST_F(CredentialItemViewTest, CredentialWithAvatar) { |
| 143 autofill::PasswordForm form(CredentialWithAvatar()); |
| 144 CredentialItemView* item = view(form); |
| 145 |
| 146 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value), |
| 147 [item usernameLabel].stringValue); |
| 148 EXPECT_EQ(nil, [item nameLabel]); |
| 149 EXPECT_TRUE([delegate() didFetchAvatar]); |
| 150 EXPECT_EQ(form.avatar_url, [delegate() fetchedAvatarURL]); |
| 151 EXPECT_EQ(item, [delegate() viewForFetchedAvatar]); |
| 152 EXPECT_NSEQ([CredentialItemView defaultAvatar], [item avatarView].image); |
| 153 |
| 154 NSImage* testAvatar = TestAvatar(); |
| 155 [item updateAvatar:testAvatar]; |
| 156 EXPECT_NSEQ(testAvatar, [item avatarView].image); |
| 157 } |
| 158 |
| 159 TEST_F(CredentialItemViewTest, CredentialWithNameAndAvatar) { |
| 160 autofill::PasswordForm form(CredentialWithNameAndAvatar()); |
| 161 CredentialItemView* item = view(form); |
| 162 |
| 163 EXPECT_NSEQ(base::SysUTF16ToNSString(form.username_value), |
| 164 [item usernameLabel].stringValue); |
| 165 EXPECT_NSEQ(base::SysUTF16ToNSString(form.display_name), |
| 166 [item nameLabel].stringValue); |
| 167 EXPECT_TRUE([delegate() didFetchAvatar]); |
| 168 EXPECT_EQ(form.avatar_url, [delegate() fetchedAvatarURL]); |
| 169 EXPECT_EQ(item, [delegate() viewForFetchedAvatar]); |
| 170 EXPECT_NSEQ([CredentialItemView defaultAvatar], [item avatarView].image); |
| 171 |
| 172 NSImage* testAvatar = TestAvatar(); |
| 173 [item updateAvatar:testAvatar]; |
| 174 EXPECT_NSEQ(testAvatar, [item avatarView].image); |
| 175 } |
| 176 |
| 177 } // namespace |
OLD | NEW |