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