OLD | NEW |
| (Empty) |
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/memory/scoped_ptr.h" | |
6 #include "base/memory/scoped_vector.h" | |
7 #include "base/utf_string_conversions.h" | |
8 #include "chrome/browser/autofill/autofill_field.h" | |
9 #include "chrome/browser/autofill/autofill_scanner.h" | |
10 #include "chrome/browser/autofill/phone_field.h" | |
11 #include "components/autofill/common/form_field_data.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 | |
14 class PhoneFieldTest : public testing::Test { | |
15 public: | |
16 PhoneFieldTest() {} | |
17 | |
18 protected: | |
19 ScopedVector<const AutofillField> list_; | |
20 scoped_ptr<PhoneField> field_; | |
21 FieldTypeMap field_type_map_; | |
22 | |
23 // Downcast for tests. | |
24 static PhoneField* Parse(AutofillScanner* scanner) { | |
25 return static_cast<PhoneField*>(PhoneField::Parse(scanner)); | |
26 } | |
27 | |
28 private: | |
29 DISALLOW_COPY_AND_ASSIGN(PhoneFieldTest); | |
30 }; | |
31 | |
32 TEST_F(PhoneFieldTest, Empty) { | |
33 AutofillScanner scanner(list_.get()); | |
34 field_.reset(Parse(&scanner)); | |
35 ASSERT_EQ(static_cast<PhoneField*>(NULL), field_.get()); | |
36 } | |
37 | |
38 TEST_F(PhoneFieldTest, NonParse) { | |
39 list_.push_back(new AutofillField); | |
40 AutofillScanner scanner(list_.get()); | |
41 field_.reset(Parse(&scanner)); | |
42 ASSERT_EQ(static_cast<PhoneField*>(NULL), field_.get()); | |
43 } | |
44 | |
45 TEST_F(PhoneFieldTest, ParseOneLinePhone) { | |
46 FormFieldData field; | |
47 field.form_control_type = "text"; | |
48 | |
49 field.label = ASCIIToUTF16("Phone"); | |
50 field.name = ASCIIToUTF16("phone"); | |
51 list_.push_back(new AutofillField(field, ASCIIToUTF16("phone1"))); | |
52 | |
53 AutofillScanner scanner(list_.get()); | |
54 field_.reset(Parse(&scanner)); | |
55 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); | |
56 ASSERT_TRUE(field_->ClassifyField(&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 | |
62 TEST_F(PhoneFieldTest, ParseTwoLinePhone) { | |
63 FormFieldData field; | |
64 field.form_control_type = "text"; | |
65 | |
66 field.label = ASCIIToUTF16("Area Code"); | |
67 field.name = ASCIIToUTF16("area code"); | |
68 list_.push_back(new AutofillField(field, ASCIIToUTF16("areacode1"))); | |
69 | |
70 field.label = ASCIIToUTF16("Phone"); | |
71 field.name = ASCIIToUTF16("phone"); | |
72 list_.push_back(new AutofillField(field, ASCIIToUTF16("phone2"))); | |
73 | |
74 AutofillScanner scanner(list_.get()); | |
75 field_.reset(Parse(&scanner)); | |
76 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); | |
77 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
78 ASSERT_TRUE( | |
79 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); | |
80 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); | |
81 ASSERT_TRUE( | |
82 field_type_map_.find(ASCIIToUTF16("phone2")) != field_type_map_.end()); | |
83 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone2")]); | |
84 } | |
85 | |
86 TEST_F(PhoneFieldTest, ThreePartPhoneNumber) { | |
87 // Phone in format <field> - <field> - <field> could be either | |
88 // <area code> - <prefix> - <suffix>, or | |
89 // <country code> - <area code> - <phone>. The only distinguishing feature is | |
90 // size: <prefix> is no bigger than 3 characters, and <suffix> is no bigger | |
91 // than 4. | |
92 FormFieldData field; | |
93 field.form_control_type = "text"; | |
94 | |
95 field.label = ASCIIToUTF16("Phone:"); | |
96 field.name = ASCIIToUTF16("dayphone1"); | |
97 field.max_length = 0; | |
98 list_.push_back(new AutofillField(field, ASCIIToUTF16("areacode1"))); | |
99 | |
100 field.label = ASCIIToUTF16("-"); | |
101 field.name = ASCIIToUTF16("dayphone2"); | |
102 field.max_length = 3; | |
103 list_.push_back(new AutofillField(field, ASCIIToUTF16("prefix2"))); | |
104 | |
105 field.label = ASCIIToUTF16("-"); | |
106 field.name = ASCIIToUTF16("dayphone3"); | |
107 field.max_length = 4; | |
108 list_.push_back(new AutofillField(field, ASCIIToUTF16("suffix3"))); | |
109 | |
110 field.label = ASCIIToUTF16("ext.:"); | |
111 field.name = ASCIIToUTF16("dayphone4"); | |
112 field.max_length = 0; | |
113 list_.push_back(new AutofillField(field, ASCIIToUTF16("ext4"))); | |
114 | |
115 AutofillScanner scanner(list_.get()); | |
116 field_.reset(Parse(&scanner)); | |
117 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); | |
118 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
119 ASSERT_TRUE( | |
120 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); | |
121 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); | |
122 ASSERT_TRUE( | |
123 field_type_map_.find(ASCIIToUTF16("prefix2")) != field_type_map_.end()); | |
124 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix2")]); | |
125 ASSERT_TRUE( | |
126 field_type_map_.find(ASCIIToUTF16("suffix3")) != field_type_map_.end()); | |
127 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix3")]); | |
128 EXPECT_TRUE( | |
129 field_type_map_.find(ASCIIToUTF16("ext4")) == field_type_map_.end()); | |
130 } | |
131 | |
132 // This scenario of explicitly labeled "prefix" and "suffix" phone numbers | |
133 // encountered in http://crbug.com/40694 with page | |
134 // https://www.wrapables.com/jsp/Signup.jsp. | |
135 TEST_F(PhoneFieldTest, ThreePartPhoneNumberPrefixSuffix) { | |
136 FormFieldData field; | |
137 field.form_control_type = "text"; | |
138 | |
139 field.label = ASCIIToUTF16("Phone:"); | |
140 field.name = ASCIIToUTF16("area"); | |
141 list_.push_back(new AutofillField(field, ASCIIToUTF16("areacode1"))); | |
142 | |
143 field.label = string16(); | |
144 field.name = ASCIIToUTF16("prefix"); | |
145 list_.push_back(new AutofillField(field, ASCIIToUTF16("prefix2"))); | |
146 | |
147 field.label = string16(); | |
148 field.name = ASCIIToUTF16("suffix"); | |
149 list_.push_back(new AutofillField(field, ASCIIToUTF16("suffix3"))); | |
150 | |
151 AutofillScanner scanner(list_.get()); | |
152 field_.reset(Parse(&scanner)); | |
153 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); | |
154 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
155 ASSERT_TRUE( | |
156 field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end()); | |
157 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]); | |
158 ASSERT_TRUE( | |
159 field_type_map_.find(ASCIIToUTF16("prefix2")) != field_type_map_.end()); | |
160 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix2")]); | |
161 ASSERT_TRUE( | |
162 field_type_map_.find(ASCIIToUTF16("suffix3")) != field_type_map_.end()); | |
163 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix3")]); | |
164 } | |
165 | |
166 TEST_F(PhoneFieldTest, ThreePartPhoneNumberPrefixSuffix2) { | |
167 FormFieldData field; | |
168 field.form_control_type = "text"; | |
169 | |
170 field.label = ASCIIToUTF16("("); | |
171 field.name = ASCIIToUTF16("phone1"); | |
172 field.max_length = 3; | |
173 list_.push_back(new AutofillField(field, ASCIIToUTF16("phone1"))); | |
174 | |
175 field.label = ASCIIToUTF16(")"); | |
176 field.name = ASCIIToUTF16("phone2"); | |
177 field.max_length = 3; | |
178 list_.push_back(new AutofillField(field, ASCIIToUTF16("phone2"))); | |
179 | |
180 field.label = string16(); | |
181 field.name = ASCIIToUTF16("phone3"); | |
182 field.max_length = 4; | |
183 list_.push_back(new AutofillField(field, ASCIIToUTF16("phone3"))); | |
184 | |
185 AutofillScanner scanner(list_.get()); | |
186 field_.reset(Parse(&scanner)); | |
187 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); | |
188 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
189 ASSERT_TRUE( | |
190 field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end()); | |
191 EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("phone1")]); | |
192 ASSERT_TRUE( | |
193 field_type_map_.find(ASCIIToUTF16("phone2")) != field_type_map_.end()); | |
194 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone2")]); | |
195 ASSERT_TRUE( | |
196 field_type_map_.find(ASCIIToUTF16("phone3")) != field_type_map_.end()); | |
197 EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone3")]); | |
198 } | |
199 | |
200 TEST_F(PhoneFieldTest, CountryAndCityAndPhoneNumber) { | |
201 // Phone in format <country code>:3 - <city and number>:10 | |
202 // The |maxlength| is considered, otherwise it's too broad. | |
203 FormFieldData field; | |
204 field.form_control_type = "text"; | |
205 | |
206 field.label = ASCIIToUTF16("Phone Number"); | |
207 field.name = ASCIIToUTF16("CountryCode"); | |
208 field.max_length = 3; | |
209 list_.push_back(new AutofillField(field, ASCIIToUTF16("country"))); | |
210 | |
211 field.label = ASCIIToUTF16("Phone Number"); | |
212 field.name = ASCIIToUTF16("PhoneNumber"); | |
213 field.max_length = 10; | |
214 list_.push_back(new AutofillField(field, ASCIIToUTF16("phone"))); | |
215 | |
216 AutofillScanner scanner(list_.get()); | |
217 field_.reset(Parse(&scanner)); | |
218 ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get()); | |
219 ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); | |
220 ASSERT_TRUE( | |
221 field_type_map_.find(ASCIIToUTF16("country")) != field_type_map_.end()); | |
222 EXPECT_EQ(PHONE_HOME_COUNTRY_CODE, field_type_map_[ASCIIToUTF16("country")]); | |
223 ASSERT_TRUE( | |
224 field_type_map_.find(ASCIIToUTF16("phone")) != field_type_map_.end()); | |
225 EXPECT_EQ(PHONE_HOME_CITY_AND_NUMBER, field_type_map_[ASCIIToUTF16("phone")]); | |
226 } | |
OLD | NEW |