Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(431)

Side by Side Diff: chrome/browser/autofill/form_structure_browsertest.cc

Issue 5280001: Autofill i18n: Develop a system for validating Autofill heuristics from HTML input (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 <vector>
6
7 #include "chrome/browser/autofill/autofill_manager.h"
8 #include "chrome/browser/autofill/form_structure.h"
9 #include "chrome/browser/tab_contents/tab_contents.h"
10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/test/in_process_browser_test.h"
12 #include "chrome/test/ui_test_utils.h"
13 #include "googleurl/src/gurl.h"
14
15 // Test class for verifying proper form structure as determined by AutoFill
16 // heuristics. After a test loads HTML content with a call to |NavigateToURL|
17 // the |AutoFillManager| associated with the tab contents is queried for the
18 // form structures that were loaded and parsed.
19 // These form structures are serialized to string form and compared with
20 // expected results.
21 class FormStructureBrowserTest : public InProcessBrowserTest {
22 public:
23 FormStructureBrowserTest() {}
24 virtual ~FormStructureBrowserTest() {}
25
26 protected:
27 // Returns a vector of form structure objects associated with the given
28 // |autofill_manager|.
29 const std::vector<FormStructure*>& GetFormStructures(
30 const AutoFillManager& autofill_manager);
31
32 // Serializes the given form structures in |forms| to string form.
33 const std::string FormStructuresToString(
34 const std::vector<FormStructure*>& forms);
35
36 private:
37 // A helper utility for converting an |AutoFillFieldType| to string form.
38 const std::string AutoFillFieldTypeToString(AutoFillFieldType type);
39
40 DISALLOW_COPY_AND_ASSIGN(FormStructureBrowserTest);
41 };
42
43 const std::vector<FormStructure*>& FormStructureBrowserTest::GetFormStructures(
44 const AutoFillManager& autofill_manager) {
45 return autofill_manager.form_structures_.get();
46 }
47
48 const std::string FormStructureBrowserTest::FormStructuresToString(
49 const std::vector<FormStructure*>& forms) {
50 std::string forms_string;
51 for (std::vector<FormStructure*>::const_iterator iter = forms.begin();
52 iter != forms.end();
53 ++iter) {
54 forms_string += (*iter)->source_url().spec();
55 forms_string += "\n";
56
57 for (std::vector<AutoFillField*>::const_iterator field_iter =
58 (*iter)->begin();
59 field_iter != (*iter)->end();
60 ++field_iter) {
61 if (!*field_iter)
Ilya Sherman 2010/11/23 00:45:24 nit: Would be nice to add a comment explaining why
dhollowa 2010/11/23 01:10:09 Done.
62 break;
63 forms_string += AutoFillFieldTypeToString((*field_iter)->type());
64 forms_string += "\n";
65 }
66 }
67 return forms_string;
68 }
69
70 const std::string FormStructureBrowserTest::AutoFillFieldTypeToString(
71 AutoFillFieldType type) {
72 switch (type) {
73 case NO_SERVER_DATA:
74 return "NO_SERVER_DATA";
75 case UNKNOWN_TYPE:
76 return "UNKNOWN_TYPE";
77 case EMPTY_TYPE:
78 return "EMPTY_TYPE";
79 case NAME_FIRST:
80 return "NAME_FIRST";
81 case NAME_MIDDLE:
82 return "NAME_MIDDLE";
83 case NAME_LAST:
84 return "NAME_LAST";
85 case NAME_MIDDLE_INITIAL:
86 return "NAME_MIDDLE_INITIAL";
87 case NAME_FULL:
88 return "NAME_FULL";
89 case NAME_SUFFIX:
90 return "NAME_SUFFIX";
91 case EMAIL_ADDRESS:
92 return "EMAIL_ADDRESS";
93 case PHONE_HOME_NUMBER:
94 return "PHONE_HOME_NUMBER";
95 case PHONE_HOME_CITY_CODE:
96 return "PHONE_HOME_CITY_CODE";
97 case PHONE_HOME_COUNTRY_CODE:
98 return "PHONE_HOME_COUNTRY_CODE";
99 case PHONE_HOME_CITY_AND_NUMBER:
100 return "PHONE_HOME_CITY_AND_NUMBER";
101 case PHONE_HOME_WHOLE_NUMBER:
102 return "PHONE_HOME_WHOLE_NUMBER";
103 case PHONE_FAX_NUMBER:
104 return "PHONE_FAX_NUMBER";
105 case PHONE_FAX_CITY_CODE:
106 return "PHONE_FAX_CITY_CODE";
107 case PHONE_FAX_COUNTRY_CODE:
108 return "PHONE_FAX_COUNTRY_CODE";
109 case PHONE_FAX_CITY_AND_NUMBER:
110 return "PHONE_FAX_CITY_AND_NUMBER";
111 case PHONE_FAX_WHOLE_NUMBER:
112 return "PHONE_FAX_WHOLE_NUMBER";
113 case ADDRESS_HOME_LINE1:
114 return "ADDRESS_HOME_LINE1";
115 case ADDRESS_HOME_LINE2:
116 return "ADDRESS_HOME_LINE2";
117 case ADDRESS_HOME_APT_NUM:
118 return "ADDRESS_HOME_APT_NUM";
119 case ADDRESS_HOME_CITY:
120 return "ADDRESS_HOME_CITY";
121 case ADDRESS_HOME_STATE:
122 return "ADDRESS_HOME_STATE";
123 case ADDRESS_HOME_ZIP:
124 return "ADDRESS_HOME_ZIP";
125 case ADDRESS_HOME_COUNTRY:
126 return "ADDRESS_HOME_COUNTRY";
127 case ADDRESS_BILLING_LINE1:
128 return "ADDRESS_BILLING_LINE1";
129 case ADDRESS_BILLING_LINE2:
130 return "ADDRESS_BILLING_LINE2";
131 case ADDRESS_BILLING_APT_NUM:
132 return "ADDRESS_BILLING_APT_NUM";
133 case ADDRESS_BILLING_CITY:
134 return "ADDRESS_BILLING_CITY";
135 case ADDRESS_BILLING_STATE:
136 return "ADDRESS_BILLING_STATE";
137 case ADDRESS_BILLING_ZIP:
138 return "ADDRESS_BILLING_ZIP";
139 case ADDRESS_BILLING_COUNTRY:
140 return "ADDRESS_BILLING_COUNTRY";
141 case CREDIT_CARD_NAME:
142 return "CREDIT_CARD_NAME";
143 case CREDIT_CARD_NUMBER:
144 return "CREDIT_CARD_NUMBER";
145 case CREDIT_CARD_EXP_MONTH:
146 return "CREDIT_CARD_EXP_MONTH";
147 case CREDIT_CARD_EXP_2_DIGIT_YEAR:
148 return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
149 case CREDIT_CARD_EXP_4_DIGIT_YEAR:
150 return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
151 case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
152 return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
153 case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
154 return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
155 case CREDIT_CARD_TYPE:
156 return "CREDIT_CARD_TYPE";
157 case CREDIT_CARD_VERIFICATION_CODE:
158 return "CREDIT_CARD_VERIFICATION_CODE";
159 case COMPANY_NAME:
160 return "COMPANY_NAME";
161 default:
162 NOTREACHED() << "Invalid AutoFillFieldType value.";
163 }
164
165 return std::string();
166 }
167
168 IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, BasicFormStructure) {
169 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
170 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
171 browser(), GURL("data:text/html;charset=utf-8,"
172 "<form action=\"http://www.google.com/\" method=\"POST\">"
173 "<label for=\"firstname\">First name:</label>"
174 " <input type=\"text\" id=\"firstname\"/><br />"
175 "<label for=\"lastname\">Last name:</label>"
176 " <input type=\"text\" id=\"lastname\" /><br />"
177 "<label for=\"address1\">Address line 1:</label>"
178 " <input type=\"text\" id=\"address1\" /><br />"
179 "<label for=\"address2\">Address line 2:</label>"
180 " <input type=\"text\" id=\"address2\" /><br />"
181 "<label for=\"city\">City:</label>"
182 " <input type=\"text\" id=\"city\" /><br />"
183 "</form>")));
184
185 ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(),
186 VIEW_ID_TAB_CONTAINER));
187 ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(),
188 VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
189
190 AutoFillManager* autofill_manager =
191 browser()->GetSelectedTabContents()->GetAutoFillManager();
192 ASSERT_NE(static_cast<AutoFillManager*>(NULL), autofill_manager);
193 std::vector<FormStructure*> forms = GetFormStructures(*autofill_manager);
194 std::string expected("data:text/html;charset=utf-8,"
195 "<form action=\"http://www.google.com/\" method=\"POST\"> "
Ilya Sherman 2010/11/23 00:45:24 nit: 80-col
dhollowa 2010/11/23 01:10:09 Done.
196 "<label for=\"firstname\">First name:</label>"
197 " <input type=\"text\" id=\"firstname\"/><br />"
198 "<label for=\"lastname\">Last name:</label>"
199 " <input type=\"text\" id=\"lastname\" /><br />"
200 "<label for=\"address1\">Address line 1:</label>"
201 " <input type=\"text\" id=\"address1\" /><br />"
202 "<label for=\"address2\">Address line 2:</label>"
203 " <input type=\"text\" id=\"address2\" /><br />"
204 "<label for=\"city\">City:</label>"
205 " <input type=\"text\" id=\"city\" /><br />"
206 "</form>\n"
207 "NAME_FIRST\n"
208 "NAME_LAST\n"
209 "ADDRESS_HOME_LINE1\n"
210 "ADDRESS_HOME_LINE2\n"
211 "ADDRESS_HOME_CITY\n");
212
213 EXPECT_EQ(expected, FormStructureBrowserTest::FormStructuresToString(forms));
214 EXPECT_EQ(1UL, forms.size());
Ilya Sherman 2010/11/23 00:45:24 nit: this seems unnecessary given the string compa
dhollowa 2010/11/23 01:10:09 Done.
215 }
OLDNEW
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698