phone_field_unittest.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1// Copyright (c) 2010 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 ASCIIToUTF16("phone1"))); 51 list_.push_back(NULL); 52 iter_ = list_.begin(); 53 field_.reset(PhoneField::Parse(&iter_, false)); 54 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 55 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 56 ASSERT_TRUE( 57 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 58 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 59} 60 61TEST_F(PhoneFieldTest, ParseOneLinePhoneEcml) { 62 list_.push_back( 63 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 64 ASCIIToUTF16(kEcmlShipToPhone), 65 string16(), 66 ASCIIToUTF16("text"), 67 0), 68 ASCIIToUTF16("phone1"))); 69 list_.push_back(NULL); 70 iter_ = list_.begin(); 71 field_.reset(PhoneField::Parse(&iter_, true)); 72 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 73 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 74 ASSERT_TRUE( 75 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 76 EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 77} 78 79TEST_F(PhoneFieldTest, ParseTwoLinePhone) { 80 list_.push_back( 81 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Area Code"), 82 ASCIIToUTF16("area code"), 83 string16(), 84 ASCIIToUTF16("text"), 85 0), 86 ASCIIToUTF16("areacode1"))); 87 list_.push_back( 88 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 89 ASCIIToUTF16("phone"), 90 string16(), 91 ASCIIToUTF16("text"), 92 0), 93 ASCIIToUTF16("phone1"))); 94 list_.push_back(NULL); 95 iter_ = list_.begin(); 96 field_.reset(PhoneField::Parse(&iter_, false)); 97 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 98 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 99 ASSERT_TRUE( 100 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 101 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 102 ASSERT_TRUE( 103 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 104 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 105} 106 107TEST_F(PhoneFieldTest, ParseTwoLinePhoneEcmlShipTo) { 108 list_.push_back( 109 new AutoFillField( 110 webkit_glue::FormField(ASCIIToUTF16("Area Code"), 111 ASCIIToUTF16(kEcmlShipToPostalCode), 112 string16(), 113 ASCIIToUTF16("text"), 114 0), 115 ASCIIToUTF16("areacode1"))); 116 list_.push_back( 117 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 118 ASCIIToUTF16(kEcmlShipToPhone), 119 string16(), 120 ASCIIToUTF16("text"), 121 0), 122 ASCIIToUTF16("phone1"))); 123 list_.push_back(NULL); 124 iter_ = list_.begin(); 125 field_.reset(PhoneField::Parse(&iter_, false)); 126 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 127 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 128 ASSERT_TRUE( 129 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 130 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 131 ASSERT_TRUE( 132 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 133 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 134} 135 136TEST_F(PhoneFieldTest, ParseTwoLinePhoneEcmlBillTo) { 137 list_.push_back( 138 new AutoFillField( 139 webkit_glue::FormField(ASCIIToUTF16("Area Code"), 140 ASCIIToUTF16(kEcmlBillToPostalCode), 141 string16(), 142 ASCIIToUTF16("text"), 143 0), 144 ASCIIToUTF16("areacode1"))); 145 list_.push_back( 146 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"), 147 ASCIIToUTF16(kEcmlBillToPhone), 148 string16(), 149 ASCIIToUTF16("text"), 150 0), 151 ASCIIToUTF16("phone1"))); 152 list_.push_back(NULL); 153 iter_ = list_.begin(); 154 field_.reset(PhoneField::Parse(&iter_, false)); 155 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 156 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 157 ASSERT_TRUE( 158 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 159 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 160 ASSERT_TRUE( 161 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); 162 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]); 163} 164 165TEST_F(PhoneFieldTest, ThreePartPhoneNumber) { 166 list_.push_back( 167 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone:"), 168 ASCIIToUTF16("dayphone1"), 169 string16(), 170 ASCIIToUTF16("text"), 171 0), 172 ASCIIToUTF16("areacode1"))); 173 list_.push_back( 174 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("-"), 175 ASCIIToUTF16("dayphone2"), 176 string16(), 177 ASCIIToUTF16("text"), 178 0), 179 ASCIIToUTF16("prefix1"))); 180 list_.push_back( 181 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("-"), 182 ASCIIToUTF16("dayphone3"), 183 string16(), 184 ASCIIToUTF16("text"), 185 0), 186 ASCIIToUTF16("suffix1"))); 187 list_.push_back( 188 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("ext.:"), 189 ASCIIToUTF16("dayphone4"), 190 string16(), 191 ASCIIToUTF16("text"), 192 0), 193 ASCIIToUTF16("ext1"))); 194 list_.push_back(NULL); 195 iter_ = list_.begin(); 196 field_.reset(PhoneField::Parse(&iter_, false)); 197 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 198 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 199 ASSERT_TRUE( 200 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 201 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 202 ASSERT_TRUE( 203 field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end()); 204 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]); 205 ASSERT_TRUE( 206 field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end()); 207 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]); 208} 209 210// This scenario of explicitly labeled "prefix" and "suffix" phone numbers 211// encountered in http://crbug.com/40694 with page 212// https://www.wrapables.com/jsp/Signup.jsp. 213TEST_F(PhoneFieldTest, ThreePartPhoneNumberPrefixSuffix) { 214 list_.push_back( 215 new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone:"), 216 ASCIIToUTF16("area"), 217 string16(), 218 ASCIIToUTF16("text"), 219 0), 220 ASCIIToUTF16("areacode1"))); 221 list_.push_back( 222 new AutoFillField(webkit_glue::FormField(string16(), 223 ASCIIToUTF16("prefix"), 224 string16(), 225 ASCIIToUTF16("text"), 226 0), 227 ASCIIToUTF16("prefix1"))); 228 list_.push_back( 229 new AutoFillField(webkit_glue::FormField(string16(), 230 ASCIIToUTF16("suffix"), 231 string16(), 232 ASCIIToUTF16("text"), 233 0), 234 ASCIIToUTF16("suffix1"))); 235 list_.push_back(NULL); 236 iter_ = list_.begin(); 237 field_.reset(PhoneField::Parse(&iter_, false)); 238 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); 239 ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_)); 240 ASSERT_TRUE( 241 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); 242 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); 243 ASSERT_TRUE( 244 field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end()); 245 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]); 246 ASSERT_TRUE( 247 field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end()); 248 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]); 249} 250 251} // namespace 252