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

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: Typo. 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 // The field list is NULL-terminated. Exit loop when at the end.
62 if (!*field_iter)
63 break;
64 forms_string += AutoFillFieldTypeToString((*field_iter)->type());
65 forms_string += "\n";
66 }
67 }
68 return forms_string;
69 }
70
71 const std::string FormStructureBrowserTest::AutoFillFieldTypeToString(
72 AutoFillFieldType type) {
73 switch (type) {
74 case NO_SERVER_DATA:
75 return "NO_SERVER_DATA";
76 case UNKNOWN_TYPE:
77 return "UNKNOWN_TYPE";
78 case EMPTY_TYPE:
79 return "EMPTY_TYPE";
80 case NAME_FIRST:
81 return "NAME_FIRST";
82 case NAME_MIDDLE:
83 return "NAME_MIDDLE";
84 case NAME_LAST:
85 return "NAME_LAST";
86 case NAME_MIDDLE_INITIAL:
87 return "NAME_MIDDLE_INITIAL";
88 case NAME_FULL:
89 return "NAME_FULL";
90 case NAME_SUFFIX:
91 return "NAME_SUFFIX";
92 case EMAIL_ADDRESS:
93 return "EMAIL_ADDRESS";
94 case PHONE_HOME_NUMBER:
95 return "PHONE_HOME_NUMBER";
96 case PHONE_HOME_CITY_CODE:
97 return "PHONE_HOME_CITY_CODE";
98 case PHONE_HOME_COUNTRY_CODE:
99 return "PHONE_HOME_COUNTRY_CODE";
100 case PHONE_HOME_CITY_AND_NUMBER:
101 return "PHONE_HOME_CITY_AND_NUMBER";
102 case PHONE_HOME_WHOLE_NUMBER:
103 return "PHONE_HOME_WHOLE_NUMBER";
104 case PHONE_FAX_NUMBER:
105 return "PHONE_FAX_NUMBER";
106 case PHONE_FAX_CITY_CODE:
107 return "PHONE_FAX_CITY_CODE";
108 case PHONE_FAX_COUNTRY_CODE:
109 return "PHONE_FAX_COUNTRY_CODE";
110 case PHONE_FAX_CITY_AND_NUMBER:
111 return "PHONE_FAX_CITY_AND_NUMBER";
112 case PHONE_FAX_WHOLE_NUMBER:
113 return "PHONE_FAX_WHOLE_NUMBER";
114 case ADDRESS_HOME_LINE1:
115 return "ADDRESS_HOME_LINE1";
116 case ADDRESS_HOME_LINE2:
117 return "ADDRESS_HOME_LINE2";
118 case ADDRESS_HOME_APT_NUM:
119 return "ADDRESS_HOME_APT_NUM";
120 case ADDRESS_HOME_CITY:
121 return "ADDRESS_HOME_CITY";
122 case ADDRESS_HOME_STATE:
123 return "ADDRESS_HOME_STATE";
124 case ADDRESS_HOME_ZIP:
125 return "ADDRESS_HOME_ZIP";
126 case ADDRESS_HOME_COUNTRY:
127 return "ADDRESS_HOME_COUNTRY";
128 case ADDRESS_BILLING_LINE1:
129 return "ADDRESS_BILLING_LINE1";
130 case ADDRESS_BILLING_LINE2:
131 return "ADDRESS_BILLING_LINE2";
132 case ADDRESS_BILLING_APT_NUM:
133 return "ADDRESS_BILLING_APT_NUM";
134 case ADDRESS_BILLING_CITY:
135 return "ADDRESS_BILLING_CITY";
136 case ADDRESS_BILLING_STATE:
137 return "ADDRESS_BILLING_STATE";
138 case ADDRESS_BILLING_ZIP:
139 return "ADDRESS_BILLING_ZIP";
140 case ADDRESS_BILLING_COUNTRY:
141 return "ADDRESS_BILLING_COUNTRY";
142 case CREDIT_CARD_NAME:
143 return "CREDIT_CARD_NAME";
144 case CREDIT_CARD_NUMBER:
145 return "CREDIT_CARD_NUMBER";
146 case CREDIT_CARD_EXP_MONTH:
147 return "CREDIT_CARD_EXP_MONTH";
148 case CREDIT_CARD_EXP_2_DIGIT_YEAR:
149 return "CREDIT_CARD_EXP_2_DIGIT_YEAR";
150 case CREDIT_CARD_EXP_4_DIGIT_YEAR:
151 return "CREDIT_CARD_EXP_4_DIGIT_YEAR";
152 case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
153 return "CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
154 case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
155 return "CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
156 case CREDIT_CARD_TYPE:
157 return "CREDIT_CARD_TYPE";
158 case CREDIT_CARD_VERIFICATION_CODE:
159 return "CREDIT_CARD_VERIFICATION_CODE";
160 case COMPANY_NAME:
161 return "COMPANY_NAME";
162 default:
163 NOTREACHED() << "Invalid AutoFillFieldType value.";
164 }
165
166 return std::string();
167 }
168
169 IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, BasicFormStructure) {
170 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
171 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
172 browser(), GURL("data:text/html;charset=utf-8,"
173 "<form action=\"http://www.google.com/\" method=\"POST\">"
174 "<label for=\"firstname\">First name:</label>"
175 " <input type=\"text\" id=\"firstname\"/><br />"
176 "<label for=\"lastname\">Last name:</label>"
177 " <input type=\"text\" id=\"lastname\" /><br />"
178 "<label for=\"address1\">Address line 1:</label>"
179 " <input type=\"text\" id=\"address1\" /><br />"
180 "<label for=\"address2\">Address line 2:</label>"
181 " <input type=\"text\" id=\"address2\" /><br />"
182 "<label for=\"city\">City:</label>"
183 " <input type=\"text\" id=\"city\" /><br />"
184 "</form>")));
185
186 ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(),
187 VIEW_ID_TAB_CONTAINER));
188 ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(),
189 VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
190
191 AutoFillManager* autofill_manager =
192 browser()->GetSelectedTabContents()->GetAutoFillManager();
193 ASSERT_NE(static_cast<AutoFillManager*>(NULL), autofill_manager);
194 std::vector<FormStructure*> forms = GetFormStructures(*autofill_manager);
195 std::string expected("data:text/html;charset=utf-8,"
196 "<form action=\"http://www.google.com/\""
197 " method=\"POST\">"
198 "<label for=\"firstname\">First name:</label>"
199 " <input type=\"text\" id=\"firstname\"/><br />"
200 "<label for=\"lastname\">Last name:</label>"
201 " <input type=\"text\" id=\"lastname\" /><br />"
202 "<label for=\"address1\">Address line 1:</label>"
203 " <input type=\"text\" id=\"address1\" /><br />"
204 "<label for=\"address2\">Address line 2:</label>"
205 " <input type=\"text\" id=\"address2\" /><br />"
206 "<label for=\"city\">City:</label>"
207 " <input type=\"text\" id=\"city\" /><br />"
208 "</form>\n"
209 "NAME_FIRST\n"
210 "NAME_LAST\n"
211 "ADDRESS_HOME_LINE1\n"
212 "ADDRESS_HOME_LINE2\n"
213 "ADDRESS_HOME_CITY\n");
214
215 EXPECT_EQ(expected, FormStructureBrowserTest::FormStructuresToString(forms));
216 }
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