| OLD | NEW |
| (Empty) |
| 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/memory/scoped_ptr.h" | |
| 6 #include "base/memory/scoped_vector.h" | |
| 7 #include "base/utf_string_conversions.h" | |
| 8 #include "chrome/browser/autofill/autofill_field.h" | |
| 9 #include "chrome/browser/autofill/autofill_scanner.h" | |
| 10 #include "chrome/browser/autofill/credit_card_field.h" | |
| 11 #include "components/autofill/common/form_field_data.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 | |
| 14 class CreditCardFieldTest : public testing::Test { | |
| 15 public: | |
| 16 CreditCardFieldTest() {} | |
| 17 | |
| 18 protected: | |
| 19 ScopedVector<const AutofillField> list_; | |
| 20 scoped_ptr<CreditCardField> field_; | |
| 21 FieldTypeMap field_type_map_; | |
| 22 | |
| 23 // Downcast for tests. | |
| 24 static CreditCardField* Parse(AutofillScanner* scanner) { | |
| 25 return static_cast<CreditCardField*>(CreditCardField::Parse(scanner)); | |
| 26 } | |
| 27 | |
| 28 private: | |
| 29 DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest); | |
| 30 }; | |
| 31 | |
| 32 TEST_F(CreditCardFieldTest, Empty) { | |
| 33 AutofillScanner scanner(list_.get()); | |
| 34 field_.reset(Parse(&scanner)); | |
| 35 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 36 } | |
| 37 | |
| 38 TEST_F(CreditCardFieldTest, NonParse) { | |
| 39 list_.push_back(new AutofillField); | |
| 40 AutofillScanner scanner(list_.get()); | |
| 41 field_.reset(Parse(&scanner)); | |
| 42 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 43 } | |
| 44 | |
| 45 TEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) { | |
| 46 FormFieldData field; | |
| 47 field.form_control_type = "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 | |
| 57 AutofillScanner scanner(list_.get()); | |
| 58 field_.reset(Parse(&scanner)); | |
| 59 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 60 } | |
| 61 | |
| 62 TEST_F(CreditCardFieldTest, ParseCreditCardNoDate) { | |
| 63 FormFieldData field; | |
| 64 field.form_control_type = "text"; | |
| 65 | |
| 66 field.label = ASCIIToUTF16("Card Number"); | |
| 67 field.name = ASCIIToUTF16("card_number"); | |
| 68 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); | |
| 69 | |
| 70 AutofillScanner scanner(list_.get()); | |
| 71 field_.reset(Parse(&scanner)); | |
| 72 ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 73 } | |
| 74 | |
| 75 TEST_F(CreditCardFieldTest, ParseMiniumCreditCard) { | |
| 76 FormFieldData field; | |
| 77 field.form_control_type = "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 | |
| 91 AutofillScanner scanner(list_.get()); | |
| 92 field_.reset(Parse(&scanner)); | |
| 93 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 94 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 95 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( | |
| 99 field_type_map_.find(ASCIIToUTF16("month2")) != field_type_map_.end()); | |
| 100 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month2")]); | |
| 101 ASSERT_TRUE( | |
| 102 field_type_map_.find(ASCIIToUTF16("year3")) != field_type_map_.end()); | |
| 103 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 104 field_type_map_[ASCIIToUTF16("year3")]); | |
| 105 } | |
| 106 | |
| 107 TEST_F(CreditCardFieldTest, ParseFullCreditCard) { | |
| 108 FormFieldData field; | |
| 109 field.form_control_type = "text"; | |
| 110 | |
| 111 field.label = ASCIIToUTF16("Card Type"); | |
| 112 field.name = ASCIIToUTF16("card_type"); | |
| 113 list_.push_back(new AutofillField(field, ASCIIToUTF16("type"))); | |
| 114 | |
| 115 field.label = ASCIIToUTF16("Name on Card"); | |
| 116 field.name = ASCIIToUTF16("name_on_card"); | |
| 117 list_.push_back(new AutofillField(field, ASCIIToUTF16("name"))); | |
| 118 | |
| 119 field.label = ASCIIToUTF16("Card Number"); | |
| 120 field.name = ASCIIToUTF16("card_number"); | |
| 121 list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); | |
| 122 | |
| 123 field.label = ASCIIToUTF16("Exp Month"); | |
| 124 field.name = ASCIIToUTF16("ccmonth"); | |
| 125 list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); | |
| 126 | |
| 127 field.label = ASCIIToUTF16("Exp Year"); | |
| 128 field.name = ASCIIToUTF16("ccyear"); | |
| 129 list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); | |
| 130 | |
| 131 field.label = ASCIIToUTF16("Verification"); | |
| 132 field.name = ASCIIToUTF16("verification"); | |
| 133 list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc"))); | |
| 134 | |
| 135 AutofillScanner scanner(list_.get()); | |
| 136 field_.reset(Parse(&scanner)); | |
| 137 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 138 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 139 ASSERT_TRUE( | |
| 140 field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end()); | |
| 141 EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]); | |
| 142 ASSERT_TRUE( | |
| 143 field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end()); | |
| 144 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]); | |
| 145 ASSERT_TRUE( | |
| 146 field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end()); | |
| 147 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); | |
| 148 ASSERT_TRUE( | |
| 149 field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end()); | |
| 150 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); | |
| 151 ASSERT_TRUE( | |
| 152 field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end()); | |
| 153 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 154 field_type_map_[ASCIIToUTF16("year")]); | |
| 155 ASSERT_TRUE( | |
| 156 field_type_map_.find(ASCIIToUTF16("cvc")) != field_type_map_.end()); | |
| 157 EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE, | |
| 158 field_type_map_[ASCIIToUTF16("cvc")]); | |
| 159 } | |
| 160 | |
| 161 TEST_F(CreditCardFieldTest, ParseExpMonthYear) { | |
| 162 FormFieldData field; | |
| 163 field.form_control_type = "text"; | |
| 164 | |
| 165 field.label = ASCIIToUTF16("Name on Card"); | |
| 166 field.name = ASCIIToUTF16("name_on_card"); | |
| 167 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | |
| 168 | |
| 169 field.label = ASCIIToUTF16("Card Number"); | |
| 170 field.name = ASCIIToUTF16("card_number"); | |
| 171 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); | |
| 172 | |
| 173 field.label = ASCIIToUTF16("ExpDate Month / Year"); | |
| 174 field.name = ASCIIToUTF16("ExpDate"); | |
| 175 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); | |
| 176 | |
| 177 field.label = ASCIIToUTF16("ExpDate Month / Year"); | |
| 178 field.name = ASCIIToUTF16("ExpDate"); | |
| 179 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); | |
| 180 | |
| 181 AutofillScanner scanner(list_.get()); | |
| 182 field_.reset(Parse(&scanner)); | |
| 183 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 184 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 185 ASSERT_TRUE( | |
| 186 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); | |
| 187 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); | |
| 188 ASSERT_TRUE( | |
| 189 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); | |
| 190 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); | |
| 191 ASSERT_TRUE( | |
| 192 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); | |
| 193 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); | |
| 194 ASSERT_TRUE( | |
| 195 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); | |
| 196 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 197 field_type_map_[ASCIIToUTF16("year4")]); | |
| 198 } | |
| 199 | |
| 200 TEST_F(CreditCardFieldTest, ParseExpMonthYear2) { | |
| 201 FormFieldData field; | |
| 202 field.form_control_type = "text"; | |
| 203 | |
| 204 field.label = ASCIIToUTF16("Name on Card"); | |
| 205 field.name = ASCIIToUTF16("name_on_card"); | |
| 206 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | |
| 207 | |
| 208 field.label = ASCIIToUTF16("Card Number"); | |
| 209 field.name = ASCIIToUTF16("card_number"); | |
| 210 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); | |
| 211 | |
| 212 field.label = ASCIIToUTF16("Expiration date Month / Year"); | |
| 213 field.name = ASCIIToUTF16("ExpDate"); | |
| 214 list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); | |
| 215 | |
| 216 field.label = ASCIIToUTF16("Expiration date Month / Year"); | |
| 217 field.name = ASCIIToUTF16("ExpDate"); | |
| 218 list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); | |
| 219 | |
| 220 AutofillScanner scanner(list_.get()); | |
| 221 field_.reset(Parse(&scanner)); | |
| 222 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 223 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 224 ASSERT_TRUE( | |
| 225 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); | |
| 226 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); | |
| 227 ASSERT_TRUE( | |
| 228 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); | |
| 229 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); | |
| 230 ASSERT_TRUE( | |
| 231 field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); | |
| 232 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); | |
| 233 ASSERT_TRUE( | |
| 234 field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); | |
| 235 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, | |
| 236 field_type_map_[ASCIIToUTF16("year4")]); | |
| 237 } | |
| 238 | |
| 239 TEST_F(CreditCardFieldTest, ParseExpField) { | |
| 240 FormFieldData field; | |
| 241 field.form_control_type = "text"; | |
| 242 | |
| 243 field.label = ASCIIToUTF16("Name on Card"); | |
| 244 field.name = ASCIIToUTF16("name_on_card"); | |
| 245 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | |
| 246 | |
| 247 field.label = ASCIIToUTF16("Card Number"); | |
| 248 field.name = ASCIIToUTF16("card_number"); | |
| 249 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); | |
| 250 | |
| 251 field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)"); | |
| 252 field.name = ASCIIToUTF16("cc_exp"); | |
| 253 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3"))); | |
| 254 | |
| 255 AutofillScanner scanner(list_.get()); | |
| 256 field_.reset(Parse(&scanner)); | |
| 257 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 258 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 259 ASSERT_TRUE( | |
| 260 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); | |
| 261 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); | |
| 262 ASSERT_TRUE( | |
| 263 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); | |
| 264 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); | |
| 265 ASSERT_TRUE( | |
| 266 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end()); | |
| 267 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, | |
| 268 field_type_map_[ASCIIToUTF16("exp3")]); | |
| 269 } | |
| 270 | |
| 271 TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) { | |
| 272 FormFieldData field; | |
| 273 field.form_control_type = "text"; | |
| 274 | |
| 275 field.label = ASCIIToUTF16("Name on Card"); | |
| 276 field.name = ASCIIToUTF16("name_on_card"); | |
| 277 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | |
| 278 | |
| 279 field.label = ASCIIToUTF16("Card Number"); | |
| 280 field.name = ASCIIToUTF16("card_number"); | |
| 281 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); | |
| 282 | |
| 283 field.label = ASCIIToUTF16("Expiration Date (MM/YY)"); | |
| 284 field.name = ASCIIToUTF16("cc_exp"); | |
| 285 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3"))); | |
| 286 | |
| 287 AutofillScanner scanner(list_.get()); | |
| 288 field_.reset(Parse(&scanner)); | |
| 289 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 290 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 291 ASSERT_TRUE( | |
| 292 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); | |
| 293 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); | |
| 294 ASSERT_TRUE( | |
| 295 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); | |
| 296 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); | |
| 297 ASSERT_TRUE( | |
| 298 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end()); | |
| 299 EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, | |
| 300 field_type_map_[ASCIIToUTF16("exp3")]); | |
| 301 } | |
| 302 | |
| 303 TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) { | |
| 304 FormFieldData field; | |
| 305 field.form_control_type = "text"; | |
| 306 | |
| 307 field.label = ASCIIToUTF16("Name"); | |
| 308 field.name = ASCIIToUTF16("ccfullname"); | |
| 309 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); | |
| 310 | |
| 311 AutofillScanner scanner(list_.get()); | |
| 312 field_.reset(Parse(&scanner)); | |
| 313 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); | |
| 314 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
| 315 ASSERT_TRUE( | |
| 316 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); | |
| 317 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); | |
| 318 } | |
| OLD | NEW |