address_field_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
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 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 60 ASSERT_TRUE( 61 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end()); 62 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]); 63} 64 65TEST_F(AddressFieldTest, ParseTwoLineAddress) { 66 FormFieldData field; 67 field.form_control_type = "text"; 68 69 field.label = ASCIIToUTF16("Address"); 70 field.name = ASCIIToUTF16("address"); 71 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1"))); 72 73 field.label = base::string16(); 74 field.name = base::string16(); 75 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2"))); 76 77 AutofillScanner scanner(list_.get()); 78 field_.reset(Parse(&scanner)); 79 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 80 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 81 ASSERT_TRUE( 82 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end()); 83 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]); 84 ASSERT_TRUE( 85 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end()); 86 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]); 87} 88 89TEST_F(AddressFieldTest, ParseThreeLineAddress) { 90 FormFieldData field; 91 field.form_control_type = "text"; 92 93 field.label = ASCIIToUTF16("Address Line1"); 94 field.name = ASCIIToUTF16("Address1"); 95 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1"))); 96 97 field.label = ASCIIToUTF16("Address Line2"); 98 field.name = ASCIIToUTF16("Address2"); 99 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2"))); 100 101 field.label = ASCIIToUTF16("Address Line3"); 102 field.name = ASCIIToUTF16("Address3"); 103 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr3"))); 104 105 AutofillScanner scanner(list_.get()); 106 field_.reset(Parse(&scanner)); 107 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 108 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 109 ASSERT_TRUE( 110 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end()); 111 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]); 112 ASSERT_TRUE( 113 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end()); 114 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]); 115 ASSERT_TRUE( 116 field_type_map_.find(ASCIIToUTF16("addr3")) == field_type_map_.end()); 117} 118 119TEST_F(AddressFieldTest, ParseStreetAddressFromTextArea) { 120 FormFieldData field; 121 field.form_control_type = "textarea"; 122 123 field.label = ASCIIToUTF16("Address"); 124 field.name = ASCIIToUTF16("address"); 125 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr"))); 126 127 AutofillScanner scanner(list_.get()); 128 field_.reset(Parse(&scanner)); 129 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 130 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 131 ASSERT_TRUE( 132 field_type_map_.find(ASCIIToUTF16("addr")) != field_type_map_.end()); 133 EXPECT_EQ(ADDRESS_HOME_STREET_ADDRESS, field_type_map_[ASCIIToUTF16("addr")]); 134} 135 136TEST_F(AddressFieldTest, ParseCity) { 137 FormFieldData field; 138 field.form_control_type = "text"; 139 140 field.label = ASCIIToUTF16("City"); 141 field.name = ASCIIToUTF16("city"); 142 list_.push_back(new AutofillField(field, ASCIIToUTF16("city1"))); 143 144 AutofillScanner scanner(list_.get()); 145 field_.reset(Parse(&scanner)); 146 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 147 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 148 ASSERT_TRUE( 149 field_type_map_.find(ASCIIToUTF16("city1")) != field_type_map_.end()); 150 EXPECT_EQ(ADDRESS_HOME_CITY, field_type_map_[ASCIIToUTF16("city1")]); 151} 152 153TEST_F(AddressFieldTest, ParseState) { 154 FormFieldData field; 155 field.form_control_type = "text"; 156 157 field.label = ASCIIToUTF16("State"); 158 field.name = ASCIIToUTF16("state"); 159 list_.push_back(new AutofillField(field, ASCIIToUTF16("state1"))); 160 161 AutofillScanner scanner(list_.get()); 162 field_.reset(Parse(&scanner)); 163 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 164 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 165 ASSERT_TRUE( 166 field_type_map_.find(ASCIIToUTF16("state1")) != field_type_map_.end()); 167 EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state1")]); 168} 169 170TEST_F(AddressFieldTest, ParseZip) { 171 FormFieldData field; 172 field.form_control_type = "text"; 173 174 field.label = ASCIIToUTF16("Zip"); 175 field.name = ASCIIToUTF16("zip"); 176 list_.push_back(new AutofillField(field, ASCIIToUTF16("zip1"))); 177 178 AutofillScanner scanner(list_.get()); 179 field_.reset(Parse(&scanner)); 180 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 181 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 182 ASSERT_TRUE( 183 field_type_map_.find(ASCIIToUTF16("zip1")) != field_type_map_.end()); 184 EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip1")]); 185} 186 187TEST_F(AddressFieldTest, ParseStateAndZipOneLabel) { 188 FormFieldData field; 189 field.form_control_type = "text"; 190 191 field.label = ASCIIToUTF16("State/Province, Zip/Postal Code"); 192 field.name = ASCIIToUTF16("state"); 193 list_.push_back(new AutofillField(field, ASCIIToUTF16("state"))); 194 195 field.label = ASCIIToUTF16("State/Province, Zip/Postal Code"); 196 field.name = ASCIIToUTF16("zip"); 197 list_.push_back(new AutofillField(field, ASCIIToUTF16("zip"))); 198 199 AutofillScanner scanner(list_.get()); 200 field_.reset(Parse(&scanner)); 201 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 202 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 203 ASSERT_TRUE( 204 field_type_map_.find(ASCIIToUTF16("state")) != field_type_map_.end()); 205 EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state")]); 206 ASSERT_TRUE( 207 field_type_map_.find(ASCIIToUTF16("zip")) != field_type_map_.end()); 208 EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip")]); 209} 210 211TEST_F(AddressFieldTest, ParseCountry) { 212 FormFieldData field; 213 field.form_control_type = "text"; 214 215 field.label = ASCIIToUTF16("Country"); 216 field.name = ASCIIToUTF16("country"); 217 list_.push_back(new AutofillField(field, ASCIIToUTF16("country1"))); 218 219 AutofillScanner scanner(list_.get()); 220 field_.reset(Parse(&scanner)); 221 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 222 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 223 ASSERT_TRUE( 224 field_type_map_.find(ASCIIToUTF16("country1")) != field_type_map_.end()); 225 EXPECT_EQ(ADDRESS_HOME_COUNTRY, field_type_map_[ASCIIToUTF16("country1")]); 226} 227 228TEST_F(AddressFieldTest, ParseTwoLineAddressMissingLabel) { 229 FormFieldData field; 230 field.form_control_type = "text"; 231 232 field.label = ASCIIToUTF16("Address"); 233 field.name = ASCIIToUTF16("address"); 234 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1"))); 235 236 field.label = base::string16(); 237 field.name = ASCIIToUTF16("bogus"); 238 list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2"))); 239 240 AutofillScanner scanner(list_.get()); 241 field_.reset(Parse(&scanner)); 242 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 243 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 244 ASSERT_TRUE( 245 field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end()); 246 EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]); 247 ASSERT_TRUE( 248 field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end()); 249 EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]); 250} 251 252TEST_F(AddressFieldTest, ParseCompany) { 253 FormFieldData field; 254 field.form_control_type = "text"; 255 256 field.label = ASCIIToUTF16("Company"); 257 field.name = ASCIIToUTF16("company"); 258 list_.push_back(new AutofillField(field, ASCIIToUTF16("company1"))); 259 260 AutofillScanner scanner(list_.get()); 261 field_.reset(Parse(&scanner)); 262 ASSERT_NE(static_cast<AddressField*>(NULL), field_.get()); 263 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); 264 ASSERT_TRUE( 265 field_type_map_.find(ASCIIToUTF16("company1")) != field_type_map_.end()); 266 EXPECT_EQ(COMPANY_NAME, field_type_map_[ASCIIToUTF16("company1")]); 267} 268 269} // namespace autofill 270