Index: components/autofill/core/browser/autofill_field_unittest.cc |
diff --git a/components/autofill/core/browser/autofill_field_unittest.cc b/components/autofill/core/browser/autofill_field_unittest.cc |
index 5f9f7b75eff4ff96f865f48c0a667d0ddbe04c1b..2f50d799ac32be44d04ed71fc387da8a78fba728 100644 |
--- a/components/autofill/core/browser/autofill_field_unittest.cc |
+++ b/components/autofill/core/browser/autofill_field_unittest.cc |
@@ -878,5 +878,52 @@ TEST_F(AutofillFieldTest, FindShortestSubstringMatchInSelect) { |
EXPECT_EQ(-1, ret); |
} |
+// Tests that text state fields are filled correctly depending on their |
+// maxlength attribute value. |
+TEST_F(AutofillFieldTest, FillStateText) { |
+ typedef struct { |
+ HtmlFieldType field_type; |
+ size_t field_max_length; |
+ std::string value_to_fill; |
+ std::string expected_value; |
+ bool should_fill; |
+ } TestCase; |
+ |
+ TestCase test_cases[] = { |
+ // Filling a state to a text field with the default maxlength value should |
+ // fill the state value as is. |
+ {HTML_TYPE_ADDRESS_LEVEL1, /* default value */ 0, "New York", "New York", |
+ true}, |
+ {HTML_TYPE_ADDRESS_LEVEL1, /* default value */ 0, "NY", "NY", true}, |
+ // Filling a state to a text field with a maxlength value equal to the |
+ // value's length should fill the state value as is. |
+ {HTML_TYPE_ADDRESS_LEVEL1, 8, "New York", "New York", true}, |
+ // Filling a state to a text field with a maxlength value lower than the |
+ // value's length but higher than the value's abbreviation should fill the |
+ // state abbreviation. |
+ {HTML_TYPE_ADDRESS_LEVEL1, 2, "New York", "NY", true}, |
+ {HTML_TYPE_ADDRESS_LEVEL1, 2, "NY", "NY", true}, |
+ // Filling a state to a text field with a maxlength value lower than the |
+ // value's length and the value's abbreviation should not fill at all. |
+ {HTML_TYPE_ADDRESS_LEVEL1, 1, "New York", "", false}, |
+ {HTML_TYPE_ADDRESS_LEVEL1, 1, "NY", "", false}, |
+ // Filling a state to a text field with a maxlength value lower than the |
+ // value's length and that has no associated abbreviation should not fill |
+ // at all. |
+ {HTML_TYPE_ADDRESS_LEVEL1, 3, "Quebec", "", false}}; |
+ |
+ for (const TestCase& test_case : test_cases) { |
+ AutofillField field; |
+ field.SetHtmlType(test_case.field_type, HtmlFieldMode()); |
+ field.max_length = test_case.field_max_length; |
+ |
+ bool has_filled = AutofillField::FillFormField( |
+ field, ASCIIToUTF16(test_case.value_to_fill), "en-US", "en-US", &field); |
+ |
+ EXPECT_EQ(test_case.should_fill, has_filled); |
+ EXPECT_EQ(ASCIIToUTF16(test_case.expected_value), field.value); |
+ } |
+} |
+ |
} // namespace |
} // namespace autofill |