phone_field_unittest.cc revision dc0f95d653279beabeb9817299e2902918ba123e
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/scoped_ptr.h" 6#include "base/scoped_vector.h" 7#include "base/utf_string_conversions.h" 8#include "chrome/browser/autofill/phone_field.h" 9#include "testing/gtest/include/gtest/gtest.h" 10#include "webkit/glue/form_field.h" 11 12namespace { 13 14class PhoneFieldTest : public testing::Test { 15 public: 16 PhoneFieldTest() {} 17 18 protected: 19 ScopedVector<AutofillField> list_; 20 scoped_ptr<PhoneField> field_; 21 FieldTypeMap field_type_map_; 22 std::vector<AutofillField*>::const_iterator iter_; 23 24 private: 25 DISALLOW_COPY_AND_ASSIGN(PhoneFieldTest); 26}; 27 28TEST_F(PhoneFieldTest, Empty) { 29 list_.push_back(NULL); 30 iter_ = list_.begin(); 31 field_.reset(PhoneField::Parse(&iter_, false)); 32 ASSERT_EQ(static_cast<PhoneField*>(NULL), field_.get()); 33} 34 35TEST_F(PhoneFieldTest, NonParse) { 36 list_.push_back(new AutofillField); 37 list_.push_back(NULL); 38 iter_ = list_.begin(); 39 field_.reset(PhoneField::Parse(&iter_, false)); 40 ASSERT_EQ(static_cast<PhoneField*>(NULL), field_.get()); 41} 42 43TEST_F(PhoneFieldTest, ParseOneLinePhone) { 44 list_.push_back( 45 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 46 ASCIIToUTF16("phone"), 47 string16(), 48 ASCIIToUTF16("text"), 49 0, 50 false), 51 ASCIIToUTF16("phone1"))); 52 list_.push_back(NULL); 53 iter_ = list_.begin(); 54 field_.reset(PhoneField::Parse(&iter_, false)); 55 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 56 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 57 ASSERT_TRUE( 58 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 59 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 60} 61 62TEST_F(PhoneFieldTest, ParseOneLinePhoneEcml) { 63 list_.push_back( 64 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 65 ASCIIToUTF16(kEcmlShipToPhone), 66 string16(), 67 ASCIIToUTF16("text"), 68 0, 69 false), 70 ASCIIToUTF16("phone1"))); 71 list_.push_back(NULL); 72 iter_ = list_.begin(); 73 field_.reset(PhoneField::Parse(&iter_, true)); 74 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 75 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 76 ASSERT_TRUE( 77 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 78 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 79} 80 81TEST_F(PhoneFieldTest, ParseTwoLinePhone) { 82 list_.push_back( 83 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Area Code"), 84 ASCIIToUTF16("area code"), 85 string16(), 86 ASCIIToUTF16("text"), 87 0, 88 false), 89 ASCIIToUTF16("areacode1"))); 90 list_.push_back( 91 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 92 ASCIIToUTF16("phone"), 93 string16(), 94 ASCIIToUTF16("text"), 95 0, 96 false), 97 ASCIIToUTF16("phone1"))); 98 list_.push_back(NULL); 99 iter_ = list_.begin(); 100 field_.reset(PhoneField::Parse(&iter_, false)); 101 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 102 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 103 ASSERT_TRUE( 104 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 105 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 106 ASSERT_TRUE( 107 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 108 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 109} 110 111TEST_F(PhoneFieldTest, ParseTwoLinePhoneEcmlShipTo) { 112 list_.push_back( 113 new AutofillField( 114 webkit_glue::FormField(ASCIIToUTF16("Area Code"), 115 ASCIIToUTF16(kEcmlShipToPostalCode), 116 string16(), 117 ASCIIToUTF16("text"), 118 0, 119 false), 120 ASCIIToUTF16("areacode1"))); 121 list_.push_back( 122 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 123 ASCIIToUTF16(kEcmlShipToPhone), 124 string16(), 125 ASCIIToUTF16("text"), 126 0, 127 false), 128 ASCIIToUTF16("phone1"))); 129 list_.push_back(NULL); 130 iter_ = list_.begin(); 131 field_.reset(PhoneField::Parse(&iter_, false)); 132 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 133 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 134 ASSERT_TRUE( 135 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 136 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 137 ASSERT_TRUE( 138 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 139 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 140} 141 142TEST_F(PhoneFieldTest, ParseTwoLinePhoneEcmlBillTo) { 143 list_.push_back( 144 new AutofillField( 145 webkit_glue::FormField(ASCIIToUTF16("Area Code"), 146 ASCIIToUTF16(kEcmlBillToPostalCode), 147 string16(), 148 ASCIIToUTF16("text"), 149 0, 150 false), 151 ASCIIToUTF16("areacode1"))); 152 list_.push_back( 153 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 154 ASCIIToUTF16(kEcmlBillToPhone), 155 string16(), 156 ASCIIToUTF16("text"), 157 0, 158 false), 159 ASCIIToUTF16("phone1"))); 160 list_.push_back(NULL); 161 iter_ = list_.begin(); 162 field_.reset(PhoneField::Parse(&iter_, false)); 163 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 164 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 165 ASSERT_TRUE( 166 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 167 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 168 ASSERT_TRUE( 169 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 170 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 171} 172 173TEST_F(PhoneFieldTest, ThreePartPhoneNumber) { 174 // Phone in format <field> - <field> - <field> could be either 175 // <area code> - <prefix> - <suffix>, or 176 // <country code> - <area code> - <phone>. The only distinguishing feature is 177 // size: <prefix> is no bigger than 3 characters, and <suffix> is no bigger 178 // than 4. 179 list_.push_back( 180 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone:"), 181 ASCIIToUTF16("dayphone1"), 182 string16(), 183 ASCIIToUTF16("text"), 184 0, 185 false), 186 ASCIIToUTF16("areacode1"))); 187 list_.push_back( 188 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("-"), 189 ASCIIToUTF16("dayphone2"), 190 string16(), 191 ASCIIToUTF16("text"), 192 3, 193 false), 194 ASCIIToUTF16("prefix1"))); 195 list_.push_back( 196 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("-"), 197 ASCIIToUTF16("dayphone3"), 198 string16(), 199 ASCIIToUTF16("text"), 200 4, 201 false), 202 ASCIIToUTF16("suffix1"))); 203 list_.push_back( 204 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("ext.:"), 205 ASCIIToUTF16("dayphone4"), 206 string16(), 207 ASCIIToUTF16("text"), 208 0, 209 false), 210 ASCIIToUTF16("ext1"))); 211 list_.push_back(NULL); 212 iter_ = list_.begin(); 213 field_.reset(PhoneField::Parse(&iter_, false)); 214 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 215 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 216 ASSERT_TRUE( 217 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 218 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 219 ASSERT_TRUE( 220 field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end()); 221 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]); 222 ASSERT_TRUE( 223 field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end()); 224 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]); 225} 226 227// This scenario of explicitly labeled "prefix" and "suffix" phone numbers 228// encountered in http://crbug.com/40694 with page 229// https://www.wrapables.com/jsp/Signup.jsp. 230TEST_F(PhoneFieldTest, ThreePartPhoneNumberPrefixSuffix) { 231 list_.push_back( 232 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Phone:"), 233 ASCIIToUTF16("area"), 234 string16(), 235 ASCIIToUTF16("text"), 236 0, 237 false), 238 ASCIIToUTF16("areacode1"))); 239 list_.push_back( 240 new AutofillField(webkit_glue::FormField(string16(), 241 ASCIIToUTF16("prefix"), 242 string16(), 243 ASCIIToUTF16("text"), 244 0, 245 false), 246 ASCIIToUTF16("prefix1"))); 247 list_.push_back( 248 new AutofillField(webkit_glue::FormField(string16(), 249 ASCIIToUTF16("suffix"), 250 string16(), 251 ASCIIToUTF16("text"), 252 0, 253 false), 254 ASCIIToUTF16("suffix1"))); 255 list_.push_back(NULL); 256 iter_ = list_.begin(); 257 field_.reset(PhoneField::Parse(&iter_, false)); 258 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 259 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 260 ASSERT_TRUE( 261 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 262 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 263 ASSERT_TRUE( 264 field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end()); 265 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]); 266 ASSERT_TRUE( 267 field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end()); 268 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]); 269} 270 271TEST_F(PhoneFieldTest, ParseOneLineFax) { 272 list_.push_back( 273 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Fax"), 274 ASCIIToUTF16("fax"), 275 string16(), 276 ASCIIToUTF16("text"), 277 0, 278 false), 279 ASCIIToUTF16("fax1"))); 280 list_.push_back(NULL); 281 iter_ = list_.begin(); 282 field_.reset(PhoneField::Parse(&iter_, false)); 283 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 284 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 285 ASSERT_TRUE( 286 field_type_map_.find(ASCIIToUTF16("fax1")) != field_type_map_.end()); 287 EXPECT_EQ(PHONE_FAX_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("fax1")]); 288} 289 290TEST_F(PhoneFieldTest, ParseTwoLineFax) { 291 list_.push_back( 292 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Area Code"), 293 ASCIIToUTF16("area code"), 294 string16(), 295 ASCIIToUTF16("text"), 296 0, 297 false), 298 ASCIIToUTF16("areacode1"))); 299 list_.push_back( 300 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Fax"), 301 ASCIIToUTF16("fax"), 302 string16(), 303 ASCIIToUTF16("text"), 304 0, 305 false), 306 ASCIIToUTF16("fax1"))); 307 list_.push_back(NULL); 308 iter_ = list_.begin(); 309 field_.reset(PhoneField::Parse(&iter_, false)); 310 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 311 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 312 ASSERT_TRUE( 313 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 314 // It should be FAX, based on the other phone in the group. 315 EXPECT_EQ(PHONE_FAX_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 316 ASSERT_TRUE( 317 field_type_map_.find(ASCIIToUTF16("fax1")) != field_type_map_.end()); 318 EXPECT_EQ(PHONE_FAX_NUMBER, field_type_map_[ASCIIToUTF16("fax1")]); 319} 320 321TEST_F(PhoneFieldTest, ThreePartFaxNumberPrefixSuffix) { 322 list_.push_back( 323 new AutofillField(webkit_glue::FormField(ASCIIToUTF16("Fax:"), 324 ASCIIToUTF16("area"), 325 string16(), 326 ASCIIToUTF16("text"), 327 0, 328 false), 329 ASCIIToUTF16("areacode1"))); 330 list_.push_back( 331 new AutofillField(webkit_glue::FormField(string16(), 332 ASCIIToUTF16("prefix"), 333 string16(), 334 ASCIIToUTF16("text"), 335 0, 336 false), 337 ASCIIToUTF16("prefix1"))); 338 list_.push_back( 339 new AutofillField(webkit_glue::FormField(string16(), 340 ASCIIToUTF16("suffix"), 341 string16(), 342 ASCIIToUTF16("text"), 343 0, 344 false), 345 ASCIIToUTF16("suffix1"))); 346 list_.push_back(NULL); 347 iter_ = list_.begin(); 348 field_.reset(PhoneField::Parse(&iter_, false)); 349 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 350 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 351 ASSERT_TRUE( 352 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 353 EXPECT_EQ(PHONE_FAX_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 354 ASSERT_TRUE( 355 field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end()); 356 EXPECT_EQ(PHONE_FAX_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]); 357 ASSERT_TRUE( 358 field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end()); 359 EXPECT_EQ(PHONE_FAX_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]); 360} 361 362} // namespace 363