blob: 28e8c9cb36c2a6e0cab7a1c1efe3f9d64707d349 [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]8f608c52011-03-30 16:16:318#include "chrome/browser/autofill/autofill_field.h"
[email protected]2a958552011-05-05 04:01:219#include "chrome/browser/autofill/autofill_scanner.h"
[email protected]224d21b82010-03-31 17:43:0110#include "chrome/browser/autofill/credit_card_field.h"
11#include "testing/gtest/include/gtest/gtest.h"
[email protected]b1438212010-04-03 00:30:5912#include "webkit/glue/form_field.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) {
25 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]eb4b8b42011-08-09 01:33:4646 webkit_glue::FormField field;
47 field.form_control_type = ASCIIToUTF16("text");
48
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]eb4b8b42011-08-09 01:33:4663 webkit_glue::FormField field;
64 field.form_control_type = ASCIIToUTF16("text");
65
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]eb4b8b42011-08-09 01:33:4676 webkit_glue::FormField field;
77 field.form_control_type = ASCIIToUTF16("text");
78
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]eb4b8b42011-08-09 01:33:46108 webkit_glue::FormField field;
109 field.form_control_type = ASCIIToUTF16("text");
110
111 field.label = ASCIIToUTF16("Name on Card");
112 field.name = ASCIIToUTF16("name_on_card");
113 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
114
115 field.label = ASCIIToUTF16("Card Number");
116 field.name = ASCIIToUTF16("card_number");
117 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
118
119 field.label = ASCIIToUTF16("Exp Month");
120 field.name = ASCIIToUTF16("ccmonth");
121 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
122
123 field.label = ASCIIToUTF16("Exp Year");
124 field.name = ASCIIToUTF16("ccyear");
125 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
126
127 field.label = ASCIIToUTF16("Verification");
128 field.name = ASCIIToUTF16("verification");
129 list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc5")));
130
[email protected]2a958552011-05-05 04:01:21131 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18132 field_.reset(Parse(&scanner));
[email protected]224d21b82010-03-31 17:43:01133 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46134 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]224d21b82010-03-31 17:43:01135 ASSERT_TRUE(
136 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
137 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
138 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46139 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
140 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]224d21b82010-03-31 17:43:01141 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46142 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
143 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]224d21b82010-03-31 17:43:01144 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46145 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]224d21b82010-03-31 17:43:01146 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46147 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]cea1d112010-07-01 00:57:33148 // We don't store CVV.
149 EXPECT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46150 field_type_map_.find(ASCIIToUTF16("cvc5")) == field_type_map_.end());
[email protected]224d21b82010-03-31 17:43:01151}
152
[email protected]3651cf82010-05-07 17:14:34153TEST_F(CreditCardFieldTest, ParseExpMonthYear) {
[email protected]eb4b8b42011-08-09 01:33:46154 webkit_glue::FormField field;
155 field.form_control_type = ASCIIToUTF16("text");
156
157 field.label = ASCIIToUTF16("Name on Card");
158 field.name = ASCIIToUTF16("name_on_card");
159 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
160
161 field.label = ASCIIToUTF16("Card Number");
162 field.name = ASCIIToUTF16("card_number");
163 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
164
165 field.label = ASCIIToUTF16("ExpDate Month / Year");
166 field.name = ASCIIToUTF16("ExpDate");
167 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
168
169 field.label = ASCIIToUTF16("ExpDate Month / Year");
170 field.name = ASCIIToUTF16("ExpDate");
171 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
172
[email protected]2a958552011-05-05 04:01:21173 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18174 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34175 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46176 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34177 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46178 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
179 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34180 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46181 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
182 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34183 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46184 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
185 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34186 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46187 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34188 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46189 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34190}
191
192TEST_F(CreditCardFieldTest, ParseExpMonthYear2) {
[email protected]eb4b8b42011-08-09 01:33:46193 webkit_glue::FormField field;
194 field.form_control_type = ASCIIToUTF16("text");
195
196 field.label = ASCIIToUTF16("Name on Card");
197 field.name = ASCIIToUTF16("name_on_card");
198 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
199
200 field.label = ASCIIToUTF16("Card Number");
201 field.name = ASCIIToUTF16("card_number");
202 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2")));
203
204 field.label = ASCIIToUTF16("Expiration date Month / Year");
205 field.name = ASCIIToUTF16("ExpDate");
206 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3")));
207
208 field.label = ASCIIToUTF16("Expiration date Month / Year");
209 field.name = ASCIIToUTF16("ExpDate");
210 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4")));
211
[email protected]2a958552011-05-05 04:01:21212 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18213 field_.reset(Parse(&scanner));
[email protected]3651cf82010-05-07 17:14:34214 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
[email protected]1a9d0de22011-05-19 23:42:46215 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
[email protected]3651cf82010-05-07 17:14:34216 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46217 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
218 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
[email protected]3651cf82010-05-07 17:14:34219 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46220 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end());
221 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]);
[email protected]3651cf82010-05-07 17:14:34222 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46223 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end());
224 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]);
[email protected]3651cf82010-05-07 17:14:34225 ASSERT_TRUE(
[email protected]eb4b8b42011-08-09 01:33:46226 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end());
[email protected]3651cf82010-05-07 17:14:34227 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR,
[email protected]eb4b8b42011-08-09 01:33:46228 field_type_map_[ASCIIToUTF16("year4")]);
[email protected]3651cf82010-05-07 17:14:34229}
[email protected]a23833182011-07-01 02:30:59230
231TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) {
[email protected]eb4b8b42011-08-09 01:33:46232 webkit_glue::FormField field;
233 field.form_control_type = ASCIIToUTF16("text");
234
235 field.label = ASCIIToUTF16("Name");
236 field.name = ASCIIToUTF16("ccfullname");
237 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1")));
238
[email protected]a23833182011-07-01 02:30:59239 AutofillScanner scanner(list_.get());
[email protected]194e46f32011-08-08 20:01:18240 field_.reset(Parse(&scanner));
[email protected]a23833182011-07-01 02:30:59241 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get());
242 ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
243 ASSERT_TRUE(
244 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end());
245 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]);
246}