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