blob: b077b701e638689ab18670980aefc2d5d5fdf290 [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]e4b2fa32013-03-09 22:56:568#include "components/autofill/browser/autofill_field.h"
9#include "components/autofill/browser/autofill_scanner.h"
10#include "components/autofill/browser/credit_card_field.h"
[email protected]edf48d42013-03-07 05:44:4311#include "components/autofill/common/form_field_data.h"
[email protected]224d21b82010-03-31 17:43:0112#include "testing/gtest/include/gtest/gtest.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) {
[email protected]7b4f0fd02013-02-21 05:51:2325 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]1ecbe862012-10-05 01:29:1446 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2247 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4648
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]1ecbe862012-10-05 01:29:1463 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2264 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4665
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]1ecbe862012-10-05 01:29:1476 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2277 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4678
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]1ecbe862012-10-05 01:29:14108 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22109 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46110
[email protected]5fa9ce52012-10-27 18:20:42111 field.label = ASCIIToUTF16("Card Type");
112 field.name = ASCIIToUTF16("card_type");
113 list_.push_back(new AutofillField(field, ASCIIToUTF16("type")));
114
[email protected]eb4b8b42011-08-09 01:33:46115 field.label = ASCIIToUTF16("Name on Card");
116 field.name = ASCIIToUTF16("name_on_card");
[email protected]5fa9ce52012-10-27 18:20:42117 list_.push_back(new AutofillField(field, ASCIIToUTF16("name")));
[email protected]eb4b8b42011-08-09 01:33:46118
119 field.label = ASCIIToUTF16("Card Number");
120 field.name = ASCIIToUTF16("card_number");
[email protected]5fa9ce52012-10-27 18:20:42121 list_.push_back(new AutofillField(field, ASCIIToUTF16("number")));
[email protected]eb4b8b42011-08-09 01:33:46122
123 field.label = ASCIIToUTF16("Exp Month");
124 field.name = ASCIIToUTF16("ccmonth");
[email protected]5fa9ce52012-10-27 18:20:42125 list_.push_back(new AutofillField(field, ASCIIToUTF16("month")));
[email protected]eb4b8b42011-08-09 01:33:46126
127 field.label = ASCIIToUTF16("Exp Year");
128 field.name = ASCIIToUTF16("ccyear");
[email protected]5fa9ce52012-10-27 18:20:42129 list_.push_back(new AutofillField(field, ASCIIToUTF16("year")));
[email protected]eb4b8b42011-08-09 01:33:46130
131 field.label = ASCIIToUTF16("Verification");
132 field.name = ASCIIToUTF16("verification");
[email protected]5fa9ce52012-10-27 18:20:42133 list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc")));
[email protected]eb4b8b42011-08-09 01:33:46134
[email protected]2a958552011-05-05 04:01:21135 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18136 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:01137 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46138 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]224d21b82010-03-31 17:43:01139 ASSERT_TRUE(
[email protected]5fa9ce52012-10-27 18:20:42140 field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end());
141 EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]);
142 ASSERT_TRUE(
143 field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end());
144 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]);
145 ASSERT_TRUE(
146 field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end());
147 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]);
148 ASSERT_TRUE(
149 field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end());
150 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]);
151 ASSERT_TRUE(
152 field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end());
153 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
154 field_type_map_[ASCIIToUTF16("year")]);
[email protected]a76e9d12012-11-08 08:57:37155 ASSERT_TRUE(
156 field_type_map_.find(ASCIIToUTF16("cvc")) != field_type_map_.end());
157 EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE,
158 field_type_map_[ASCIIToUTF16("cvc")]);
[email protected]224d21b82010-03-31 17:43:01159}
160
[email protected]3651cf82010-05-07 17:14:34161TEST_F(CreditCardFieldTest, ParseExpMonthYear) {
[email protected]1ecbe862012-10-05 01:29:14162 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22163 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46164
165 field.label = ASCIIToUTF16("Name on Card");
166 field.name = ASCIIToUTF16("name_on_card");
167 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
168
169 field.label = ASCIIToUTF16("Card Number");
170 field.name = ASCIIToUTF16("card_number");
171 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
172
173 field.label = ASCIIToUTF16("ExpDate Month / Year");
174 field.name = ASCIIToUTF16("ExpDate");
175 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
176
177 field.label = ASCIIToUTF16("ExpDate Month / Year");
178 field.name = ASCIIToUTF16("ExpDate");
179 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
180
[email protected]2a958552011-05-05 04:01:21181 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18182 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34183 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46184 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34185 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46186 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
187 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34188 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46189 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
190 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34191 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46192 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
193 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34194 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46195 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34196 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46197 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34198}
199
200TEST_F(CreditCardFieldTest, ParseExpMonthYear2) {
[email protected]1ecbe862012-10-05 01:29:14201 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22202 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46203
204 field.label = ASCIIToUTF16("Name on Card");
205 field.name = ASCIIToUTF16("name_on_card");
206 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
207
208 field.label = ASCIIToUTF16("Card Number");
209 field.name = ASCIIToUTF16("card_number");
210 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
211
212 field.label = ASCIIToUTF16("Expiration date Month / Year");
213 field.name = ASCIIToUTF16("ExpDate");
214 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
215
216 field.label = ASCIIToUTF16("Expiration date Month / Year");
217 field.name = ASCIIToUTF16("ExpDate");
218 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
219
[email protected]2a958552011-05-05 04:01:21220 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18221 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34222 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46223 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34224 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46225 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
226 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34227 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46228 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
229 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34230 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46231 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
232 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34233 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46234 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34235 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46236 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34237}
[email protected]a23833182011-07-01 02:30:59238
[email protected]1a55d6c2011-08-17 18:58:15239TEST_F(CreditCardFieldTest, ParseExpField) {
[email protected]1ecbe862012-10-05 01:29:14240 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22241 field.form_control_type = "text";
[email protected]1a55d6c2011-08-17 18:58:15242
243 field.label = ASCIIToUTF16("Name on Card");
244 field.name = ASCIIToUTF16("name_on_card");
245 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
246
247 field.label = ASCIIToUTF16("Card Number");
248 field.name = ASCIIToUTF16("card_number");
249 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
250
251 field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)");
252 field.name = ASCIIToUTF16("cc_exp");
253 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
254
255 AutofillScanner scanner(list_.get());
256 field_.reset(Parse(&scanner));
257 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
258 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
259 ASSERT_TRUE(
260 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
261 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
262 ASSERT_TRUE(
263 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
264 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
265 ASSERT_TRUE(
266 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
267 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
268 field_type_map_[ASCIIToUTF16("exp3")]);
269}
270
271TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) {
[email protected]1ecbe862012-10-05 01:29:14272 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22273 field.form_control_type = "text";
[email protected]1a55d6c2011-08-17 18:58:15274
275 field.label = ASCIIToUTF16("Name on Card");
276 field.name = ASCIIToUTF16("name_on_card");
277 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
278
279 field.label = ASCIIToUTF16("Card Number");
280 field.name = ASCIIToUTF16("card_number");
281 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
282
283 field.label = ASCIIToUTF16("Expiration Date (MM/YY)");
284 field.name = ASCIIToUTF16("cc_exp");
285 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
286
287 AutofillScanner scanner(list_.get());
288 field_.reset(Parse(&scanner));
289 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
290 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
291 ASSERT_TRUE(
292 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
293 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
294 ASSERT_TRUE(
295 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
296 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
297 ASSERT_TRUE(
298 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
299 EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
300 field_type_map_[ASCIIToUTF16("exp3")]);
301}
302
[email protected]a23833182011-07-01 02:30:59303TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) {
[email protected]1ecbe862012-10-05 01:29:14304 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22305 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46306
307 field.label = ASCIIToUTF16("Name");
308 field.name = ASCIIToUTF16("ccfullname");
309 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
310
[email protected]a23833182011-07-01 02:30:59311 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18312 field_.reset(Parse(&scanner));
[email protected]a23833182011-07-01 02:30:59313 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
314 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
315 ASSERT_TRUE(
316 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
317 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
318}