Home | History | Annotate | Download | only in autofill
      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 
     13 namespace {
     14 
     15 class 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 
     29 TEST_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 
     36 TEST_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 
     44 TEST_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 
     67 TEST_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 
     82 TEST_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 
    124 TEST_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 
    168 TEST_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 
    232 TEST_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 
    299 TEST_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 
    354 TEST_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