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