blob: 408647510d9c8897885ad0274d4b2a42b50adce3 [file] [log] [blame]
[email protected]7b37fbb2011-03-07 16:16:031// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]ec64212b2010-03-18 01:02:432// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <string>
6#include <vector>
7
[email protected]8bb746372012-04-26 04:20:128#include "base/memory/scoped_ptr.h"
[email protected]3ea1b182013-02-08 22:38:419#include "base/strings/string_number_conversions.h"
[email protected]e4b2fa32013-03-09 22:56:5610#include "components/autofill/browser/autofill_xml_parser.h"
11#include "components/autofill/browser/field_types.h"
[email protected]ec64212b2010-03-18 01:02:4312#include "testing/gtest/include/gtest/gtest.h"
[email protected]7b7a16b2010-06-03 04:08:1813#include "third_party/libjingle/source/talk/xmllite/xmlparser.h"
[email protected]ec64212b2010-03-18 01:02:4314
[email protected]e217c5632013-04-12 19:11:4815namespace autofill {
[email protected]ec64212b2010-03-18 01:02:4316namespace {
17
[email protected]663bd9e2011-03-21 01:07:0118TEST(AutofillQueryXmlParserTest, BasicQuery) {
[email protected]ec64212b2010-03-18 01:02:4319 // An XML string representing a basic query response.
20 std::string xml = "<autofillqueryresponse>"
21 "<field autofilltype=\"0\" />"
22 "<field autofilltype=\"1\" />"
23 "<field autofilltype=\"3\" />"
24 "<field autofilltype=\"2\" />"
[email protected]732acb02013-01-22 17:04:4525 "<field autofilltype=\"61\" defaultvalue=\"default\"/>"
[email protected]ec64212b2010-03-18 01:02:4326 "</autofillqueryresponse>";
27
[email protected]732acb02013-01-22 17:04:4528 // Create a vector of AutofillServerFieldInfos, to assign the parsed field
29 // types to.
30 std::vector<AutofillServerFieldInfo> field_infos;
[email protected]ec64212b2010-03-18 01:02:4331 UploadRequired upload_required = USE_UPLOAD_RATES;
[email protected]5f372f82011-01-31 23:20:5032 std::string experiment_id;
[email protected]ec64212b2010-03-18 01:02:4333
34 // Create a parser.
[email protected]732acb02013-01-22 17:04:4535 AutofillQueryXmlParser parse_handler(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:5036 &experiment_id);
[email protected]ec64212b2010-03-18 01:02:4337 buzz::XmlParser parser(&parse_handler);
38 parser.Parse(xml.c_str(), xml.length(), true);
39 EXPECT_TRUE(parse_handler.succeeded());
[email protected]5f372f82011-01-31 23:20:5040 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:4541 ASSERT_EQ(5U, field_infos.size());
42 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
43 EXPECT_EQ(UNKNOWN_TYPE, field_infos[1].field_type);
44 EXPECT_EQ(NAME_FIRST, field_infos[2].field_type);
45 EXPECT_EQ(EMPTY_TYPE, field_infos[3].field_type);
46 EXPECT_EQ("", field_infos[3].default_value);
47 EXPECT_EQ(FIELD_WITH_DEFAULT_VALUE, field_infos[4].field_type);
48 EXPECT_EQ("default", field_infos[4].default_value);
[email protected]5f372f82011-01-31 23:20:5049 EXPECT_EQ(std::string(), experiment_id);
[email protected]ec64212b2010-03-18 01:02:4350}
51
52// Test parsing the upload required attribute.
[email protected]663bd9e2011-03-21 01:07:0153TEST(AutofillQueryXmlParserTest, TestUploadRequired) {
[email protected]732acb02013-01-22 17:04:4554 std::vector<AutofillServerFieldInfo> field_infos;
[email protected]ec64212b2010-03-18 01:02:4355 UploadRequired upload_required = USE_UPLOAD_RATES;
[email protected]5f372f82011-01-31 23:20:5056 std::string experiment_id;
[email protected]ec64212b2010-03-18 01:02:4357
58 std::string xml = "<autofillqueryresponse uploadrequired=\"true\">"
59 "<field autofilltype=\"0\" />"
60 "</autofillqueryresponse>";
61
[email protected]663bd9e2011-03-21 01:07:0162 scoped_ptr<AutofillQueryXmlParser> parse_handler(
[email protected]732acb02013-01-22 17:04:4563 new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:5064 &experiment_id));
[email protected]ec64212b2010-03-18 01:02:4365 scoped_ptr<buzz::XmlParser> parser(new buzz::XmlParser(parse_handler.get()));
66 parser->Parse(xml.c_str(), xml.length(), true);
67 EXPECT_TRUE(parse_handler->succeeded());
68 EXPECT_EQ(UPLOAD_REQUIRED, upload_required);
[email protected]732acb02013-01-22 17:04:4569 ASSERT_EQ(1U, field_infos.size());
70 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:5071 EXPECT_EQ(std::string(), experiment_id);
[email protected]ec64212b2010-03-18 01:02:4372
[email protected]732acb02013-01-22 17:04:4573 field_infos.clear();
[email protected]ec64212b2010-03-18 01:02:4374 xml = "<autofillqueryresponse uploadrequired=\"false\">"
75 "<field autofilltype=\"0\" />"
76 "</autofillqueryresponse>";
77
[email protected]732acb02013-01-22 17:04:4578 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:5079 &experiment_id));
[email protected]ec64212b2010-03-18 01:02:4380 parser.reset(new buzz::XmlParser(parse_handler.get()));
81 parser->Parse(xml.c_str(), xml.length(), true);
82 EXPECT_TRUE(parse_handler->succeeded());
[email protected]5f372f82011-01-31 23:20:5083 EXPECT_EQ(UPLOAD_NOT_REQUIRED, upload_required);
[email protected]732acb02013-01-22 17:04:4584 ASSERT_EQ(1U, field_infos.size());
85 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:5086 EXPECT_EQ(std::string(), experiment_id);
[email protected]ec64212b2010-03-18 01:02:4387
[email protected]732acb02013-01-22 17:04:4588 field_infos.clear();
[email protected]ec64212b2010-03-18 01:02:4389 xml = "<autofillqueryresponse uploadrequired=\"bad_value\">"
90 "<field autofilltype=\"0\" />"
91 "</autofillqueryresponse>";
92
[email protected]732acb02013-01-22 17:04:4593 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:5094 &experiment_id));
[email protected]ec64212b2010-03-18 01:02:4395 parser.reset(new buzz::XmlParser(parse_handler.get()));
96 parser->Parse(xml.c_str(), xml.length(), true);
97 EXPECT_TRUE(parse_handler->succeeded());
[email protected]5f372f82011-01-31 23:20:5098 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:4599 ASSERT_EQ(1U, field_infos.size());
100 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:50101 EXPECT_EQ(std::string(), experiment_id);
102}
103
104// Test parsing the experiment id attribute
[email protected]663bd9e2011-03-21 01:07:01105TEST(AutofillQueryXmlParserTest, ParseExperimentId) {
[email protected]732acb02013-01-22 17:04:45106 std::vector<AutofillServerFieldInfo> field_infos;
[email protected]5f372f82011-01-31 23:20:50107 UploadRequired upload_required = USE_UPLOAD_RATES;
108 std::string experiment_id;
109
110 // When the attribute is missing, we should get back the default value -- the
111 // empty string.
112 std::string xml = "<autofillqueryresponse>"
113 "<field autofilltype=\"0\" />"
114 "</autofillqueryresponse>";
115
[email protected]663bd9e2011-03-21 01:07:01116 scoped_ptr<AutofillQueryXmlParser> parse_handler(
[email protected]732acb02013-01-22 17:04:45117 new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:50118 &experiment_id));
119 scoped_ptr<buzz::XmlParser> parser(new buzz::XmlParser(parse_handler.get()));
120 parser->Parse(xml.c_str(), xml.length(), true);
121 EXPECT_TRUE(parse_handler->succeeded());
122 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:45123 ASSERT_EQ(1U, field_infos.size());
124 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:50125 EXPECT_EQ(std::string(), experiment_id);
126
[email protected]732acb02013-01-22 17:04:45127 field_infos.clear();
[email protected]5f372f82011-01-31 23:20:50128
129 // When the attribute is present, make sure we parse it.
130 xml = "<autofillqueryresponse experimentid=\"FancyNewAlgorithm\">"
131 "<field autofilltype=\"0\" />"
132 "</autofillqueryresponse>";
133
[email protected]732acb02013-01-22 17:04:45134 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:50135 &experiment_id));
136 parser.reset(new buzz::XmlParser(parse_handler.get()));
137 parser->Parse(xml.c_str(), xml.length(), true);
138 EXPECT_TRUE(parse_handler->succeeded());
139 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:45140 ASSERT_EQ(1U, field_infos.size());
141 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:50142 EXPECT_EQ(std::string("FancyNewAlgorithm"), experiment_id);
143
[email protected]732acb02013-01-22 17:04:45144 field_infos.clear();
[email protected]5f372f82011-01-31 23:20:50145
146 // Make sure that we can handle parsing both the upload required and the
147 // experiment id attribute together.
148 xml = "<autofillqueryresponse uploadrequired=\"false\""
149 " experimentid=\"ServerSmartyPants\">"
150 "<field autofilltype=\"0\" />"
151 "</autofillqueryresponse>";
152
[email protected]732acb02013-01-22 17:04:45153 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:50154 &experiment_id));
155 parser.reset(new buzz::XmlParser(parse_handler.get()));
156 parser->Parse(xml.c_str(), xml.length(), true);
157 EXPECT_TRUE(parse_handler->succeeded());
158 EXPECT_EQ(UPLOAD_NOT_REQUIRED, upload_required);
[email protected]732acb02013-01-22 17:04:45159 ASSERT_EQ(1U, field_infos.size());
160 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:50161 EXPECT_EQ(std::string("ServerSmartyPants"), experiment_id);
[email protected]ec64212b2010-03-18 01:02:43162}
163
[email protected]e899b962013-01-18 20:52:08164// Test XML response with autofill_flow information.
165TEST(AutofillQueryXmlParserTest, ParseAutofillFlow) {
[email protected]732acb02013-01-22 17:04:45166 std::vector<AutofillServerFieldInfo> field_infos;
[email protected]e899b962013-01-18 20:52:08167 UploadRequired upload_required = USE_UPLOAD_RATES;
168 std::string experiment_id;
169
170 std::string xml = "<autofillqueryresponse>"
171 "<field autofilltype=\"55\"/>"
[email protected]7c5935d2013-01-24 19:11:43172 "<autofill_flow page_no=\"1\" total_pages=\"10\">"
173 "<page_advance_button id=\"foo\"/>"
174 "</autofill_flow>"
[email protected]e899b962013-01-18 20:52:08175 "</autofillqueryresponse>";
176
177 scoped_ptr<AutofillQueryXmlParser> parse_handler(
[email protected]732acb02013-01-22 17:04:45178 new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]e899b962013-01-18 20:52:08179 &experiment_id));
180 scoped_ptr<buzz::XmlParser> parser(new buzz::XmlParser(parse_handler.get()));
181 parser->Parse(xml.c_str(), xml.length(), true);
182 EXPECT_TRUE(parse_handler->succeeded());
[email protected]732acb02013-01-22 17:04:45183 EXPECT_EQ(1U, field_infos.size());
[email protected]e899b962013-01-18 20:52:08184 EXPECT_EQ(1, parse_handler->current_page_number());
185 EXPECT_EQ(10, parse_handler->total_pages());
[email protected]7c5935d2013-01-24 19:11:43186 EXPECT_EQ("foo", parse_handler->proceed_element_descriptor()->descriptor);
187 EXPECT_EQ(autofill::WebElementDescriptor::ID,
188 parse_handler->proceed_element_descriptor()->retrieval_method);
189
190 // Clear |field_infos| for the next test;
191 field_infos.clear();
192
193 // Test css_selector as page_advance_button.
194 xml = "<autofillqueryresponse>"
195 "<field autofilltype=\"55\"/>"
196 "<autofill_flow page_no=\"1\" total_pages=\"10\">"
197 "<page_advance_button css_selector=\"[name=&quot;foo&quot;]\"/>"
198 "</autofill_flow>"
199 "</autofillqueryresponse>";
200
201 parse_handler.reset(new AutofillQueryXmlParser(&field_infos,
202 &upload_required,
203 &experiment_id));
204 parser.reset(new buzz::XmlParser(parse_handler.get()));
205 parser->Parse(xml.c_str(), xml.length(), true);
206 EXPECT_TRUE(parse_handler->succeeded());
207 EXPECT_EQ(1U, field_infos.size());
208 EXPECT_EQ(1, parse_handler->current_page_number());
209 EXPECT_EQ(10, parse_handler->total_pages());
210 EXPECT_EQ("[name=\"foo\"]",
211 parse_handler->proceed_element_descriptor()->descriptor);
212 EXPECT_EQ(autofill::WebElementDescriptor::CSS_SELECTOR,
213 parse_handler->proceed_element_descriptor()->retrieval_method);
214
215 // Clear |field_infos| for the next test;
216 field_infos.clear();
217
218 // Test first attribute is always the one set.
219 xml = "<autofillqueryresponse>"
220 "<field autofilltype=\"55\"/>"
221 "<autofill_flow page_no=\"1\" total_pages=\"10\">"
222 "<page_advance_button css_selector=\"[name=&quot;foo&quot;]\""
223 " id=\"foo\"/>"
224 "</autofill_flow>"
225 "</autofillqueryresponse>";
226
227 parse_handler.reset(new AutofillQueryXmlParser(&field_infos,
228 &upload_required,
229 &experiment_id));
230 parser.reset(new buzz::XmlParser(parse_handler.get()));
231 parser->Parse(xml.c_str(), xml.length(), true);
232 EXPECT_TRUE(parse_handler->succeeded());
233 EXPECT_EQ(1U, field_infos.size());
234 EXPECT_EQ(1, parse_handler->current_page_number());
235 EXPECT_EQ(10, parse_handler->total_pages());
236 EXPECT_EQ("[name=\"foo\"]",
237 parse_handler->proceed_element_descriptor()->descriptor);
238 EXPECT_EQ(autofill::WebElementDescriptor::CSS_SELECTOR,
239 parse_handler->proceed_element_descriptor()->retrieval_method);
[email protected]e899b962013-01-18 20:52:08240}
241
[email protected]ec64212b2010-03-18 01:02:43242// Test badly formed XML queries.
[email protected]663bd9e2011-03-21 01:07:01243TEST(AutofillQueryXmlParserTest, ParseErrors) {
[email protected]732acb02013-01-22 17:04:45244 std::vector<AutofillServerFieldInfo> field_infos;
[email protected]ec64212b2010-03-18 01:02:43245 UploadRequired upload_required = USE_UPLOAD_RATES;
[email protected]5f372f82011-01-31 23:20:50246 std::string experiment_id;
[email protected]ec64212b2010-03-18 01:02:43247
[email protected]663bd9e2011-03-21 01:07:01248 // Test no Autofill type.
[email protected]ec64212b2010-03-18 01:02:43249 std::string xml = "<autofillqueryresponse>"
250 "<field/>"
251 "</autofillqueryresponse>";
252
[email protected]663bd9e2011-03-21 01:07:01253 scoped_ptr<AutofillQueryXmlParser> parse_handler(
[email protected]732acb02013-01-22 17:04:45254 new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:50255 &experiment_id));
[email protected]ec64212b2010-03-18 01:02:43256 scoped_ptr<buzz::XmlParser> parser(new buzz::XmlParser(parse_handler.get()));
257 parser->Parse(xml.c_str(), xml.length(), true);
258 EXPECT_FALSE(parse_handler->succeeded());
[email protected]5f372f82011-01-31 23:20:50259 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:45260 EXPECT_EQ(0U, field_infos.size());
[email protected]5f372f82011-01-31 23:20:50261 EXPECT_EQ(std::string(), experiment_id);
[email protected]ec64212b2010-03-18 01:02:43262
[email protected]663bd9e2011-03-21 01:07:01263 // Test an incorrect Autofill type.
[email protected]ec64212b2010-03-18 01:02:43264 xml = "<autofillqueryresponse>"
[email protected]732acb02013-01-22 17:04:45265 "<field autofilltype=\"-1\"/>"
[email protected]ec64212b2010-03-18 01:02:43266 "</autofillqueryresponse>";
267
[email protected]732acb02013-01-22 17:04:45268 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:50269 &experiment_id));
[email protected]ec64212b2010-03-18 01:02:43270 parser.reset(new buzz::XmlParser(parse_handler.get()));
271 parser->Parse(xml.c_str(), xml.length(), true);
272 EXPECT_TRUE(parse_handler->succeeded());
[email protected]5f372f82011-01-31 23:20:50273 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:45274 ASSERT_EQ(1U, field_infos.size());
[email protected]7b37fbb2011-03-07 16:16:03275 // AutofillType was out of range and should be set to NO_SERVER_DATA.
[email protected]732acb02013-01-22 17:04:45276 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
277 EXPECT_EQ(std::string(), experiment_id);
278
279 // Test upper bound for the field type, MAX_VALID_FIELD_TYPE.
280 field_infos.clear();
281 xml = "<autofillqueryresponse><field autofilltype=\"" +
282 base::IntToString(MAX_VALID_FIELD_TYPE) + "\"/></autofillqueryresponse>";
283
284 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
285 &experiment_id));
286 parser.reset(new buzz::XmlParser(parse_handler.get()));
287 parser->Parse(xml.c_str(), xml.length(), true);
288 EXPECT_TRUE(parse_handler->succeeded());
289 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
290 ASSERT_EQ(1U, field_infos.size());
291 // AutofillType was out of range and should be set to NO_SERVER_DATA.
292 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:50293 EXPECT_EQ(std::string(), experiment_id);
[email protected]ec64212b2010-03-18 01:02:43294
[email protected]663bd9e2011-03-21 01:07:01295 // Test an incorrect Autofill type.
[email protected]732acb02013-01-22 17:04:45296 field_infos.clear();
[email protected]ec64212b2010-03-18 01:02:43297 xml = "<autofillqueryresponse>"
298 "<field autofilltype=\"No Type\"/>"
299 "</autofillqueryresponse>";
300
[email protected]732acb02013-01-22 17:04:45301 // Parse fails but an entry is still added to field_infos.
302 parse_handler.reset(new AutofillQueryXmlParser(&field_infos, &upload_required,
[email protected]5f372f82011-01-31 23:20:50303 &experiment_id));
[email protected]ec64212b2010-03-18 01:02:43304 parser.reset(new buzz::XmlParser(parse_handler.get()));
305 parser->Parse(xml.c_str(), xml.length(), true);
306 EXPECT_FALSE(parse_handler->succeeded());
[email protected]5f372f82011-01-31 23:20:50307 EXPECT_EQ(USE_UPLOAD_RATES, upload_required);
[email protected]732acb02013-01-22 17:04:45308 ASSERT_EQ(1U, field_infos.size());
309 EXPECT_EQ(NO_SERVER_DATA, field_infos[0].field_type);
[email protected]5f372f82011-01-31 23:20:50310 EXPECT_EQ(std::string(), experiment_id);
[email protected]ec64212b2010-03-18 01:02:43311}
312
[email protected]db163472010-04-02 22:01:20313// Test successfull upload response.
[email protected]663bd9e2011-03-21 01:07:01314TEST(AutofillUploadXmlParser, TestSuccessfulResponse) {
[email protected]db163472010-04-02 22:01:20315 std::string xml = "<autofilluploadresponse positiveuploadrate=\"0.5\" "
316 "negativeuploadrate=\"0.3\"/>";
317 double positive = 0;
318 double negative = 0;
[email protected]663bd9e2011-03-21 01:07:01319 AutofillUploadXmlParser parse_handler(&positive, &negative);
[email protected]db163472010-04-02 22:01:20320 buzz::XmlParser parser(&parse_handler);
321 parser.Parse(xml.c_str(), xml.length(), true);
322 EXPECT_TRUE(parse_handler.succeeded());
323 EXPECT_DOUBLE_EQ(0.5, positive);
324 EXPECT_DOUBLE_EQ(0.3, negative);
325}
326
327// Test failed upload response.
[email protected]663bd9e2011-03-21 01:07:01328TEST(AutofillUploadXmlParser, TestFailedResponse) {
[email protected]db163472010-04-02 22:01:20329 std::string xml = "<autofilluploadresponse positiveuploadrate=\"\" "
330 "negativeuploadrate=\"0.3\"/>";
331 double positive = 0;
332 double negative = 0;
[email protected]663bd9e2011-03-21 01:07:01333 scoped_ptr<AutofillUploadXmlParser> parse_handler(
334 new AutofillUploadXmlParser(&positive, &negative));
[email protected]db163472010-04-02 22:01:20335 scoped_ptr<buzz::XmlParser> parser(new buzz::XmlParser(parse_handler.get()));
336 parser->Parse(xml.c_str(), xml.length(), true);
337 EXPECT_TRUE(!parse_handler->succeeded());
338 EXPECT_DOUBLE_EQ(0, positive);
339 EXPECT_DOUBLE_EQ(0.3, negative); // Partially parsed.
340 negative = 0;
341
342 xml = "<autofilluploadresponse positiveuploadrate=\"0.5\" "
343 "negativeuploadrate=\"0.3\"";
[email protected]663bd9e2011-03-21 01:07:01344 parse_handler.reset(new AutofillUploadXmlParser(&positive, &negative));
[email protected]db163472010-04-02 22:01:20345 parser.reset(new buzz::XmlParser(parse_handler.get()));
346 parser->Parse(xml.c_str(), xml.length(), true);
347 EXPECT_TRUE(!parse_handler->succeeded());
348 EXPECT_DOUBLE_EQ(0, positive);
349 EXPECT_DOUBLE_EQ(0, negative);
350
351 xml = "bad data";
[email protected]663bd9e2011-03-21 01:07:01352 parse_handler.reset(new AutofillUploadXmlParser(&positive, &negative));
[email protected]db163472010-04-02 22:01:20353 parser.reset(new buzz::XmlParser(parse_handler.get()));
354 parser->Parse(xml.c_str(), xml.length(), true);
355 EXPECT_TRUE(!parse_handler->succeeded());
356 EXPECT_DOUBLE_EQ(0, positive);
357 EXPECT_DOUBLE_EQ(0, negative);
358
359 xml = "";
[email protected]663bd9e2011-03-21 01:07:01360 parse_handler.reset(new AutofillUploadXmlParser(&positive, &negative));
[email protected]db163472010-04-02 22:01:20361 parser.reset(new buzz::XmlParser(parse_handler.get()));
362 parser->Parse(xml.c_str(), xml.length(), true);
363 EXPECT_TRUE(!parse_handler->succeeded());
364 EXPECT_DOUBLE_EQ(0, positive);
365 EXPECT_DOUBLE_EQ(0, negative);
366}
367
[email protected]ec64212b2010-03-18 01:02:43368} // namespace
[email protected]e217c5632013-04-12 19:11:48369} // namespace autofill