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