Home | History | Annotate | Download | only in browser
      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/string16.h"
      8 #include "base/strings/utf_string_conversions.h"
      9 #include "components/autofill/core/browser/address_field.h"
     10 #include "components/autofill/core/browser/autofill_field.h"
     11 #include "components/autofill/core/browser/autofill_scanner.h"
     12 #include "components/autofill/core/common/form_field_data.h"
     13 #include "testing/gtest/include/gtest/gtest.h"
     14 
     15 namespace autofill {
     16 
     17 class AddressFieldTest : public testing::Test {
     18  public:
     19   AddressFieldTest() {}
     20 
     21  protected:
     22   ScopedVector<const AutofillField> list_;
     23   scoped_ptr<AddressField> field_;
     24   ServerFieldTypeMap field_type_map_;
     25 
     26   // Downcast for tests.
     27   static AddressField* Parse(AutofillScanner* scanner) {
     28     return static_cast<AddressField*>(AddressField::Parse(scanner));
     29   }
     30 
     31  private:
     32   DISALLOW_COPY_AND_ASSIGN(AddressFieldTest);
     33 };
     34 
     35 TEST_F(AddressFieldTest, Empty) {
     36   AutofillScanner scanner(list_.get());
     37   field_.reset(Parse(&scanner));
     38   ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
     39 }
     40 
     41 TEST_F(AddressFieldTest, NonParse) {
     42   list_.push_back(new AutofillField);
     43   AutofillScanner scanner(list_.get());
     44   field_.reset(Parse(&scanner));
     45   ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
     46 }
     47 
     48 TEST_F(AddressFieldTest, ParseOneLineAddress) {
     49   FormFieldData field;
     50   field.form_control_type = "text";
     51 
     52   field.label = ASCIIToUTF16("Address");
     53   field.name = ASCIIToUTF16("address");
     54   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
     55 
     56   AutofillScanner scanner(list_.get());
     57   field_.reset(Parse(&scanner));
     58   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
     59   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
     60   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
     61   ASSERT_TRUE(
     62       field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
     63   EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
     64 }
     65 
     66 TEST_F(AddressFieldTest, ParseOneLineAddressBilling) {
     67   FormFieldData field;
     68   field.form_control_type = "text";
     69 
     70   field.label = ASCIIToUTF16("Address");
     71   field.name = ASCIIToUTF16("billingAddress");
     72   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
     73 
     74   AutofillScanner scanner(list_.get());
     75   field_.reset(Parse(&scanner));
     76   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
     77   EXPECT_EQ(AddressField::kBillingAddress, field_->FindType());
     78   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
     79   ASSERT_TRUE(
     80       field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
     81   EXPECT_EQ(ADDRESS_BILLING_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
     82 }
     83 
     84 TEST_F(AddressFieldTest, ParseOneLineAddressShipping) {
     85   FormFieldData field;
     86   field.form_control_type = "text";
     87 
     88   field.label = ASCIIToUTF16("Address");
     89   field.name = ASCIIToUTF16("shippingAddress");
     90   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
     91 
     92   AutofillScanner scanner(list_.get());
     93   field_.reset(Parse(&scanner));
     94   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
     95   EXPECT_EQ(AddressField::kShippingAddress, field_->FindType());
     96   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
     97   ASSERT_TRUE(
     98       field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
     99   EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
    100 }
    101 
    102 TEST_F(AddressFieldTest, ParseTwoLineAddress) {
    103   FormFieldData field;
    104   field.form_control_type = "text";
    105 
    106   field.label = ASCIIToUTF16("Address");
    107   field.name = ASCIIToUTF16("address");
    108   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
    109 
    110   field.label = base::string16();
    111   field.name = base::string16();
    112   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
    113 
    114   AutofillScanner scanner(list_.get());
    115   field_.reset(Parse(&scanner));
    116   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    117   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    118   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    119   ASSERT_TRUE(
    120       field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
    121   EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
    122   ASSERT_TRUE(
    123       field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
    124   EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
    125 }
    126 
    127 TEST_F(AddressFieldTest, ParseThreeLineAddress) {
    128   FormFieldData field;
    129   field.form_control_type = "text";
    130 
    131   field.label = ASCIIToUTF16("Address Line1");
    132   field.name = ASCIIToUTF16("Address1");
    133   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
    134 
    135   field.label = ASCIIToUTF16("Address Line2");
    136   field.name = ASCIIToUTF16("Address2");
    137   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
    138 
    139   field.label = ASCIIToUTF16("Address Line3");
    140   field.name = ASCIIToUTF16("Address3");
    141   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr3")));
    142 
    143   AutofillScanner scanner(list_.get());
    144   field_.reset(Parse(&scanner));
    145   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    146   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    147   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    148   ASSERT_TRUE(
    149       field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
    150   EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
    151   ASSERT_TRUE(
    152       field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
    153   EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
    154   ASSERT_TRUE(
    155       field_type_map_.find(ASCIIToUTF16("addr3")) == field_type_map_.end());
    156 }
    157 
    158 TEST_F(AddressFieldTest, ParseCity) {
    159   FormFieldData field;
    160   field.form_control_type = "text";
    161 
    162   field.label = ASCIIToUTF16("City");
    163   field.name = ASCIIToUTF16("city");
    164   list_.push_back(new AutofillField(field, ASCIIToUTF16("city1")));
    165 
    166   AutofillScanner scanner(list_.get());
    167   field_.reset(Parse(&scanner));
    168   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    169   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    170   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    171   ASSERT_TRUE(
    172       field_type_map_.find(ASCIIToUTF16("city1")) != field_type_map_.end());
    173   EXPECT_EQ(ADDRESS_HOME_CITY, field_type_map_[ASCIIToUTF16("city1")]);
    174 }
    175 
    176 TEST_F(AddressFieldTest, ParseState) {
    177   FormFieldData field;
    178   field.form_control_type = "text";
    179 
    180   field.label = ASCIIToUTF16("State");
    181   field.name = ASCIIToUTF16("state");
    182   list_.push_back(new AutofillField(field, ASCIIToUTF16("state1")));
    183 
    184   AutofillScanner scanner(list_.get());
    185   field_.reset(Parse(&scanner));
    186   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    187   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    188   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    189   ASSERT_TRUE(
    190       field_type_map_.find(ASCIIToUTF16("state1")) != field_type_map_.end());
    191   EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state1")]);
    192 }
    193 
    194 TEST_F(AddressFieldTest, ParseZip) {
    195   FormFieldData field;
    196   field.form_control_type = "text";
    197 
    198   field.label = ASCIIToUTF16("Zip");
    199   field.name = ASCIIToUTF16("zip");
    200   list_.push_back(new AutofillField(field, ASCIIToUTF16("zip1")));
    201 
    202   AutofillScanner scanner(list_.get());
    203   field_.reset(Parse(&scanner));
    204   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    205   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    206   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    207   ASSERT_TRUE(
    208       field_type_map_.find(ASCIIToUTF16("zip1")) != field_type_map_.end());
    209   EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip1")]);
    210 }
    211 
    212 TEST_F(AddressFieldTest, ParseStateAndZipOneLabel) {
    213   FormFieldData field;
    214   field.form_control_type = "text";
    215 
    216   field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
    217   field.name = ASCIIToUTF16("state");
    218   list_.push_back(new AutofillField(field, ASCIIToUTF16("state")));
    219 
    220   field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
    221   field.name = ASCIIToUTF16("zip");
    222   list_.push_back(new AutofillField(field, ASCIIToUTF16("zip")));
    223 
    224   AutofillScanner scanner(list_.get());
    225   field_.reset(Parse(&scanner));
    226   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    227   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    228   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    229   ASSERT_TRUE(
    230       field_type_map_.find(ASCIIToUTF16("state")) != field_type_map_.end());
    231   EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state")]);
    232   ASSERT_TRUE(
    233       field_type_map_.find(ASCIIToUTF16("zip")) != field_type_map_.end());
    234   EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip")]);
    235 }
    236 
    237 TEST_F(AddressFieldTest, ParseCountry) {
    238   FormFieldData field;
    239   field.form_control_type = "text";
    240 
    241   field.label = ASCIIToUTF16("Country");
    242   field.name = ASCIIToUTF16("country");
    243   list_.push_back(new AutofillField(field, ASCIIToUTF16("country1")));
    244 
    245   AutofillScanner scanner(list_.get());
    246   field_.reset(Parse(&scanner));
    247   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    248   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    249   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    250   ASSERT_TRUE(
    251       field_type_map_.find(ASCIIToUTF16("country1")) != field_type_map_.end());
    252   EXPECT_EQ(ADDRESS_HOME_COUNTRY, field_type_map_[ASCIIToUTF16("country1")]);
    253 }
    254 
    255 TEST_F(AddressFieldTest, ParseTwoLineAddressMissingLabel) {
    256   FormFieldData field;
    257   field.form_control_type = "text";
    258 
    259   field.label = ASCIIToUTF16("Address");
    260   field.name = ASCIIToUTF16("address");
    261   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
    262 
    263   field.label = base::string16();
    264   field.name = ASCIIToUTF16("bogus");
    265   list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
    266 
    267   AutofillScanner scanner(list_.get());
    268   field_.reset(Parse(&scanner));
    269   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    270   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    271   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    272   ASSERT_TRUE(
    273       field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
    274   EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
    275   ASSERT_TRUE(
    276       field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
    277   EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
    278 }
    279 
    280 TEST_F(AddressFieldTest, ParseCompany) {
    281   FormFieldData field;
    282   field.form_control_type = "text";
    283 
    284   field.label = ASCIIToUTF16("Company");
    285   field.name = ASCIIToUTF16("company");
    286   list_.push_back(new AutofillField(field, ASCIIToUTF16("company1")));
    287 
    288   AutofillScanner scanner(list_.get());
    289   field_.reset(Parse(&scanner));
    290   ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
    291   EXPECT_EQ(AddressField::kGenericAddress, field_->FindType());
    292   ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
    293   ASSERT_TRUE(
    294       field_type_map_.find(ASCIIToUTF16("company1")) != field_type_map_.end());
    295   EXPECT_EQ(COMPANY_NAME, field_type_map_[ASCIIToUTF16("company1")]);
    296 }
    297 
    298 }  // namespace autofill
    299