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