| Index: components/autofill/core/browser/form_structure_unittest.cc
|
| diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
|
| index afec3f429f87af7a306c9a2780882ae4a5854458..73f146f9492136fc94bb14d06db76ddf00f2259c 100644
|
| --- a/components/autofill/core/browser/form_structure_unittest.cc
|
| +++ b/components/autofill/core/browser/form_structure_unittest.cc
|
| @@ -6,12 +6,14 @@
|
|
|
| #include "base/command_line.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/metrics/field_trial.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "components/autofill/core/common/autofill_switches.h"
|
| #include "components/autofill/core/common/form_data.h"
|
| #include "components/autofill/core/common/form_field_data.h"
|
| #include "components/rappor/test_rappor_service.h"
|
| +#include "components/variations/entropy_provider.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "url/gurl.h"
|
|
|
| @@ -42,14 +44,38 @@ std::ostream& operator<<(std::ostream& os, const FormData& form) {
|
|
|
| } // namespace content
|
|
|
| -class FormStructureTest {
|
| +class FormStructureTest : public testing::Test {
|
| public:
|
| static std::string Hash64Bit(const std::string& str) {
|
| return FormStructure::Hash64Bit(str);
|
| }
|
| +
|
| + void SetUp() override {
|
| + // By default this trial is enabled on tests.
|
| + EnableAutofillMetadataFieldTrial();
|
| + }
|
| +
|
| + protected:
|
| + void DisableAutofillMetadataFieldTrial() {
|
| + field_trial_list_.reset(NULL);
|
| + }
|
| +
|
| + private:
|
| + void EnableAutofillMetadataFieldTrial() {
|
| + // Clear the existing |field_trial_list_| to avoid firing a DCHECK.
|
| + field_trial_list_.reset(NULL);
|
| + field_trial_list_.reset(
|
| + new base::FieldTrialList(new metrics::SHA1EntropyProvider("foo")));
|
| + field_trial_ = base::FieldTrialList::CreateFieldTrial(
|
| + "AutofillFieldMetadata", "Enabled");
|
| + field_trial_->group();
|
| + }
|
| +
|
| + scoped_ptr<base::FieldTrialList> field_trial_list_;
|
| + scoped_refptr<base::FieldTrial> field_trial_;
|
| };
|
|
|
| -TEST(FormStructureTest, FieldCount) {
|
| +TEST_F(FormStructureTest, FieldCount) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -81,7 +107,7 @@ TEST(FormStructureTest, FieldCount) {
|
| EXPECT_EQ(4U, form_structure->field_count());
|
| }
|
|
|
| -TEST(FormStructureTest, AutofillCount) {
|
| +TEST_F(FormStructureTest, AutofillCount) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -134,7 +160,7 @@ TEST(FormStructureTest, AutofillCount) {
|
| EXPECT_EQ(4U, form_structure->autofill_count());
|
| }
|
|
|
| -TEST(FormStructureTest, SourceURL) {
|
| +TEST_F(FormStructureTest, SourceURL) {
|
| FormData form;
|
| form.origin = GURL("http://www.foo.com/");
|
| FormStructure form_structure(form);
|
| @@ -142,7 +168,7 @@ TEST(FormStructureTest, SourceURL) {
|
| EXPECT_EQ(form.origin, form_structure.source_url());
|
| }
|
|
|
| -TEST(FormStructureTest, IsAutofillable) {
|
| +TEST_F(FormStructureTest, IsAutofillable) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -206,7 +232,7 @@ TEST(FormStructureTest, IsAutofillable) {
|
| EXPECT_TRUE(form_structure->IsAutofillable());
|
| }
|
|
|
| -TEST(FormStructureTest, ShouldBeParsed) {
|
| +TEST_F(FormStructureTest, ShouldBeParsed) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -287,7 +313,7 @@ TEST(FormStructureTest, ShouldBeParsed) {
|
| EXPECT_FALSE(form_structure->ShouldBeParsed());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsContactInfo) {
|
| +TEST_F(FormStructureTest, HeuristicsContactInfo) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -355,7 +381,7 @@ TEST(FormStructureTest, HeuristicsContactInfo) {
|
| }
|
|
|
| // Verify that we can correctly process the |autocomplete| attribute.
|
| -TEST(FormStructureTest, HeuristicsAutocompleteAttribute) {
|
| +TEST_F(FormStructureTest, HeuristicsAutocompleteAttribute) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -395,7 +421,7 @@ TEST(FormStructureTest, HeuristicsAutocompleteAttribute) {
|
|
|
| // Verify that we can correctly process the 'autocomplete' attribute for phone
|
| // number types (especially phone prefixes and suffixes).
|
| -TEST(FormStructureTest, HeuristicsAutocompleteAttributePhoneTypes) {
|
| +TEST_F(FormStructureTest, HeuristicsAutocompleteAttributePhoneTypes) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -437,7 +463,7 @@ TEST(FormStructureTest, HeuristicsAutocompleteAttributePhoneTypes) {
|
|
|
| // If at least one field includes type hints in the 'autocomplete' attribute, we
|
| // should not try to apply any other heuristics.
|
| -TEST(FormStructureTest, AutocompleteAttributeOverridesOtherHeuristics) {
|
| +TEST_F(FormStructureTest, AutocompleteAttributeOverridesOtherHeuristics) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -488,7 +514,7 @@ TEST(FormStructureTest, AutocompleteAttributeOverridesOtherHeuristics) {
|
| // return true if the structure contains a password field, since there are
|
| // no local heuristics to depend upon in this case. Fields will still not be
|
| // considered autofillable though.
|
| -TEST(FormStructureTest, PasswordFormShouldBeCrowdsourced) {
|
| +TEST_F(FormStructureTest, PasswordFormShouldBeCrowdsourced) {
|
| FormData form;
|
|
|
| // Start with a regular contact form.
|
| @@ -520,7 +546,7 @@ TEST(FormStructureTest, PasswordFormShouldBeCrowdsourced) {
|
|
|
| // Verify that we can correctly process sections listed in the |autocomplete|
|
| // attribute.
|
| -TEST(FormStructureTest, HeuristicsAutocompleteAttributeWithSections) {
|
| +TEST_F(FormStructureTest, HeuristicsAutocompleteAttributeWithSections) {
|
| FormData form;
|
|
|
| FormFieldData field;
|
| @@ -583,7 +609,8 @@ TEST(FormStructureTest, HeuristicsAutocompleteAttributeWithSections) {
|
|
|
| // Verify that we can correctly process a degenerate section listed in the
|
| // |autocomplete| attribute.
|
| -TEST(FormStructureTest, HeuristicsAutocompleteAttributeWithSectionsDegenerate) {
|
| +TEST_F(FormStructureTest,
|
| + HeuristicsAutocompleteAttributeWithSectionsDegenerate) {
|
| FormData form;
|
|
|
| FormFieldData field;
|
| @@ -626,7 +653,7 @@ TEST(FormStructureTest, HeuristicsAutocompleteAttributeWithSectionsDegenerate) {
|
|
|
| // Verify that we can correctly process repeated sections listed in the
|
| // |autocomplete| attribute.
|
| -TEST(FormStructureTest, HeuristicsAutocompleteAttributeWithSectionsRepeated) {
|
| +TEST_F(FormStructureTest, HeuristicsAutocompleteAttributeWithSectionsRepeated) {
|
| FormData form;
|
|
|
| FormFieldData field;
|
| @@ -655,7 +682,7 @@ TEST(FormStructureTest, HeuristicsAutocompleteAttributeWithSectionsRepeated) {
|
|
|
| // Verify that we do not override the author-specified sections from a form with
|
| // local heuristics.
|
| -TEST(FormStructureTest, HeuristicsDontOverrideAutocompleteAttributeSections) {
|
| +TEST_F(FormStructureTest, HeuristicsDontOverrideAutocompleteAttributeSections) {
|
| FormData form;
|
|
|
| FormFieldData field;
|
| @@ -690,7 +717,7 @@ TEST(FormStructureTest, HeuristicsDontOverrideAutocompleteAttributeSections) {
|
| form_structure.field(3)->section());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsSample8) {
|
| +TEST_F(FormStructureTest, HeuristicsSample8) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -767,7 +794,7 @@ TEST(FormStructureTest, HeuristicsSample8) {
|
| EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(9)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsSample6) {
|
| +TEST_F(FormStructureTest, HeuristicsSample6) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -829,7 +856,7 @@ TEST(FormStructureTest, HeuristicsSample6) {
|
| // Tests a sequence of FormFields where only labels are supplied to heuristics
|
| // for matching. This works because FormFieldData labels are matched in the
|
| // case that input element ids (or |name| fields) are missing.
|
| -TEST(FormStructureTest, HeuristicsLabelsOnly) {
|
| +TEST_F(FormStructureTest, HeuristicsLabelsOnly) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -894,7 +921,7 @@ TEST(FormStructureTest, HeuristicsLabelsOnly) {
|
| EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(7)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsCreditCardInfo) {
|
| +TEST_F(FormStructureTest, HeuristicsCreditCardInfo) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -948,7 +975,7 @@ TEST(FormStructureTest, HeuristicsCreditCardInfo) {
|
| EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(5)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) {
|
| +TEST_F(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1010,7 +1037,7 @@ TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) {
|
| EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(6)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, ThreeAddressLines) {
|
| +TEST_F(FormStructureTest, ThreeAddressLines) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1050,7 +1077,7 @@ TEST(FormStructureTest, ThreeAddressLines) {
|
| }
|
|
|
| // Numbered address lines after line two are ignored.
|
| -TEST(FormStructureTest, SurplusAddressLinesIgnored) {
|
| +TEST_F(FormStructureTest, SurplusAddressLinesIgnored) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1093,7 +1120,7 @@ TEST(FormStructureTest, SurplusAddressLinesIgnored) {
|
| // test was written). We interpret this as address line 2. And the following
|
| // "Street address second line" we interpret as address line 3.
|
| // See http://crbug.com/48197 for details.
|
| -TEST(FormStructureTest, ThreeAddressLinesExpedia) {
|
| +TEST_F(FormStructureTest, ThreeAddressLinesExpedia) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1135,7 +1162,7 @@ TEST(FormStructureTest, ThreeAddressLinesExpedia) {
|
| // This example comes from ebay.com where the word "suite" appears in the label
|
| // and the name "address2" clearly indicates that this is the address line 2.
|
| // See http://crbug.com/48197 for details.
|
| -TEST(FormStructureTest, TwoAddressLinesEbay) {
|
| +TEST_F(FormStructureTest, TwoAddressLinesEbay) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1168,7 +1195,7 @@ TEST(FormStructureTest, TwoAddressLinesEbay) {
|
| EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(2)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsStateWithProvince) {
|
| +TEST_F(FormStructureTest, HeuristicsStateWithProvince) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1202,7 +1229,7 @@ TEST(FormStructureTest, HeuristicsStateWithProvince) {
|
| }
|
|
|
| // This example comes from lego.com's checkout page.
|
| -TEST(FormStructureTest, HeuristicsWithBilling) {
|
| +TEST_F(FormStructureTest, HeuristicsWithBilling) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1273,7 +1300,7 @@ TEST(FormStructureTest, HeuristicsWithBilling) {
|
| EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(10)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, ThreePartPhoneNumber) {
|
| +TEST_F(FormStructureTest, ThreePartPhoneNumber) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1320,7 +1347,7 @@ TEST(FormStructureTest, ThreePartPhoneNumber) {
|
| EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(3)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, HeuristicsInfernoCC) {
|
| +TEST_F(FormStructureTest, HeuristicsInfernoCC) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1368,7 +1395,7 @@ TEST(FormStructureTest, HeuristicsInfernoCC) {
|
| form_structure->field(4)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, CVCCodeClash) {
|
| +TEST_F(FormStructureTest, CVCCodeClash) {
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
|
|
| @@ -1423,7 +1450,7 @@ TEST(FormStructureTest, CVCCodeClash) {
|
| form_structure->field(5)->heuristic_type());
|
| }
|
|
|
| -TEST(FormStructureTest, EncodeQueryRequest) {
|
| +TEST_F(FormStructureTest, EncodeQueryRequest) {
|
| FormData form;
|
|
|
| FormFieldData field;
|
| @@ -1551,7 +1578,7 @@ TEST(FormStructureTest, EncodeQueryRequest) {
|
| EXPECT_EQ("", encoded_xml);
|
| }
|
|
|
| -TEST(FormStructureTest, EncodeUploadRequest) {
|
| +TEST_F(FormStructureTest, EncodeUploadRequest) {
|
| scoped_ptr<FormStructure> form_structure;
|
| std::vector<ServerFieldTypeSet> possible_field_types;
|
| FormData form;
|
| @@ -1728,7 +1755,7 @@ TEST(FormStructureTest, EncodeUploadRequest) {
|
| &encoded_xml));
|
| }
|
|
|
| -TEST(FormStructureTest, EncodeUploadRequestWithAutocomplete) {
|
| +TEST_F(FormStructureTest, EncodeUploadRequestWithAutocomplete) {
|
| scoped_ptr<FormStructure> form_structure;
|
| std::vector<ServerFieldTypeSet> possible_field_types;
|
| FormData form;
|
| @@ -1787,7 +1814,7 @@ TEST(FormStructureTest, EncodeUploadRequestWithAutocomplete) {
|
| encoded_xml);
|
| }
|
|
|
| -TEST(FormStructureTest, EncodeUploadRequestPartialMetadata) {
|
| +TEST_F(FormStructureTest, EncodeUploadRequestPartialMetadata) {
|
| scoped_ptr<FormStructure> form_structure;
|
| std::vector<ServerFieldTypeSet> possible_field_types;
|
| FormData form;
|
| @@ -1844,7 +1871,66 @@ TEST(FormStructureTest, EncodeUploadRequestPartialMetadata) {
|
| encoded_xml);
|
| }
|
|
|
| -TEST(FormStructureTest, EncodeFieldAssignments) {
|
| +// Sending field metadata to the server is disabled.
|
| +TEST_F(FormStructureTest, EncodeUploadRequest_DisabledMetadataTrial) {
|
| + DisableAutofillMetadataFieldTrial();
|
| +
|
| + scoped_ptr<FormStructure> form_structure;
|
| + std::vector<ServerFieldTypeSet> possible_field_types;
|
| + FormData form;
|
| + form_structure.reset(new FormStructure(form));
|
| + form_structure->DetermineHeuristicTypes();
|
| +
|
| + FormFieldData field;
|
| + field.form_control_type = "text";
|
| +
|
| + field.label = ASCIIToUTF16("First Name");
|
| + field.name = ASCIIToUTF16("firstname");
|
| + field.autocomplete_attribute = "given-name";
|
| + form.fields.push_back(field);
|
| + possible_field_types.push_back(ServerFieldTypeSet());
|
| + possible_field_types.back().insert(NAME_FIRST);
|
| +
|
| + field.label = ASCIIToUTF16("Last Name");
|
| + field.name = ASCIIToUTF16("lastname");
|
| + field.autocomplete_attribute = "family-name";
|
| + form.fields.push_back(field);
|
| + possible_field_types.push_back(ServerFieldTypeSet());
|
| + possible_field_types.back().insert(NAME_LAST);
|
| +
|
| + field.label = ASCIIToUTF16("Email");
|
| + field.name = ASCIIToUTF16("email");
|
| + field.form_control_type = "email";
|
| + field.autocomplete_attribute = "email";
|
| + form.fields.push_back(field);
|
| + possible_field_types.push_back(ServerFieldTypeSet());
|
| + possible_field_types.back().insert(EMAIL_ADDRESS);
|
| +
|
| + form_structure.reset(new FormStructure(form));
|
| +
|
| + ASSERT_EQ(form_structure->field_count(), possible_field_types.size());
|
| + for (size_t i = 0; i < form_structure->field_count(); ++i)
|
| + form_structure->field(i)->set_possible_types(possible_field_types[i]);
|
| +
|
| + ServerFieldTypeSet available_field_types;
|
| + available_field_types.insert(NAME_FIRST);
|
| + available_field_types.insert(NAME_LAST);
|
| + available_field_types.insert(EMAIL_ADDRESS);
|
| +
|
| + std::string encoded_xml;
|
| + EXPECT_TRUE(form_structure->EncodeUploadRequest(available_field_types, true,
|
| + &encoded_xml));
|
| + EXPECT_EQ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
| + "<autofillupload clientversion=\"6.1.1715.1442/en (GGLL)\""
|
| + " formsignature=\"14746822798145140279\" autofillused=\"true\""
|
| + " datapresent=\"1440\">"
|
| + "<field signature=\"3763331450\"/>"
|
| + "<field signature=\"3494530716\"/>"
|
| + "<field signature=\"1029417091\"/></autofillupload>",
|
| + encoded_xml);
|
| +}
|
| +
|
| +TEST_F(FormStructureTest, EncodeFieldAssignments) {
|
| scoped_ptr<FormStructure> form_structure;
|
| std::vector<ServerFieldTypeSet> possible_field_types;
|
| FormData form;
|
| @@ -1971,7 +2057,7 @@ TEST(FormStructureTest, EncodeFieldAssignments) {
|
|
|
| // Check that we compute the "datapresent" string correctly for the given
|
| // |available_types|.
|
| -TEST(FormStructureTest, CheckDataPresence) {
|
| +TEST_F(FormStructureTest, CheckDataPresence) {
|
| FormData form;
|
|
|
| FormFieldData field;
|
| @@ -2208,7 +2294,7 @@ TEST(FormStructureTest, CheckDataPresence) {
|
| encoded_xml);
|
| }
|
|
|
| -TEST(FormStructureTest, CheckMultipleTypes) {
|
| +TEST_F(FormStructureTest, CheckMultipleTypes) {
|
| // Throughout this test, datapresent should be
|
| // 0x1440000360000008 ==
|
| // 0b0001010001000000000000000000001101100000000000000000000000001000
|
| @@ -2352,7 +2438,7 @@ TEST(FormStructureTest, CheckMultipleTypes) {
|
| encoded_xml);
|
| }
|
|
|
| -TEST(FormStructureTest, CheckFormSignature) {
|
| +TEST_F(FormStructureTest, CheckFormSignature) {
|
| // Check that form signature is created correctly.
|
| scoped_ptr<FormStructure> form_structure;
|
| FormData form;
|
| @@ -2420,7 +2506,7 @@ TEST(FormStructureTest, CheckFormSignature) {
|
| form_structure->FormSignature());
|
| }
|
|
|
| -TEST(FormStructureTest, ToFormData) {
|
| +TEST_F(FormStructureTest, ToFormData) {
|
| FormData form;
|
| form.name = ASCIIToUTF16("the-name");
|
| form.origin = GURL("http://cool.com");
|
| @@ -2450,7 +2536,7 @@ TEST(FormStructureTest, ToFormData) {
|
| EXPECT_FALSE(form.SameFormAs(FormStructure(form).ToFormData()));
|
| }
|
|
|
| -TEST(FormStructureTest, SkipFieldTest) {
|
| +TEST_F(FormStructureTest, SkipFieldTest) {
|
| FormData form;
|
| form.name = ASCIIToUTF16("the-name");
|
| form.origin = GURL("http://cool.com");
|
| @@ -2495,7 +2581,7 @@ TEST(FormStructureTest, SkipFieldTest) {
|
| }
|
|
|
| // One name is missing from one field.
|
| -TEST(FormStructureTest, EncodeQueryRequest_MissingNames) {
|
| +TEST_F(FormStructureTest, EncodeQueryRequest_MissingNames) {
|
| FormData form;
|
| // No name set for the form.
|
| form.origin = GURL("http://cool.com");
|
| @@ -2533,7 +2619,48 @@ TEST(FormStructureTest, EncodeQueryRequest_MissingNames) {
|
| EXPECT_EQ(kResponse, encoded_xml);
|
| }
|
|
|
| -TEST(FormStructureTest, PossibleValues) {
|
| +// Sending field metadata to the server is disabled.
|
| +TEST_F(FormStructureTest, EncodeQueryRequest_DisabledMetadataTrial) {
|
| + DisableAutofillMetadataFieldTrial();
|
| +
|
| + FormData form;
|
| + // No name set for the form.
|
| + form.origin = GURL("http://cool.com");
|
| + form.action = form.origin.Resolve("/login");
|
| +
|
| + FormFieldData field;
|
| + field.label = ASCIIToUTF16("username");
|
| + field.name = ASCIIToUTF16("username");
|
| + field.form_control_type = "text";
|
| + form.fields.push_back(field);
|
| +
|
| + field.label = base::string16();
|
| + field.name = ASCIIToUTF16("country");
|
| + field.form_control_type = "text";
|
| + field.is_checkable = false;
|
| + form.fields.push_back(field);
|
| +
|
| + ScopedVector<FormStructure> forms;
|
| + forms.push_back(new FormStructure(form));
|
| + std::vector<std::string> encoded_signatures;
|
| + std::string encoded_xml;
|
| +
|
| + const char kSignature[] = "7635954436925888745";
|
| + const char kResponse[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
| + "<autofillquery clientversion=\"6.1.1715.1442/en (GGLL)\">"
|
| + "<form signature=\"7635954436925888745\">"
|
| + "<field signature=\"239111655\"/>"
|
| + "<field signature=\"3654076265\"/>"
|
| + "</form></autofillquery>";
|
| + ASSERT_TRUE(FormStructure::EncodeQueryRequest(forms.get(),
|
| + &encoded_signatures,
|
| + &encoded_xml));
|
| + ASSERT_EQ(1U, encoded_signatures.size());
|
| + EXPECT_EQ(kSignature, encoded_signatures[0]);
|
| + EXPECT_EQ(kResponse, encoded_xml);
|
| +}
|
| +
|
| +TEST_F(FormStructureTest, PossibleValues) {
|
| FormData form_data;
|
| FormFieldData field;
|
| field.autocomplete_attribute = "billing country";
|
| @@ -2573,7 +2700,7 @@ TEST(FormStructureTest, PossibleValues) {
|
| EXPECT_EQ(0U, form_structure2.PossibleValues(ADDRESS_BILLING_COUNTRY).size());
|
| }
|
|
|
| -TEST(FormStructureTest, ParseQueryResponse) {
|
| +TEST_F(FormStructureTest, ParseQueryResponse) {
|
| TestRapporService rappor_service;
|
| FormData form;
|
| form.origin = GURL("http://foo.com");
|
| @@ -2632,7 +2759,7 @@ TEST(FormStructureTest, ParseQueryResponse) {
|
| }
|
|
|
| // If user defined types are present, only parse password fields.
|
| -TEST(FormStructureTest, ParseQueryResponseAuthorDefinedTypes) {
|
| +TEST_F(FormStructureTest, ParseQueryResponseAuthorDefinedTypes) {
|
| TestRapporService rappor_service;
|
| FormData form;
|
| form.origin = GURL("http://foo.com");
|
| @@ -2669,7 +2796,8 @@ TEST(FormStructureTest, ParseQueryResponseAuthorDefinedTypes) {
|
|
|
| // If the server returns NO_SERVER_DATA for one of the forms, expect RAPPOR
|
| // logging.
|
| -TEST(FormStructureTest, ParseQueryResponse_RapporLogging_OneFormNoServerData) {
|
| +TEST_F(FormStructureTest,
|
| + ParseQueryResponse_RapporLogging_OneFormNoServerData) {
|
| TestRapporService rappor_service;
|
| FormData form;
|
| form.origin = GURL("http://foo.com");
|
| @@ -2719,7 +2847,8 @@ TEST(FormStructureTest, ParseQueryResponse_RapporLogging_OneFormNoServerData) {
|
|
|
| // If the server returns NO_SERVER_DATA for both of the forms, expect RAPPOR
|
| // logging.
|
| -TEST(FormStructureTest, ParseQueryResponse_RapporLogging_AllFormsNoServerData) {
|
| +TEST_F(FormStructureTest,
|
| + ParseQueryResponse_RapporLogging_AllFormsNoServerData) {
|
| TestRapporService rappor_service;
|
| FormData form;
|
| form.origin = GURL("http://foo.com");
|
| @@ -2771,7 +2900,8 @@ TEST(FormStructureTest, ParseQueryResponse_RapporLogging_AllFormsNoServerData) {
|
|
|
| // If the server returns NO_SERVER_DATA for only some of the fields, expect no
|
| // RAPPOR logging.
|
| -TEST(FormStructureTest, ParseQueryResponse_RapporLogging_PartialNoServerData) {
|
| +TEST_F(FormStructureTest,
|
| + ParseQueryResponse_RapporLogging_PartialNoServerData) {
|
| TestRapporService rappor_service;
|
| FormData form;
|
| form.origin = GURL("http://foo.com");
|
|
|