credit_card_field_unittest.cc revision dc0f95d653279beabeb9817299e2902918ba123e
1// Copyright (c) 2011 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/scoped_ptr.h"
6#include "base/scoped_vector.h"
7#include "base/utf_string_conversions.h"
8#include "chrome/browser/autofill/credit_card_field.h"
9#include "testing/gtest/include/gtest/gtest.h"
10#include "webkit/glue/form_field.h"
11
12namespace {
13
14class CreditCardFieldTest : public testing::Test {
15 public:
16  CreditCardFieldTest() {}
17
18 protected:
19  ScopedVector<AutofillField> list_;
20  scoped_ptr<CreditCardField> field_;
21  FieldTypeMap field_type_map_;
22  std::vector<AutofillField*>::const_iterator iter_;
23
24 private:
25  DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest);
26};
27
28TEST_F(CreditCardFieldTest, Empty) {
29  list_.push_back(NULL);
30  iter_ = list_.begin();
31  field_.reset(CreditCardField::Parse(&iter_, false));
32  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
33}
34
35TEST_F(CreditCardFieldTest, NonParse) {
36  list_.push_back(new AutofillField);
37  list_.push_back(NULL);
38  iter_ = list_.begin();
39  field_.reset(CreditCardField::Parse(&iter_, false));
40  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
41}
42
43TEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) {
44  list_.push_back(
45      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Exp Month"),
46                                               ASCIIToUTF16("ccmonth"),
47                                               string16(),
48                                               ASCIIToUTF16("text"),
49                                               0,
50                                               false),
51                        ASCIIToUTF16("month1")));
52  list_.push_back(
53      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Exp Year"),
54                                               ASCIIToUTF16("ccyear"),
55                                               string16(),
56                                               ASCIIToUTF16("text"),
57                                               0,
58                                               false),
59                        ASCIIToUTF16("year1")));
60  list_.push_back(NULL);
61  iter_ = list_.begin();
62  field_.reset(CreditCardField::Parse(&iter_, false));
63  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
64}
65
66TEST_F(CreditCardFieldTest, ParseCreditCardNoDate) {
67  list_.push_back(
68      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
69                                               ASCIIToUTF16("card_number"),
70                                               string16(),
71                                               ASCIIToUTF16("text"),
72                                               0,
73                                               false),
74                        ASCIIToUTF16("number1")));
75  list_.push_back(NULL);
76  iter_ = list_.begin();
77  field_.reset(CreditCardField::Parse(&iter_, false));
78  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
79}
80
81TEST_F(CreditCardFieldTest, ParseMiniumCreditCard) {
82  list_.push_back(
83      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
84                                               ASCIIToUTF16("card_number"),
85                                               string16(),
86                                               ASCIIToUTF16("text"),
87                                               0,
88                                               false),
89                        ASCIIToUTF16("number1")));
90  list_.push_back(
91      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Exp Month"),
92                                               ASCIIToUTF16("ccmonth"),
93                                               string16(),
94                                               ASCIIToUTF16("text"),
95                                               0,
96                                               false),
97                        ASCIIToUTF16("month1")));
98  list_.push_back(
99      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Exp Year"),
100                                               ASCIIToUTF16("ccyear"),
101                                               string16(),
102                                               ASCIIToUTF16("text"),
103                                               0,
104                                               false),
105                        ASCIIToUTF16("year1")));
106  list_.push_back(NULL);
107  iter_ = list_.begin();
108  field_.reset(CreditCardField::Parse(&iter_, false));
109  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
110  ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
111  ASSERT_TRUE(
112      field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
113  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
114  ASSERT_TRUE(
115      field_type_map_.find(ASCIIToUTF16("month1")) != field_type_map_.end());
116  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month1")]);
117  ASSERT_TRUE(
118      field_type_map_.find(ASCIIToUTF16("year1")) != field_type_map_.end());
119  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
120      field_type_map_[ASCIIToUTF16("year1")]);
121}
122
123TEST_F(CreditCardFieldTest, ParseMiniumCreditCardEcml) {
124  list_.push_back(
125      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
126                                               ASCIIToUTF16(kEcmlCardNumber),
127                                               string16(),
128                                               ASCIIToUTF16("text"),
129                                               0,
130                                               false),
131                        ASCIIToUTF16("number1")));
132  list_.push_back(
133      new AutofillField(
134          webkit_glue::FormField(ASCIIToUTF16("Exp Month"),
135                                 ASCIIToUTF16(kEcmlCardExpireMonth),
136                                 string16(),
137                                 ASCIIToUTF16("text"),
138                                 0,
139                                 false),
140          ASCIIToUTF16("month1")));
141  list_.push_back(
142      new AutofillField(
143          webkit_glue::FormField(ASCIIToUTF16("Exp Year"),
144                                 ASCIIToUTF16(kEcmlCardExpireYear),
145                                 string16(),
146                                 ASCIIToUTF16("text"),
147                                 0,
148                                 false),
149          ASCIIToUTF16("year1")));
150  list_.push_back(NULL);
151  iter_ = list_.begin();
152  field_.reset(CreditCardField::Parse(&iter_, false));
153  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
154  ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
155  ASSERT_TRUE(
156      field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
157  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
158  ASSERT_TRUE(
159      field_type_map_.find(ASCIIToUTF16("month1")) != field_type_map_.end());
160  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month1")]);
161  ASSERT_TRUE(
162      field_type_map_.find(ASCIIToUTF16("year1")) != field_type_map_.end());
163  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
164      field_type_map_[ASCIIToUTF16("year1")]);
165}
166
167TEST_F(CreditCardFieldTest, ParseFullCreditCard) {
168  list_.push_back(
169      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Name on Card"),
170                                               ASCIIToUTF16("name on card"),
171                                               string16(),
172                                               ASCIIToUTF16("text"),
173                                               0,
174                                               false),
175                        ASCIIToUTF16("name1")));
176  list_.push_back(
177      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
178                                               ASCIIToUTF16("card_number"),
179                                               string16(),
180                                               ASCIIToUTF16("text"),
181                                               0,
182                                               false),
183                        ASCIIToUTF16("number1")));
184  list_.push_back(
185      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Exp Month"),
186                                               ASCIIToUTF16("ccmonth"),
187                                               string16(),
188                                               ASCIIToUTF16("text"),
189                                               0,
190                                               false),
191                        ASCIIToUTF16("month1")));
192  list_.push_back(
193      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Exp Year"),
194                                               ASCIIToUTF16("ccyear"),
195                                               string16(),
196                                               ASCIIToUTF16("text"),
197                                               0,
198                                               false),
199                        ASCIIToUTF16("year1")));
200  list_.push_back(
201      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Verification"),
202                                               ASCIIToUTF16("verification"),
203                                               string16(),
204                                               ASCIIToUTF16("text"),
205                                               0,
206                                               false),
207                        ASCIIToUTF16("cvc1")));
208  list_.push_back(NULL);
209  iter_ = list_.begin();
210  field_.reset(CreditCardField::Parse(&iter_, false));
211  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
212  ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
213  ASSERT_TRUE(
214      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
215  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
216  ASSERT_TRUE(
217      field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
218  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
219  ASSERT_TRUE(
220      field_type_map_.find(ASCIIToUTF16("month1")) != field_type_map_.end());
221  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month1")]);
222  ASSERT_TRUE(
223      field_type_map_.find(ASCIIToUTF16("year1")) != field_type_map_.end());
224  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
225      field_type_map_[ASCIIToUTF16("year1")]);
226  // We don't store CVV.
227  EXPECT_TRUE(
228      field_type_map_.find(ASCIIToUTF16("cvc1")) == field_type_map_.end());
229}
230
231TEST_F(CreditCardFieldTest, ParseFullCreditCardEcml) {
232  list_.push_back(
233      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Name on Card"),
234                                               ASCIIToUTF16(kEcmlCardHolder),
235                                               string16(),
236                                               ASCIIToUTF16("text"),
237                                               0,
238                                               false),
239                        ASCIIToUTF16("name1")));
240  list_.push_back(
241      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
242                                               ASCIIToUTF16(kEcmlCardNumber),
243                                               string16(),
244                                               ASCIIToUTF16("text"),
245                                               0,
246                                               false),
247                        ASCIIToUTF16("number1")));
248  list_.push_back(
249      new AutofillField(
250          webkit_glue::FormField(ASCIIToUTF16("Exp Month"),
251                                 ASCIIToUTF16(kEcmlCardExpireMonth),
252                                 string16(),
253                                 ASCIIToUTF16("text"),
254                                 0,
255                                 false),
256          ASCIIToUTF16("month1")));
257  list_.push_back(
258      new AutofillField(
259          webkit_glue::FormField(ASCIIToUTF16("Exp Year"),
260                                 ASCIIToUTF16(kEcmlCardExpireYear),
261                                 string16(),
262                                 ASCIIToUTF16("text"),
263                                 0,
264                                 false),
265          ASCIIToUTF16("year1")));
266  list_.push_back(
267      new AutofillField(
268          webkit_glue::FormField(ASCIIToUTF16("Verification"),
269                                 ASCIIToUTF16(kEcmlCardVerification),
270                                 string16(),
271                                 ASCIIToUTF16("text"),
272                                 0,
273                                 false),
274          ASCIIToUTF16("cvc1")));
275  list_.push_back(NULL);
276  iter_ = list_.begin();
277  field_.reset(CreditCardField::Parse(&iter_, false));
278  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
279  ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
280  ASSERT_TRUE(
281      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
282  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
283  ASSERT_TRUE(
284      field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
285  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
286  ASSERT_TRUE(
287      field_type_map_.find(ASCIIToUTF16("month1")) != field_type_map_.end());
288  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month1")]);
289  ASSERT_TRUE(
290      field_type_map_.find(ASCIIToUTF16("year1")) != field_type_map_.end());
291  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
292      field_type_map_[ASCIIToUTF16("year1")]);
293  // We don't store the CVV.
294  EXPECT_TRUE(
295      field_type_map_.find(ASCIIToUTF16("cvc1")) == field_type_map_.end());
296}
297
298TEST_F(CreditCardFieldTest, ParseExpMonthYear) {
299  list_.push_back(
300      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Name on Card"),
301                                               ASCIIToUTF16("Name"),
302                                               string16(),
303                                               ASCIIToUTF16("text"),
304                                               0,
305                                               false),
306                        ASCIIToUTF16("name")));
307  list_.push_back(
308      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
309                                               ASCIIToUTF16("Card"),
310                                               string16(),
311                                               ASCIIToUTF16("text"),
312                                               0,
313                                               false),
314                        ASCIIToUTF16("number")));
315  list_.push_back(
316      new AutofillField(
317          webkit_glue::FormField(ASCIIToUTF16("ExpDate Month / Year"),
318                                 ASCIIToUTF16("ExpDate"),
319                                 string16(),
320                                 ASCIIToUTF16("text"),
321                                 0,
322                                 false),
323          ASCIIToUTF16("month")));
324  list_.push_back(
325      new AutofillField(
326          webkit_glue::FormField(ASCIIToUTF16("ExpDate Month / Year"),
327                                 ASCIIToUTF16("ExpDate"),
328                                 string16(),
329                                 ASCIIToUTF16("text"),
330                                 0,
331                                 false),
332          ASCIIToUTF16("year")));
333  list_.push_back(NULL);
334  iter_ = list_.begin();
335  field_.reset(CreditCardField::Parse(&iter_, false));
336  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
337  ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
338  ASSERT_TRUE(
339      field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end());
340  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]);
341  ASSERT_TRUE(
342      field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end());
343  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]);
344  ASSERT_TRUE(
345      field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end());
346  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]);
347  ASSERT_TRUE(
348      field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end());
349  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
350      field_type_map_[ASCIIToUTF16("year")]);
351}
352
353TEST_F(CreditCardFieldTest, ParseExpMonthYear2) {
354  list_.push_back(
355      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Name on Card"),
356                                               ASCIIToUTF16("Name"),
357                                               string16(),
358                                               ASCIIToUTF16("text"),
359                                               0,
360                                               false),
361                        ASCIIToUTF16("name")));
362  list_.push_back(
363      new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Card Number"),
364                                               ASCIIToUTF16("Card"),
365                                               string16(),
366                                               ASCIIToUTF16("text"),
367                                               0,
368                                               false),
369                        ASCIIToUTF16("number")));
370  list_.push_back(
371      new AutofillField(
372          webkit_glue::FormField(ASCIIToUTF16("Expiration date Month / Year"),
373                                 ASCIIToUTF16("ExpDate"),
374                                 string16(),
375                                 ASCIIToUTF16("text"),
376                                 0,
377                                 false),
378          ASCIIToUTF16("month")));
379  list_.push_back(
380      new AutofillField(
381          webkit_glue::FormField(ASCIIToUTF16("Expiration date Month / Year"),
382                                 ASCIIToUTF16("ExpDate"),
383                                 string16(),
384                                 ASCIIToUTF16("text"),
385                                 0,
386                                 false),
387          ASCIIToUTF16("year")));
388  list_.push_back(NULL);
389  iter_ = list_.begin();
390  field_.reset(CreditCardField::Parse(&iter_, false));
391  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
392  ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
393  ASSERT_TRUE(
394      field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end());
395  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]);
396  ASSERT_TRUE(
397      field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end());
398  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]);
399  ASSERT_TRUE(
400      field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end());
401  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]);
402  ASSERT_TRUE(
403      field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end());
404  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
405      field_type_map_[ASCIIToUTF16("year")]);
406}
407
408}  // namespace
409
410