blob: 92a1cd3b936c7f7f680382b62af65287bd0ad20e [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]e217c5632013-04-12 19:11:4814namespace autofill {
15
[email protected]224d21b82010-03-31 17:43:0116class CreditCardFieldTest : public testing::Test {
17 public:
18 CreditCardFieldTest() {}
19
20 protected:
[email protected]2033dcf2011-05-27 01:47:4021 ScopedVector<const AutofillField> list_;
[email protected]224d21b82010-03-31 17:43:0122 scoped_ptr<CreditCardField> field_;
23 FieldTypeMap field_type_map_;
[email protected]2033dcf2011-05-27 01:47:4024
25 // Downcast for tests.
[email protected]194e46f32011-08-08 20:01:1826 static CreditCardField* Parse(AutofillScanner* scanner) {
[email protected]7b4f0fd02013-02-21 05:51:2327 return static_cast<CreditCardField*>(CreditCardField::Parse(scanner));
[email protected]2033dcf2011-05-27 01:47:4028 }
[email protected]224d21b82010-03-31 17:43:0129
30 private:
31 DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest);
32};
33
34TEST_F(CreditCardFieldTest, Empty) {
[email protected]2a958552011-05-05 04:01:2135 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1836 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0137 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
38}
39
40TEST_F(CreditCardFieldTest, NonParse) {
[email protected]c87481cd2011-03-04 12:29:5741 list_.push_back(new AutofillField);
[email protected]2a958552011-05-05 04:01:2142 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1843 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0144 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
45}
46
47TEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) {
[email protected]1ecbe862012-10-05 01:29:1448 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2249 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4650
51 field.label = ASCIIToUTF16("Exp Month");
52 field.name = ASCIIToUTF16("ccmonth");
53 list_.push_back(new AutofillField(field, ASCIIToUTF16("month1")));
54
55 field.label = ASCIIToUTF16("Exp Year");
56 field.name = ASCIIToUTF16("ccyear");
57 list_.push_back(new AutofillField(field, ASCIIToUTF16("year2")));
58
[email protected]2a958552011-05-05 04:01:2159 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1860 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0161 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
62}
63
64TEST_F(CreditCardFieldTest, ParseCreditCardNoDate) {
[email protected]1ecbe862012-10-05 01:29:1465 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2266 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4667
68 field.label = ASCIIToUTF16("Card Number");
69 field.name = ASCIIToUTF16("card_number");
70 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
71
[email protected]2a958552011-05-05 04:01:2172 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1873 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0174 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
75}
76
77TEST_F(CreditCardFieldTest, ParseMiniumCreditCard) {
[email protected]1ecbe862012-10-05 01:29:1478 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:2279 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:4680
81 field.label = ASCIIToUTF16("Card Number");
82 field.name = ASCIIToUTF16("card_number");
83 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
84
85 field.label = ASCIIToUTF16("Exp Month");
86 field.name = ASCIIToUTF16("ccmonth");
87 list_.push_back(new AutofillField(field, ASCIIToUTF16("month2")));
88
89 field.label = ASCIIToUTF16("Exp Year");
90 field.name = ASCIIToUTF16("ccyear");
91 list_.push_back(new AutofillField(field, ASCIIToUTF16("year3")));
92
[email protected]2a958552011-05-05 04:01:2193 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:1894 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:0195 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:4696 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]224d21b82010-03-31 17:43:0197 ASSERT_TRUE(
98 field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
99 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
100 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46101 field_type_map_.find(ASCIIToUTF16("month2")) != field_type_map_.end());
102 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month2")]);
[email protected]224d21b82010-03-31 17:43:01103 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46104 field_type_map_.find(ASCIIToUTF16("year3")) != field_type_map_.end());
[email protected]224d21b82010-03-31 17:43:01105 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46106 field_type_map_[ASCIIToUTF16("year3")]);
[email protected]224d21b82010-03-31 17:43:01107}
108
109TEST_F(CreditCardFieldTest, ParseFullCreditCard) {
[email protected]1ecbe862012-10-05 01:29:14110 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22111 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46112
[email protected]5fa9ce52012-10-27 18:20:42113 field.label = ASCIIToUTF16("Card Type");
114 field.name = ASCIIToUTF16("card_type");
115 list_.push_back(new AutofillField(field, ASCIIToUTF16("type")));
116
[email protected]eb4b8b42011-08-09 01:33:46117 field.label = ASCIIToUTF16("Name on Card");
118 field.name = ASCIIToUTF16("name_on_card");
[email protected]5fa9ce52012-10-27 18:20:42119 list_.push_back(new AutofillField(field, ASCIIToUTF16("name")));
[email protected]eb4b8b42011-08-09 01:33:46120
121 field.label = ASCIIToUTF16("Card Number");
122 field.name = ASCIIToUTF16("card_number");
[email protected]5fa9ce52012-10-27 18:20:42123 list_.push_back(new AutofillField(field, ASCIIToUTF16("number")));
[email protected]eb4b8b42011-08-09 01:33:46124
125 field.label = ASCIIToUTF16("Exp Month");
126 field.name = ASCIIToUTF16("ccmonth");
[email protected]5fa9ce52012-10-27 18:20:42127 list_.push_back(new AutofillField(field, ASCIIToUTF16("month")));
[email protected]eb4b8b42011-08-09 01:33:46128
129 field.label = ASCIIToUTF16("Exp Year");
130 field.name = ASCIIToUTF16("ccyear");
[email protected]5fa9ce52012-10-27 18:20:42131 list_.push_back(new AutofillField(field, ASCIIToUTF16("year")));
[email protected]eb4b8b42011-08-09 01:33:46132
133 field.label = ASCIIToUTF16("Verification");
134 field.name = ASCIIToUTF16("verification");
[email protected]5fa9ce52012-10-27 18:20:42135 list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc")));
[email protected]eb4b8b42011-08-09 01:33:46136
[email protected]2a958552011-05-05 04:01:21137 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18138 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:01139 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46140 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]224d21b82010-03-31 17:43:01141 ASSERT_TRUE(
[email protected]5fa9ce52012-10-27 18:20:42142 field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end());
143 EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]);
144 ASSERT_TRUE(
145 field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end());
146 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]);
147 ASSERT_TRUE(
148 field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end());
149 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]);
150 ASSERT_TRUE(
151 field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end());
152 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]);
153 ASSERT_TRUE(
154 field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end());
155 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
156 field_type_map_[ASCIIToUTF16("year")]);
[email protected]a76e9d12012-11-08 08:57:37157 ASSERT_TRUE(
158 field_type_map_.find(ASCIIToUTF16("cvc")) != field_type_map_.end());
159 EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE,
160 field_type_map_[ASCIIToUTF16("cvc")]);
[email protected]224d21b82010-03-31 17:43:01161}
162
[email protected]3651cf82010-05-07 17:14:34163TEST_F(CreditCardFieldTest, ParseExpMonthYear) {
[email protected]1ecbe862012-10-05 01:29:14164 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22165 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46166
167 field.label = ASCIIToUTF16("Name on Card");
168 field.name = ASCIIToUTF16("name_on_card");
169 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
170
171 field.label = ASCIIToUTF16("Card Number");
172 field.name = ASCIIToUTF16("card_number");
173 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
174
175 field.label = ASCIIToUTF16("ExpDate Month / Year");
176 field.name = ASCIIToUTF16("ExpDate");
177 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
178
179 field.label = ASCIIToUTF16("ExpDate Month / Year");
180 field.name = ASCIIToUTF16("ExpDate");
181 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
182
[email protected]2a958552011-05-05 04:01:21183 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18184 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34185 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46186 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34187 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46188 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
189 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34190 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46191 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
192 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34193 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46194 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
195 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34196 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46197 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34198 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46199 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34200}
201
202TEST_F(CreditCardFieldTest, ParseExpMonthYear2) {
[email protected]1ecbe862012-10-05 01:29:14203 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22204 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46205
206 field.label = ASCIIToUTF16("Name on Card");
207 field.name = ASCIIToUTF16("name_on_card");
208 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
209
210 field.label = ASCIIToUTF16("Card Number");
211 field.name = ASCIIToUTF16("card_number");
212 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
213
214 field.label = ASCIIToUTF16("Expiration date Month / Year");
215 field.name = ASCIIToUTF16("ExpDate");
216 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
217
218 field.label = ASCIIToUTF16("Expiration date Month / Year");
219 field.name = ASCIIToUTF16("ExpDate");
220 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
221
[email protected]2a958552011-05-05 04:01:21222 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18223 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34224 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46225 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34226 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46227 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
228 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34229 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46230 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
231 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34232 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46233 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
234 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34235 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46236 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34237 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46238 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34239}
[email protected]a23833182011-07-01 02:30:59240
[email protected]1a55d6c2011-08-17 18:58:15241TEST_F(CreditCardFieldTest, ParseExpField) {
[email protected]1ecbe862012-10-05 01:29:14242 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22243 field.form_control_type = "text";
[email protected]1a55d6c2011-08-17 18:58:15244
245 field.label = ASCIIToUTF16("Name on Card");
246 field.name = ASCIIToUTF16("name_on_card");
247 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
248
249 field.label = ASCIIToUTF16("Card Number");
250 field.name = ASCIIToUTF16("card_number");
251 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
252
253 field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)");
254 field.name = ASCIIToUTF16("cc_exp");
255 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
256
257 AutofillScanner scanner(list_.get());
258 field_.reset(Parse(&scanner));
259 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
260 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
261 ASSERT_TRUE(
262 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
263 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
264 ASSERT_TRUE(
265 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
266 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
267 ASSERT_TRUE(
268 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
269 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
270 field_type_map_[ASCIIToUTF16("exp3")]);
271}
272
273TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) {
[email protected]1ecbe862012-10-05 01:29:14274 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22275 field.form_control_type = "text";
[email protected]1a55d6c2011-08-17 18:58:15276
277 field.label = ASCIIToUTF16("Name on Card");
278 field.name = ASCIIToUTF16("name_on_card");
279 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
280
281 field.label = ASCIIToUTF16("Card Number");
282 field.name = ASCIIToUTF16("card_number");
283 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
284
285 field.label = ASCIIToUTF16("Expiration Date (MM/YY)");
286 field.name = ASCIIToUTF16("cc_exp");
287 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
288
289 AutofillScanner scanner(list_.get());
290 field_.reset(Parse(&scanner));
291 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
292 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
293 ASSERT_TRUE(
294 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
295 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
296 ASSERT_TRUE(
297 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
298 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
299 ASSERT_TRUE(
300 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
301 EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
302 field_type_map_[ASCIIToUTF16("exp3")]);
303}
304
[email protected]a23833182011-07-01 02:30:59305TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) {
[email protected]1ecbe862012-10-05 01:29:14306 FormFieldData field;
[email protected]47fcb0e2012-10-24 03:52:22307 field.form_control_type = "text";
[email protected]eb4b8b42011-08-09 01:33:46308
309 field.label = ASCIIToUTF16("Name");
310 field.name = ASCIIToUTF16("ccfullname");
311 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
312
[email protected]a23833182011-07-01 02:30:59313 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18314 field_.reset(Parse(&scanner));
[email protected]a23833182011-07-01 02:30:59315 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
316 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
317 ASSERT_TRUE(
318 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
319 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
320}
[email protected]e217c5632013-04-12 19:11:48321
322} // namespace autofill