address_field_unittest.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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 15namespace autofill { 16 17class 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 35TEST_F(AddressFieldTest, Empty) { 36 AutofillScanner scanner(list_.get()); 37 field_.reset(Parse(&scanner)); 38 ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get()); 39} 40 41TEST_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 48TEST_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 66TEST_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 84TEST_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 102TEST_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 127TEST_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 158TEST_F(AddressFieldTest, ParseStreetAddressFromTextArea) { 159 FormFieldData field; 160 field.form_control_type = "textarea"; 161 162 field.label = ASCIIToUTF16("Address"); 163 field.name = ASCIIToUTF16("address"); 164 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr"))); 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("addr")) != field_type_map_.end()); 173 // TODO(isherman): This should really be a field type that includes all the 174 // lines of the address. 175 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr")]); 176} 177 178TEST_F(AddressFieldTest, ParseCity) { 179 FormFieldData field; 180 field.form_control_type = "text"; 181 182 field.label = ASCIIToUTF16("City"); 183 field.name = ASCIIToUTF16("city"); 184 list_.push_back(new AutofillField(field, ASCIIToUTF16("city1"))); 185 186 AutofillScanner scanner(list_.get()); 187 field_.reset(Parse(&scanner)); 188 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 189 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 190 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 191 ASSERT_TRUE( 192 field_type_map_.find(ASCIIToUTF16("city1")) != field_type_map_.end()); 193 EXPECT_EQ(ADDRESS_HOME_CITY, field_type_map_[ASCIIToUTF16("city1")]); 194} 195 196TEST_F(AddressFieldTest, ParseState) { 197 FormFieldData field; 198 field.form_control_type = "text"; 199 200 field.label = ASCIIToUTF16("State"); 201 field.name = ASCIIToUTF16("state"); 202 list_.push_back(new AutofillField(field, ASCIIToUTF16("state1"))); 203 204 AutofillScanner scanner(list_.get()); 205 field_.reset(Parse(&scanner)); 206 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 207 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 208 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 209 ASSERT_TRUE( 210 field_type_map_.find(ASCIIToUTF16("state1")) != field_type_map_.end()); 211 EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state1")]); 212} 213 214TEST_F(AddressFieldTest, ParseZip) { 215 FormFieldData field; 216 field.form_control_type = "text"; 217 218 field.label = ASCIIToUTF16("Zip"); 219 field.name = ASCIIToUTF16("zip"); 220 list_.push_back(new AutofillField(field, ASCIIToUTF16("zip1"))); 221 222 AutofillScanner scanner(list_.get()); 223 field_.reset(Parse(&scanner)); 224 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 225 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 226 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 227 ASSERT_TRUE( 228 field_type_map_.find(ASCIIToUTF16("zip1")) != field_type_map_.end()); 229 EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip1")]); 230} 231 232TEST_F(AddressFieldTest, ParseStateAndZipOneLabel) { 233 FormFieldData field; 234 field.form_control_type = "text"; 235 236 field.label = ASCIIToUTF16("State/Province, Zip/Postal Code"); 237 field.name = ASCIIToUTF16("state"); 238 list_.push_back(new AutofillField(field, ASCIIToUTF16("state"))); 239 240 field.label = ASCIIToUTF16("State/Province, Zip/Postal Code"); 241 field.name = ASCIIToUTF16("zip"); 242 list_.push_back(new AutofillField(field, ASCIIToUTF16("zip"))); 243 244 AutofillScanner scanner(list_.get()); 245 field_.reset(Parse(&scanner)); 246 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 247 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 248 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 249 ASSERT_TRUE( 250 field_type_map_.find(ASCIIToUTF16("state")) != field_type_map_.end()); 251 EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state")]); 252 ASSERT_TRUE( 253 field_type_map_.find(ASCIIToUTF16("zip")) != field_type_map_.end()); 254 EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip")]); 255} 256 257TEST_F(AddressFieldTest, ParseCountry) { 258 FormFieldData field; 259 field.form_control_type = "text"; 260 261 field.label = ASCIIToUTF16("Country"); 262 field.name = ASCIIToUTF16("country"); 263 list_.push_back(new AutofillField(field, ASCIIToUTF16("country1"))); 264 265 AutofillScanner scanner(list_.get()); 266 field_.reset(Parse(&scanner)); 267 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 268 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 269 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 270 ASSERT_TRUE( 271 field_type_map_.find(ASCIIToUTF16("country1")) != field_type_map_.end()); 272 EXPECT_EQ(ADDRESS_HOME_COUNTRY, field_type_map_[ASCIIToUTF16("country1")]); 273} 274 275TEST_F(AddressFieldTest, ParseTwoLineAddressMissingLabel) { 276 FormFieldData field; 277 field.form_control_type = "text"; 278 279 field.label = ASCIIToUTF16("Address"); 280 field.name = ASCIIToUTF16("address"); 281 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1"))); 282 283 field.label = base::string16(); 284 field.name = ASCIIToUTF16("bogus"); 285 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2"))); 286 287 AutofillScanner scanner(list_.get()); 288 field_.reset(Parse(&scanner)); 289 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 290 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 291 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 292 ASSERT_TRUE( 293 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end()); 294 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]); 295 ASSERT_TRUE( 296 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end()); 297 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]); 298} 299 300TEST_F(AddressFieldTest, ParseCompany) { 301 FormFieldData field; 302 field.form_control_type = "text"; 303 304 field.label = ASCIIToUTF16("Company"); 305 field.name = ASCIIToUTF16("company"); 306 list_.push_back(new AutofillField(field, ASCIIToUTF16("company1"))); 307 308 AutofillScanner scanner(list_.get()); 309 field_.reset(Parse(&scanner)); 310 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 311 EXPECT_EQ(AddressField::kGenericAddress, field_->FindType()); 312 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 313 ASSERT_TRUE( 314 field_type_map_.find(ASCIIToUTF16("company1")) != field_type_map_.end()); 315 EXPECT_EQ(COMPANY_NAME, field_type_map_[ASCIIToUTF16("company1")]); 316} 317 318} // namespace autofill 319