blob: c03c772d5ab3984605f3f23e2e781c33599ba9fb [file] [log] [blame]
[email protected]c87481cd2011-03-04 12:29:571// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]224d21b82010-03-31 17:43:012// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]3b63f8f42011-03-28 01:54:155#include "base/memory/scoped_ptr.h"
6#include "base/memory/scoped_vector.h"
[email protected]be1ce6a72010-08-03 14:35:227#include "base/utf_string_conversions.h"
[email protected]8f608c52011-03-30 16:16:318#include "chrome/browser/autofill/autofill_field.h"
[email protected]2a958552011-05-05 04:01:219#include "chrome/browser/autofill/autofill_scanner.h"
[email protected]224d21b82010-03-31 17:43:0110#include "chrome/browser/autofill/credit_card_field.h"
11#include "testing/gtest/include/gtest/gtest.h"
[email protected]b1438212010-04-03 00:30:5912#include "webkit/glue/form_field.h"
[email protected]224d21b82010-03-31 17:43:0113
[email protected]224d21b82010-03-31 17:43:0114class CreditCardFieldTest : public testing::Test {
15 public:
16 CreditCardFieldTest() {}
17
18 protected:
[email protected]2033dcf2011-05-27 01:47:4019 ScopedVector<const AutofillField> list_;
[email protected]224d21b82010-03-31 17:43:0120 scoped_ptr<CreditCardField> field_;
21 FieldTypeMap field_type_map_;
[email protected]2033dcf2011-05-27 01:47:4022
23 // Downcast for tests.
[email protected]194e46f32011-08-08 20:01:1824 static CreditCardField* Parse(AutofillScanner* scanner) {
25 return static_cast<CreditCardField*>(CreditCardField::Parse(scanner));
[email protected]2033dcf2011-05-27 01:47:4026 }
[email protected]224d21b82010-03-31 17:43:0127
28 private:
29 DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest);
30};
31
32TEST_F(CreditCardFieldTest, Empty) {
[email protected]2a958552011-05-05 04:01:2133 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1834 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0135 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
36}
37
38TEST_F(CreditCardFieldTest, NonParse) {
[email protected]c87481cd2011-03-04 12:29:5739 list_.push_back(new AutofillField);
[email protected]2a958552011-05-05 04:01:2140 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1841 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0142 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
43}
44
45TEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) {
[email protected]eb4b8b42011-08-09 01:33:4646 webkit_glue::FormField field;
47 field.form_control_type = ASCIIToUTF16("text");
48
49 field.label = ASCIIToUTF16("Exp Month");
50 field.name = ASCIIToUTF16("ccmonth");
51 list_.push_back(new AutofillField(field, ASCIIToUTF16("month1")));
52
53 field.label = ASCIIToUTF16("Exp Year");
54 field.name = ASCIIToUTF16("ccyear");
55 list_.push_back(new AutofillField(field, ASCIIToUTF16("year2")));
56
[email protected]2a958552011-05-05 04:01:2157 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1858 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0159 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
60}
61
62TEST_F(CreditCardFieldTest, ParseCreditCardNoDate) {
[email protected]eb4b8b42011-08-09 01:33:4663 webkit_glue::FormField field;
64 field.form_control_type = ASCIIToUTF16("text");
65
66 field.label = ASCIIToUTF16("Card Number");
67 field.name = ASCIIToUTF16("card_number");
68 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
69
[email protected]2a958552011-05-05 04:01:2170 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1871 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0172 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
73}
74
75TEST_F(CreditCardFieldTest, ParseMiniumCreditCard) {
[email protected]eb4b8b42011-08-09 01:33:4676 webkit_glue::FormField field;
77 field.form_control_type = ASCIIToUTF16("text");
78
79 field.label = ASCIIToUTF16("Card Number");
80 field.name = ASCIIToUTF16("card_number");
81 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
82
83 field.label = ASCIIToUTF16("Exp Month");
84 field.name = ASCIIToUTF16("ccmonth");
85 list_.push_back(new AutofillField(field, ASCIIToUTF16("month2")));
86
87 field.label = ASCIIToUTF16("Exp Year");
88 field.name = ASCIIToUTF16("ccyear");
89 list_.push_back(new AutofillField(field, ASCIIToUTF16("year3")));
90
[email protected]2a958552011-05-05 04:01:2191 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1892 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0193 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:4694 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]224d21b82010-03-31 17:43:0195 ASSERT_TRUE(
96 field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
97 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
98 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:4699 field_type_map_.find(ASCIIToUTF16("month2")) != field_type_map_.end());
100 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month2")]);
[email protected]224d21b82010-03-31 17:43:01101 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46102 field_type_map_.find(ASCIIToUTF16("year3")) != field_type_map_.end());
[email protected]224d21b82010-03-31 17:43:01103 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46104 field_type_map_[ASCIIToUTF16("year3")]);
[email protected]224d21b82010-03-31 17:43:01105}
106
107TEST_F(CreditCardFieldTest, ParseFullCreditCard) {
[email protected]eb4b8b42011-08-09 01:33:46108 webkit_glue::FormField field;
109 field.form_control_type = ASCIIToUTF16("text");
110
111 field.label = ASCIIToUTF16("Name on Card");
112 field.name = ASCIIToUTF16("name_on_card");
113 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
114
115 field.label = ASCIIToUTF16("Card Number");
116 field.name = ASCIIToUTF16("card_number");
117 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
118
119 field.label = ASCIIToUTF16("Exp Month");
120 field.name = ASCIIToUTF16("ccmonth");
121 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
122
123 field.label = ASCIIToUTF16("Exp Year");
124 field.name = ASCIIToUTF16("ccyear");
125 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
126
127 field.label = ASCIIToUTF16("Verification");
128 field.name = ASCIIToUTF16("verification");
129 list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc5")));
130
[email protected]2a958552011-05-05 04:01:21131 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18132 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:01133 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46134 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]224d21b82010-03-31 17:43:01135 ASSERT_TRUE(
136 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
137 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
138 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46139 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
140 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]224d21b82010-03-31 17:43:01141 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46142 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
143 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]224d21b82010-03-31 17:43:01144 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46145 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]224d21b82010-03-31 17:43:01146 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46147 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]cea1d112010-07-01 00:57:33148 // We don't store CVV.
149 EXPECT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46150 field_type_map_.find(ASCIIToUTF16("cvc5")) == field_type_map_.end());
[email protected]224d21b82010-03-31 17:43:01151}
152
[email protected]3651cf82010-05-07 17:14:34153TEST_F(CreditCardFieldTest, ParseExpMonthYear) {
[email protected]eb4b8b42011-08-09 01:33:46154 webkit_glue::FormField field;
155 field.form_control_type = ASCIIToUTF16("text");
156
157 field.label = ASCIIToUTF16("Name on Card");
158 field.name = ASCIIToUTF16("name_on_card");
159 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
160
161 field.label = ASCIIToUTF16("Card Number");
162 field.name = ASCIIToUTF16("card_number");
163 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
164
165 field.label = ASCIIToUTF16("ExpDate Month / Year");
166 field.name = ASCIIToUTF16("ExpDate");
167 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
168
169 field.label = ASCIIToUTF16("ExpDate Month / Year");
170 field.name = ASCIIToUTF16("ExpDate");
171 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
172
[email protected]2a958552011-05-05 04:01:21173 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18174 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34175 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46176 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34177 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46178 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
179 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34180 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46181 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
182 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34183 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46184 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
185 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34186 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46187 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34188 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46189 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34190}
191
192TEST_F(CreditCardFieldTest, ParseExpMonthYear2) {
[email protected]eb4b8b42011-08-09 01:33:46193 webkit_glue::FormField field;
194 field.form_control_type = ASCIIToUTF16("text");
195
196 field.label = ASCIIToUTF16("Name on Card");
197 field.name = ASCIIToUTF16("name_on_card");
198 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
199
200 field.label = ASCIIToUTF16("Card Number");
201 field.name = ASCIIToUTF16("card_number");
202 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
203
204 field.label = ASCIIToUTF16("Expiration date Month / Year");
205 field.name = ASCIIToUTF16("ExpDate");
206 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
207
208 field.label = ASCIIToUTF16("Expiration date Month / Year");
209 field.name = ASCIIToUTF16("ExpDate");
210 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
211
[email protected]2a958552011-05-05 04:01:21212 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18213 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34214 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46215 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34216 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46217 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
218 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34219 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46220 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
221 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34222 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46223 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
224 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34225 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46226 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34227 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46228 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34229}
[email protected]a23833182011-07-01 02:30:59230
[email protected]1a55d6c2011-08-17 18:58:15231TEST_F(CreditCardFieldTest, ParseExpField) {
232 webkit_glue::FormField field;
233 field.form_control_type = ASCIIToUTF16("text");
234
235 field.label = ASCIIToUTF16("Name on Card");
236 field.name = ASCIIToUTF16("name_on_card");
237 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
238
239 field.label = ASCIIToUTF16("Card Number");
240 field.name = ASCIIToUTF16("card_number");
241 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
242
243 field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)");
244 field.name = ASCIIToUTF16("cc_exp");
245 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
246
247 AutofillScanner scanner(list_.get());
248 field_.reset(Parse(&scanner));
249 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
250 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
251 ASSERT_TRUE(
252 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
253 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
254 ASSERT_TRUE(
255 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
256 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
257 ASSERT_TRUE(
258 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
259 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
260 field_type_map_[ASCIIToUTF16("exp3")]);
261}
262
263TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) {
264 webkit_glue::FormField field;
265 field.form_control_type = ASCIIToUTF16("text");
266
267 field.label = ASCIIToUTF16("Name on Card");
268 field.name = ASCIIToUTF16("name_on_card");
269 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
270
271 field.label = ASCIIToUTF16("Card Number");
272 field.name = ASCIIToUTF16("card_number");
273 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
274
275 field.label = ASCIIToUTF16("Expiration Date (MM/YY)");
276 field.name = ASCIIToUTF16("cc_exp");
277 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
278
279 AutofillScanner scanner(list_.get());
280 field_.reset(Parse(&scanner));
281 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
282 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
283 ASSERT_TRUE(
284 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
285 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
286 ASSERT_TRUE(
287 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
288 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
289 ASSERT_TRUE(
290 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
291 EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
292 field_type_map_[ASCIIToUTF16("exp3")]);
293}
294
[email protected]a23833182011-07-01 02:30:59295TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) {
[email protected]eb4b8b42011-08-09 01:33:46296 webkit_glue::FormField field;
297 field.form_control_type = ASCIIToUTF16("text");
298
299 field.label = ASCIIToUTF16("Name");
300 field.name = ASCIIToUTF16("ccfullname");
301 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
302
[email protected]a23833182011-07-01 02:30:59303 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18304 field_.reset(Parse(&scanner));
[email protected]a23833182011-07-01 02:30:59305 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
306 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
307 ASSERT_TRUE(
308 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
309 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
310}