1// Copyright 2013 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/memory/scoped_ptr.h"
6#include "base/memory/scoped_vector.h"
7#include "base/strings/utf_string_conversions.h"
8#include "components/autofill/core/browser/autofill_field.h"
9#include "components/autofill/core/browser/autofill_scanner.h"
10#include "components/autofill/core/browser/credit_card_field.h"
11#include "components/autofill/core/common/form_field_data.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14using base::ASCIIToUTF16;
15
16namespace autofill {
17
18class CreditCardFieldTest : public testing::Test {
19 public:
20  CreditCardFieldTest() {}
21  virtual ~CreditCardFieldTest() {}
22
23 protected:
24  ScopedVector<AutofillField> list_;
25  scoped_ptr<const CreditCardField> field_;
26  ServerFieldTypeMap field_type_map_;
27
28  // Parses the contents of |list_| as a form, and stores the result into
29  // |field_|.
30  void Parse() {
31    AutofillScanner scanner(list_.get());
32    field_.reset(
33        static_cast<const CreditCardField*>(CreditCardField::Parse(&scanner)));
34  }
35
36  // Associates fields with their corresponding types, based on the previous
37  // call to Parse().
38  bool ClassifyField() {
39    return field_->ClassifyField(&field_type_map_);
40  }
41
42 private:
43  DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest);
44};
45
46TEST_F(CreditCardFieldTest, Empty) {
47  Parse();
48  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
49}
50
51TEST_F(CreditCardFieldTest, NonParse) {
52  list_.push_back(new AutofillField);
53  Parse();
54  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
55}
56
57TEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) {
58  FormFieldData field;
59  field.form_control_type = "text";
60
61  field.label = ASCIIToUTF16("Exp Month");
62  field.name = ASCIIToUTF16("ccmonth");
63  list_.push_back(new AutofillField(field, ASCIIToUTF16("month1")));
64
65  field.label = ASCIIToUTF16("Exp Year");
66  field.name = ASCIIToUTF16("ccyear");
67  list_.push_back(new AutofillField(field, ASCIIToUTF16("year2")));
68
69  Parse();
70  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
71}
72
73TEST_F(CreditCardFieldTest, ParseCreditCardNoDate) {
74  FormFieldData field;
75  field.form_control_type = "text";
76
77  field.label = ASCIIToUTF16("Card Number");
78  field.name = ASCIIToUTF16("card_number");
79  list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
80
81  Parse();
82  ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get());
83}
84
85TEST_F(CreditCardFieldTest, ParseMiniumCreditCard) {
86  FormFieldData field;
87  field.form_control_type = "text";
88
89  field.label = ASCIIToUTF16("Card Number");
90  field.name = ASCIIToUTF16("card_number");
91  list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
92
93  field.label = ASCIIToUTF16("Exp Month");
94  field.name = ASCIIToUTF16("ccmonth");
95  list_.push_back(new AutofillField(field, ASCIIToUTF16("month2")));
96
97  field.label = ASCIIToUTF16("Exp Year");
98  field.name = ASCIIToUTF16("ccyear");
99  list_.push_back(new AutofillField(field, ASCIIToUTF16("year3")));
100
101  Parse();
102  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
103  EXPECT_TRUE(ClassifyField());
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("month2")) != field_type_map_.end());
109  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month2")]);
110  ASSERT_TRUE(
111      field_type_map_.find(ASCIIToUTF16("year3")) != field_type_map_.end());
112  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
113      field_type_map_[ASCIIToUTF16("year3")]);
114}
115
116TEST_F(CreditCardFieldTest, ParseFullCreditCard) {
117  FormFieldData field;
118  field.form_control_type = "text";
119
120  field.label = ASCIIToUTF16("Card Type");
121  field.name = ASCIIToUTF16("card_type");
122  list_.push_back(new AutofillField(field, ASCIIToUTF16("type")));
123
124  field.label = ASCIIToUTF16("Name on Card");
125  field.name = ASCIIToUTF16("name_on_card");
126  list_.push_back(new AutofillField(field, ASCIIToUTF16("name")));
127
128  field.label = ASCIIToUTF16("Card Number");
129  field.name = ASCIIToUTF16("card_number");
130  list_.push_back(new AutofillField(field, ASCIIToUTF16("number")));
131
132  field.label = ASCIIToUTF16("Exp Month");
133  field.name = ASCIIToUTF16("ccmonth");
134  list_.push_back(new AutofillField(field, ASCIIToUTF16("month")));
135
136  field.label = ASCIIToUTF16("Exp Year");
137  field.name = ASCIIToUTF16("ccyear");
138  list_.push_back(new AutofillField(field, ASCIIToUTF16("year")));
139
140  field.label = ASCIIToUTF16("Verification");
141  field.name = ASCIIToUTF16("verification");
142  list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc")));
143
144  Parse();
145  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
146  EXPECT_TRUE(ClassifyField());
147  ASSERT_TRUE(
148      field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end());
149  EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]);
150  ASSERT_TRUE(
151      field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end());
152  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]);
153  ASSERT_TRUE(
154      field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end());
155  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]);
156  ASSERT_TRUE(
157      field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end());
158  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]);
159  ASSERT_TRUE(
160      field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end());
161  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
162      field_type_map_[ASCIIToUTF16("year")]);
163  ASSERT_TRUE(
164      field_type_map_.find(ASCIIToUTF16("cvc")) != field_type_map_.end());
165  EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE,
166      field_type_map_[ASCIIToUTF16("cvc")]);
167}
168
169TEST_F(CreditCardFieldTest, ParseExpMonthYear) {
170  FormFieldData field;
171  field.form_control_type = "text";
172
173  field.label = ASCIIToUTF16("Name on Card");
174  field.name = ASCIIToUTF16("name_on_card");
175  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
176
177  field.label = ASCIIToUTF16("Card Number");
178  field.name = ASCIIToUTF16("card_number");
179  list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
180
181  field.label = ASCIIToUTF16("ExpDate Month / Year");
182  field.name = ASCIIToUTF16("ExpDate");
183  list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
184
185  field.label = ASCIIToUTF16("ExpDate Month / Year");
186  field.name = ASCIIToUTF16("ExpDate");
187  list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
188
189  Parse();
190  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
191  EXPECT_TRUE(ClassifyField());
192  ASSERT_TRUE(
193      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
194  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
195  ASSERT_TRUE(
196      field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
197  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
198  ASSERT_TRUE(
199      field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
200  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
201  ASSERT_TRUE(
202      field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
203  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
204      field_type_map_[ASCIIToUTF16("year4")]);
205}
206
207TEST_F(CreditCardFieldTest, ParseExpMonthYear2) {
208  FormFieldData field;
209  field.form_control_type = "text";
210
211  field.label = ASCIIToUTF16("Name on Card");
212  field.name = ASCIIToUTF16("name_on_card");
213  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
214
215  field.label = ASCIIToUTF16("Card Number");
216  field.name = ASCIIToUTF16("card_number");
217  list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
218
219  field.label = ASCIIToUTF16("Expiration date Month / Year");
220  field.name = ASCIIToUTF16("ExpDate");
221  list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
222
223  field.label = ASCIIToUTF16("Expiration date Month / Year");
224  field.name = ASCIIToUTF16("ExpDate");
225  list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
226
227  Parse();
228  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
229  EXPECT_TRUE(ClassifyField());
230  ASSERT_TRUE(
231      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
232  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
233  ASSERT_TRUE(
234      field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
235  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
236  ASSERT_TRUE(
237      field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
238  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
239  ASSERT_TRUE(
240      field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
241  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
242      field_type_map_[ASCIIToUTF16("year4")]);
243}
244
245TEST_F(CreditCardFieldTest, ParseExpField) {
246  FormFieldData field;
247  field.form_control_type = "text";
248
249  field.label = ASCIIToUTF16("Name on Card");
250  field.name = ASCIIToUTF16("name_on_card");
251  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
252
253  field.label = ASCIIToUTF16("Card Number");
254  field.name = ASCIIToUTF16("card_number");
255  list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
256
257  field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)");
258  field.name = ASCIIToUTF16("cc_exp");
259  list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
260
261  Parse();
262  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
263  EXPECT_TRUE(ClassifyField());
264  ASSERT_TRUE(
265      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
266  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
267  ASSERT_TRUE(
268      field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
269  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
270  ASSERT_TRUE(
271      field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
272  EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
273            field_type_map_[ASCIIToUTF16("exp3")]);
274}
275
276TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) {
277  FormFieldData field;
278  field.form_control_type = "text";
279
280  field.label = ASCIIToUTF16("Name on Card");
281  field.name = ASCIIToUTF16("name_on_card");
282  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
283
284  field.label = ASCIIToUTF16("Card Number");
285  field.name = ASCIIToUTF16("card_number");
286  list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
287
288  field.label = ASCIIToUTF16("Expiration Date (MM/YY)");
289  field.name = ASCIIToUTF16("cc_exp");
290  list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3")));
291
292  Parse();
293  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
294  EXPECT_TRUE(ClassifyField());
295  ASSERT_TRUE(
296      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
297  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
298  ASSERT_TRUE(
299      field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
300  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
301  ASSERT_TRUE(
302      field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end());
303  EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR,
304            field_type_map_[ASCIIToUTF16("exp3")]);
305}
306
307TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) {
308  FormFieldData field;
309  field.form_control_type = "text";
310
311  field.label = ASCIIToUTF16("Name");
312  field.name = ASCIIToUTF16("ccfullname");
313  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
314
315  Parse();
316  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
317  EXPECT_TRUE(ClassifyField());
318  ASSERT_TRUE(
319      field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
320  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
321}
322
323// Verifies that <input type="month"> controls are able to be parsed correctly.
324TEST_F(CreditCardFieldTest, ParseMonthControl) {
325  FormFieldData field;
326
327  field.form_control_type = "text";
328  field.label = ASCIIToUTF16("Card number:");
329  field.name = ASCIIToUTF16("ccnumber");
330  list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
331
332  field.form_control_type = "month";
333  field.label = ASCIIToUTF16("Expiration date:");
334  field.name = ASCIIToUTF16("ccexp");
335  list_.push_back(new AutofillField(field, ASCIIToUTF16("date2")));
336
337  Parse();
338  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
339  EXPECT_TRUE(ClassifyField());
340  ASSERT_TRUE(
341      field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end());
342  EXPECT_EQ(CREDIT_CARD_NUMBER,
343            field_type_map_[ASCIIToUTF16("number1")]);
344  ASSERT_TRUE(
345      field_type_map_.find(ASCIIToUTF16("date2")) != field_type_map_.end());
346  EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR,
347            field_type_map_[ASCIIToUTF16("date2")]);
348}
349
350// Verify that heuristics <input name="ccyear" maxlength="2"/> considers
351// *maxlength* attribute while parsing 2 Digit expiration year.
352TEST_F(CreditCardFieldTest, ParseCreditCardExpYear_2DigitMaxLength) {
353  FormFieldData field;
354  field.form_control_type = "text";
355
356  field.label = ASCIIToUTF16("Card Number");
357  field.name = ASCIIToUTF16("card_number");
358  list_.push_back(new AutofillField(field, ASCIIToUTF16("number")));
359
360  field.label = ASCIIToUTF16("Expiration Date");
361  field.name = ASCIIToUTF16("ccmonth");
362  list_.push_back(new AutofillField(field, ASCIIToUTF16("month")));
363
364  field.name = ASCIIToUTF16("ccyear");
365  field.max_length = 2;
366  list_.push_back(new AutofillField(field, ASCIIToUTF16("year")));
367
368  Parse();
369  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
370  EXPECT_TRUE(ClassifyField());
371  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number")) !=
372              field_type_map_.end());
373  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]);
374  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month")) !=
375              field_type_map_.end());
376  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]);
377  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year")) !=
378              field_type_map_.end());
379  EXPECT_EQ(CREDIT_CARD_EXP_2_DIGIT_YEAR,
380            field_type_map_[ASCIIToUTF16("year")]);
381}
382
383TEST_F(CreditCardFieldTest, ParseCreditCardNumberWithSplit) {
384  FormFieldData field;
385  field.form_control_type = "text";
386
387  field.label = ASCIIToUTF16("Card Number");
388  field.name = ASCIIToUTF16("card_number_q1");
389  field.max_length = 4;
390  list_.push_back(new AutofillField(field, ASCIIToUTF16("number1")));
391
392  field.label = ASCIIToUTF16("Card Number");
393  field.name = ASCIIToUTF16("card_number_q2");
394  field.max_length = 4;
395  list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
396
397  field.label = ASCIIToUTF16("Card Number");
398  field.name = ASCIIToUTF16("card_number_q3");
399  field.max_length = 4;
400  list_.push_back(new AutofillField(field, ASCIIToUTF16("number3")));
401
402  // For last credit card number input field it simply ignores the |max_length|
403  // attribute. So even having a very big number, does not conside it an invalid
404  // split for autofilling.
405  field.label = ASCIIToUTF16("Card Number");
406  field.name = ASCIIToUTF16("card_number_q4");
407  field.max_length = 20;
408  list_.push_back(new AutofillField(field, ASCIIToUTF16("number4")));
409
410  field.label = ASCIIToUTF16("Exp Month");
411  field.name = ASCIIToUTF16("ccmonth");
412  list_.push_back(new AutofillField(field, ASCIIToUTF16("month5")));
413
414  field.label = ASCIIToUTF16("Exp Year");
415  field.name = ASCIIToUTF16("ccyear");
416  list_.push_back(new AutofillField(field, ASCIIToUTF16("year6")));
417
418  Parse();
419  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
420  EXPECT_TRUE(ClassifyField());
421
422  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number1")) !=
423              field_type_map_.end());
424  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]);
425  EXPECT_EQ(0U, list_[0]->credit_card_number_offset());
426
427  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number2")) !=
428              field_type_map_.end());
429  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
430  EXPECT_EQ(4U, list_[1]->credit_card_number_offset());
431
432  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number3")) !=
433              field_type_map_.end());
434  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number3")]);
435  EXPECT_EQ(8U, list_[2]->credit_card_number_offset());
436
437  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number4")) !=
438              field_type_map_.end());
439  EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number4")]);
440  EXPECT_EQ(12U, list_[3]->credit_card_number_offset());
441
442  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month5")) !=
443              field_type_map_.end());
444  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month5")]);
445  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year6")) !=
446              field_type_map_.end());
447  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
448            field_type_map_[ASCIIToUTF16("year6")]);
449}
450
451TEST_F(CreditCardFieldTest, ParseCreditCardNumberWithInvalidSplit) {
452  FormFieldData field;
453  field.form_control_type = "text";
454
455  field.label = ASCIIToUTF16("Name on Card");
456  field.name = ASCIIToUTF16("name_on_card");
457  list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
458
459  field.label = ASCIIToUTF16("Card Number");
460  field.name = ASCIIToUTF16("card_number");
461  list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
462
463  field.label = ASCIIToUTF16("Not Card Number");
464  field.name = ASCIIToUTF16("not_card_number");
465  list_.push_back(new AutofillField(field, ASCIIToUTF16("number3")));
466
467  field.label = ASCIIToUTF16("Exp Month");
468  field.name = ASCIIToUTF16("ccmonth");
469  list_.push_back(new AutofillField(field, ASCIIToUTF16("month4")));
470
471  field.label = ASCIIToUTF16("Exp Year");
472  field.name = ASCIIToUTF16("ccyear");
473  list_.push_back(new AutofillField(field, ASCIIToUTF16("year5")));
474
475  Parse();
476  ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
477  EXPECT_TRUE(ClassifyField());
478
479  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("name1")) !=
480              field_type_map_.end());
481  EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
482  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number2")) ==
483              field_type_map_.end());
484  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number3")) ==
485              field_type_map_.end());
486  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month4")) !=
487              field_type_map_.end());
488  EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month4")]);
489  ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year5")) !=
490              field_type_map_.end());
491  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
492            field_type_map_[ASCIIToUTF16("year5")]);
493}
494
495}  // namespace autofill
496