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