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

Side by Side Diff: chrome/browser/ui/autofill/generated_credit_card_bubble_controller_unittest.cc

Issue 21668003: Implement newly saved card bubble for realz and update generated card bubble to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 7 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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 #include "base/basictypes.h"
6 #include "base/compiler_specific.h"
7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/prefs/pref_service.h"
10 #include "base/strings/string16.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/ui/autofill/generated_credit_card_bubble_controller.h"
13 #include "chrome/browser/ui/autofill/test_generated_credit_card_bubble_view.h"
14 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/testing_profile.h"
16 #include "components/autofill/core/browser/autofill_common_test.h"
17 #include "content/public/browser/web_contents.h"
18 #include "content/public/common/page_transition_types.h"
19 #include "content/public/test/test_browser_thread_bundle.h"
20 #include "content/public/test/web_contents_tester.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22 #include "ui/base/range/range.h"
23
24 #if defined(OS_WIN)
25 #include "ui/base/win/scoped_ole_initializer.h"
26 #endif
27
28 namespace autofill {
29
30 namespace {
31
32 base::string16 BackingCard() {
33 return ASCIIToUTF16("Visa - 1111");
34 }
35
36 base::string16 FrontingCard() {
37 return ASCIIToUTF16("Mastercard - 4444");
38 }
39
40 base::string16 RangeOfString(const base::string16& string,
41 const ui::Range& range) {
42 return string.substr(range.start(), range.end() - range.start());
43 }
44
45 class TestGeneratedCreditCardBubbleController
46 : public GeneratedCreditCardBubbleController {
47 public:
48 explicit TestGeneratedCreditCardBubbleController(
49 content::WebContents* contents)
50 : GeneratedCreditCardBubbleController(contents) {
51 contents->SetUserData(UserDataKey(), this);
52 }
53
54 virtual ~TestGeneratedCreditCardBubbleController() {}
55
56 bool IsInstalled() const {
57 return web_contents()->GetUserData(UserDataKey()) == this;
58 }
59
60 TestGeneratedCreditCardBubbleView* GetTestingBubble() {
61 return static_cast<TestGeneratedCreditCardBubbleView*>(
62 GeneratedCreditCardBubbleController::bubble().get());
63 }
64
65 protected:
66 virtual base::WeakPtr<GeneratedCreditCardBubbleView> CreateBubble() OVERRIDE {
67 return TestGeneratedCreditCardBubbleView::Create(GetWeakPtr());
68 }
69
70 virtual bool CanShow() const OVERRIDE {
71 return true;
72 }
73
74 private:
75 DISALLOW_COPY_AND_ASSIGN(TestGeneratedCreditCardBubbleController);
76 };
77
78 class GeneratedCreditCardBubbleControllerTest : public testing::Test {
79 public:
80 GeneratedCreditCardBubbleControllerTest()
81 : test_web_contents_(
82 content::WebContentsTester::CreateTestWebContents(
83 &profile_, NULL)) {}
84
85 virtual void SetUp() OVERRIDE {
86 // Attaches immediately to |test_web_contents_| so a test version will exist
87 // before a non-test version can be created.
88 new TestGeneratedCreditCardBubbleController(test_web_contents_.get());
89 ASSERT_TRUE(controller()->IsInstalled());
90 }
91
92 protected:
93 TestGeneratedCreditCardBubbleController* controller() {
94 return static_cast<TestGeneratedCreditCardBubbleController*>(
95 TestGeneratedCreditCardBubbleController::FromWebContents(
96 test_web_contents_.get()));
97 }
98
99 int GeneratedCardBubbleTimesShown() {
100 return profile_.GetPrefs()->GetInteger(
101 ::prefs::kAutofillGeneratedCardBubbleTimesShown);
102 }
103
104 void Show() {
105 ASSERT_TRUE(controller()->IsInstalled());
106 TestGeneratedCreditCardBubbleController::Show(test_web_contents_.get(),
107 BackingCard(),
108 FrontingCard());
109 }
110
111 void Navigate() {
112 NavigateWithTransition(content::PAGE_TRANSITION_LINK);
113 }
114
115 void Redirect() {
116 NavigateWithTransition(content::PAGE_TRANSITION_CLIENT_REDIRECT);
117 }
118
119 private:
120 void NavigateWithTransition(content::PageTransition trans) {
121 content::WebContentsTester::For(test_web_contents_.get())->TestDidNavigate(
122 test_web_contents_->GetRenderViewHost(), 1, GURL("about:blank"), trans);
123 }
124
125 content::TestBrowserThreadBundle thread_bundle_;
126 #if defined(OS_WIN)
127 // Without this there will be drag and drop failures. http://crbug.com/227221
128 ui::ScopedOleInitializer ole_initializer_;
129 #endif
130 TestingProfile profile_;
131 scoped_ptr<content::WebContents> test_web_contents_;
132 };
133
134 } // namespace
135
136 TEST_F(GeneratedCreditCardBubbleControllerTest, GeneratedCardBubbleTimesShown) {
137 ASSERT_EQ(0, GeneratedCardBubbleTimesShown());
138
139 // Ensure that showing the generated card UI bumps the persistent count.
140 Show();
141 EXPECT_EQ(1, GeneratedCardBubbleTimesShown());
142 EXPECT_TRUE(controller()->GetTestingBubble()->showing());
143
144 Show();
145 Show();
146 EXPECT_EQ(3, GeneratedCardBubbleTimesShown());
147 EXPECT_TRUE(controller()->GetTestingBubble()->showing());
148 }
149
150 TEST_F(GeneratedCreditCardBubbleControllerTest, TitleText) {
151 Show();
152 EXPECT_FALSE(controller()->TitleText().empty());
153 }
154
155 TEST_F(GeneratedCreditCardBubbleControllerTest, ContentsText) {
156 // Ensure that while showing the generated card UI that the bubble's text
157 // contains "Visa - 1111" and "Mastercard - 4444".
158 Show();
159 base::string16 contents_text = controller()->ContentsText();
160 EXPECT_NE(base::string16::npos, contents_text.find(BackingCard()));
161 EXPECT_NE(base::string16::npos, contents_text.find(FrontingCard()));
162
163 // Make sure that |bubble_text_| is regenerated the same way in |Setup()|.
164 Show();
165 EXPECT_EQ(contents_text, controller()->ContentsText());
166 }
167
168 TEST_F(GeneratedCreditCardBubbleControllerTest, ContentsTextRanges) {
169 // Check that the highlighted ranges in the bubble's text are correct.
170 Show();
171 const base::string16& contents_text = controller()->ContentsText();
172 const std::vector<TextRange>& ranges = controller()->ContentsTextRanges();
173
174 ASSERT_EQ(3U, ranges.size());
175
176 EXPECT_EQ(BackingCard(), RangeOfString(contents_text, ranges[0].range));
177 EXPECT_FALSE(ranges[0].is_link);
178
179 EXPECT_EQ(FrontingCard(), RangeOfString(contents_text, ranges[1].range));
180 EXPECT_FALSE(ranges[1].is_link);
181
182 EXPECT_TRUE(ranges[2].is_link);
183
184 Show();
185 EXPECT_EQ(ranges, controller()->ContentsTextRanges());
186 }
187
188 TEST_F(GeneratedCreditCardBubbleControllerTest, AnchorIcon) {
189 Show();
190 EXPECT_FALSE(controller()->AnchorIcon().IsEmpty());
191 }
192
193 TEST_F(GeneratedCreditCardBubbleControllerTest, HideOnNavigate) {
194 // When a user navigates away from a page (or refreshes) normally, the bubble
195 // should be hidden.
196 EXPECT_FALSE(controller()->GetTestingBubble());
197 Show();
198 EXPECT_TRUE(controller()->GetTestingBubble()->showing());
199
200 Navigate();
201 EXPECT_FALSE(controller());
202 }
203
204 TEST_F(GeneratedCreditCardBubbleControllerTest, StayOnRedirect) {
205 // If a page redirects right after submitting, the bubble should remain.
206 EXPECT_FALSE(controller()->GetTestingBubble());
207 Show();
208 EXPECT_TRUE(controller()->GetTestingBubble()->showing());
209
210 Redirect();
211 EXPECT_TRUE(controller()->GetTestingBubble()->showing());
212 }
213
214 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698