| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/autofill_field.h" | 5 #include "components/autofill/core/browser/autofill_field.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "components/autofill/core/browser/autofill_type.h" | 13 #include "components/autofill/core/browser/autofill_type.h" |
| 14 #include "components/autofill/core/browser/country_names.h" |
| 14 #include "components/autofill/core/browser/field_types.h" | 15 #include "components/autofill/core/browser/field_types.h" |
| 15 #include "components/autofill/core/common/autofill_util.h" | 16 #include "components/autofill/core/common/autofill_util.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 18 |
| 18 using base::ASCIIToUTF16; | 19 using base::ASCIIToUTF16; |
| 19 using base::StringToInt; | 20 using base::StringToInt; |
| 20 using base::UTF8ToUTF16; | 21 using base::UTF8ToUTF16; |
| 21 | 22 |
| 22 namespace autofill { | 23 namespace autofill { |
| 23 namespace { | 24 namespace { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 }; | 132 }; |
| 132 | 133 |
| 133 // Returns the offset to be set within the credit card number field. | 134 // Returns the offset to be set within the credit card number field. |
| 134 size_t GetNumberOffset(size_t index, const TestCase& test) { | 135 size_t GetNumberOffset(size_t index, const TestCase& test) { |
| 135 size_t result = 0; | 136 size_t result = 0; |
| 136 for (size_t i = 0; i < index; ++i) | 137 for (size_t i = 0; i < index; ++i) |
| 137 result += test.splits_[i]; | 138 result += test.splits_[i]; |
| 138 return result; | 139 return result; |
| 139 } | 140 } |
| 140 | 141 |
| 141 TEST(AutofillFieldTest, Type) { | 142 class AutofillFieldTest : public testing::Test { |
| 143 public: |
| 144 AutofillFieldTest() { CountryNames::SetLocaleString("en-US"); } |
| 145 }; |
| 146 |
| 147 TEST_F(AutofillFieldTest, Type) { |
| 142 AutofillField field; | 148 AutofillField field; |
| 143 ASSERT_EQ(NO_SERVER_DATA, field.server_type()); | 149 ASSERT_EQ(NO_SERVER_DATA, field.server_type()); |
| 144 ASSERT_EQ(UNKNOWN_TYPE, field.heuristic_type()); | 150 ASSERT_EQ(UNKNOWN_TYPE, field.heuristic_type()); |
| 145 | 151 |
| 146 // |server_type_| is NO_SERVER_DATA, so |heuristic_type_| is returned. | 152 // |server_type_| is NO_SERVER_DATA, so |heuristic_type_| is returned. |
| 147 EXPECT_EQ(UNKNOWN_TYPE, field.Type().GetStorableType()); | 153 EXPECT_EQ(UNKNOWN_TYPE, field.Type().GetStorableType()); |
| 148 | 154 |
| 149 // Set the heuristic type and check it. | 155 // Set the heuristic type and check it. |
| 150 field.set_heuristic_type(NAME_FIRST); | 156 field.set_heuristic_type(NAME_FIRST); |
| 151 EXPECT_EQ(NAME_FIRST, field.Type().GetStorableType()); | 157 EXPECT_EQ(NAME_FIRST, field.Type().GetStorableType()); |
| 152 EXPECT_EQ(NAME, field.Type().group()); | 158 EXPECT_EQ(NAME, field.Type().group()); |
| 153 | 159 |
| 154 // Set the server type and check it. | 160 // Set the server type and check it. |
| 155 field.set_server_type(ADDRESS_BILLING_LINE1); | 161 field.set_server_type(ADDRESS_BILLING_LINE1); |
| 156 EXPECT_EQ(ADDRESS_HOME_LINE1, field.Type().GetStorableType()); | 162 EXPECT_EQ(ADDRESS_HOME_LINE1, field.Type().GetStorableType()); |
| 157 EXPECT_EQ(ADDRESS_BILLING, field.Type().group()); | 163 EXPECT_EQ(ADDRESS_BILLING, field.Type().group()); |
| 158 | 164 |
| 159 // Remove the server type to make sure the heuristic type is preserved. | 165 // Remove the server type to make sure the heuristic type is preserved. |
| 160 field.set_server_type(NO_SERVER_DATA); | 166 field.set_server_type(NO_SERVER_DATA); |
| 161 EXPECT_EQ(NAME_FIRST, field.Type().GetStorableType()); | 167 EXPECT_EQ(NAME_FIRST, field.Type().GetStorableType()); |
| 162 EXPECT_EQ(NAME, field.Type().group()); | 168 EXPECT_EQ(NAME, field.Type().group()); |
| 163 } | 169 } |
| 164 | 170 |
| 165 TEST(AutofillFieldTest, IsEmpty) { | 171 TEST_F(AutofillFieldTest, IsEmpty) { |
| 166 AutofillField field; | 172 AutofillField field; |
| 167 ASSERT_EQ(base::string16(), field.value); | 173 ASSERT_EQ(base::string16(), field.value); |
| 168 | 174 |
| 169 // Field value is empty. | 175 // Field value is empty. |
| 170 EXPECT_TRUE(field.IsEmpty()); | 176 EXPECT_TRUE(field.IsEmpty()); |
| 171 | 177 |
| 172 // Field value is non-empty. | 178 // Field value is non-empty. |
| 173 field.value = ASCIIToUTF16("Value"); | 179 field.value = ASCIIToUTF16("Value"); |
| 174 EXPECT_FALSE(field.IsEmpty()); | 180 EXPECT_FALSE(field.IsEmpty()); |
| 175 } | 181 } |
| 176 | 182 |
| 177 TEST(AutofillFieldTest, FieldSignature) { | 183 TEST_F(AutofillFieldTest, FieldSignature) { |
| 178 AutofillField field; | 184 AutofillField field; |
| 179 ASSERT_EQ(base::string16(), field.name); | 185 ASSERT_EQ(base::string16(), field.name); |
| 180 ASSERT_EQ(std::string(), field.form_control_type); | 186 ASSERT_EQ(std::string(), field.form_control_type); |
| 181 | 187 |
| 182 // Signature is empty. | 188 // Signature is empty. |
| 183 EXPECT_EQ("2085434232", field.FieldSignature()); | 189 EXPECT_EQ("2085434232", field.FieldSignature()); |
| 184 | 190 |
| 185 // Field name is set. | 191 // Field name is set. |
| 186 field.name = ASCIIToUTF16("Name"); | 192 field.name = ASCIIToUTF16("Name"); |
| 187 EXPECT_EQ("1606968241", field.FieldSignature()); | 193 EXPECT_EQ("1606968241", field.FieldSignature()); |
| 188 | 194 |
| 189 // Field form control type is set. | 195 // Field form control type is set. |
| 190 field.form_control_type = "text"; | 196 field.form_control_type = "text"; |
| 191 EXPECT_EQ("502192749", field.FieldSignature()); | 197 EXPECT_EQ("502192749", field.FieldSignature()); |
| 192 | 198 |
| 193 // Heuristic type does not affect FieldSignature. | 199 // Heuristic type does not affect FieldSignature. |
| 194 field.set_heuristic_type(NAME_FIRST); | 200 field.set_heuristic_type(NAME_FIRST); |
| 195 EXPECT_EQ("502192749", field.FieldSignature()); | 201 EXPECT_EQ("502192749", field.FieldSignature()); |
| 196 | 202 |
| 197 // Server type does not affect FieldSignature. | 203 // Server type does not affect FieldSignature. |
| 198 field.set_server_type(NAME_LAST); | 204 field.set_server_type(NAME_LAST); |
| 199 EXPECT_EQ("502192749", field.FieldSignature()); | 205 EXPECT_EQ("502192749", field.FieldSignature()); |
| 200 } | 206 } |
| 201 | 207 |
| 202 TEST(AutofillFieldTest, IsFieldFillable) { | 208 TEST_F(AutofillFieldTest, IsFieldFillable) { |
| 203 AutofillField field; | 209 AutofillField field; |
| 204 ASSERT_EQ(UNKNOWN_TYPE, field.Type().GetStorableType()); | 210 ASSERT_EQ(UNKNOWN_TYPE, field.Type().GetStorableType()); |
| 205 | 211 |
| 206 // Type is unknown. | 212 // Type is unknown. |
| 207 EXPECT_FALSE(field.IsFieldFillable()); | 213 EXPECT_FALSE(field.IsFieldFillable()); |
| 208 | 214 |
| 209 // Only heuristic type is set. | 215 // Only heuristic type is set. |
| 210 field.set_heuristic_type(NAME_FIRST); | 216 field.set_heuristic_type(NAME_FIRST); |
| 211 EXPECT_TRUE(field.IsFieldFillable()); | 217 EXPECT_TRUE(field.IsFieldFillable()); |
| 212 | 218 |
| 213 // Only server type is set. | 219 // Only server type is set. |
| 214 field.set_heuristic_type(UNKNOWN_TYPE); | 220 field.set_heuristic_type(UNKNOWN_TYPE); |
| 215 field.set_server_type(NAME_LAST); | 221 field.set_server_type(NAME_LAST); |
| 216 EXPECT_TRUE(field.IsFieldFillable()); | 222 EXPECT_TRUE(field.IsFieldFillable()); |
| 217 | 223 |
| 218 // Both types set. | 224 // Both types set. |
| 219 field.set_heuristic_type(NAME_FIRST); | 225 field.set_heuristic_type(NAME_FIRST); |
| 220 field.set_server_type(NAME_LAST); | 226 field.set_server_type(NAME_LAST); |
| 221 EXPECT_TRUE(field.IsFieldFillable()); | 227 EXPECT_TRUE(field.IsFieldFillable()); |
| 222 | 228 |
| 223 // Field has autocomplete="off" set. Since autofill was able to make a | 229 // Field has autocomplete="off" set. Since autofill was able to make a |
| 224 // prediction, it is still considered a fillable field. | 230 // prediction, it is still considered a fillable field. |
| 225 field.should_autocomplete = false; | 231 field.should_autocomplete = false; |
| 226 EXPECT_TRUE(field.IsFieldFillable()); | 232 EXPECT_TRUE(field.IsFieldFillable()); |
| 227 } | 233 } |
| 228 | 234 |
| 229 // Verify that non credit card related fields with the autocomplete attribute | 235 // Verify that non credit card related fields with the autocomplete attribute |
| 230 // set to off don't get filled on desktop. | 236 // set to off don't get filled on desktop. |
| 231 TEST(AutofillFieldTest, FillFormField_AutocompleteOff_AddressField) { | 237 TEST_F(AutofillFieldTest, FillFormField_AutocompleteOff_AddressField) { |
| 232 AutofillField field; | 238 AutofillField field; |
| 233 field.should_autocomplete = false; | 239 field.should_autocomplete = false; |
| 234 | 240 |
| 235 // Non credit card related field. | 241 // Non credit card related field. |
| 236 AutofillField::FillFormField(field, ASCIIToUTF16("Test"), "en-US", "en-US", | 242 AutofillField::FillFormField(field, ASCIIToUTF16("Test"), "en-US", "en-US", |
| 237 &field); | 243 &field); |
| 238 | 244 |
| 239 // Verifiy that the field is filled on mobile but not on desktop. | 245 // Verifiy that the field is filled on mobile but not on desktop. |
| 240 if (IsDesktopPlatform()) { | 246 if (IsDesktopPlatform()) { |
| 241 EXPECT_EQ(base::string16(), field.value); | 247 EXPECT_EQ(base::string16(), field.value); |
| 242 } else { | 248 } else { |
| 243 EXPECT_EQ(ASCIIToUTF16("Test"), field.value); | 249 EXPECT_EQ(ASCIIToUTF16("Test"), field.value); |
| 244 } | 250 } |
| 245 } | 251 } |
| 246 | 252 |
| 247 // Verify that credit card related fields with the autocomplete attribute | 253 // Verify that credit card related fields with the autocomplete attribute |
| 248 // set to off get filled. | 254 // set to off get filled. |
| 249 TEST(AutofillFieldTest, FillFormField_AutocompleteOff_CreditCardField) { | 255 TEST_F(AutofillFieldTest, FillFormField_AutocompleteOff_CreditCardField) { |
| 250 AutofillField field; | 256 AutofillField field; |
| 251 field.should_autocomplete = false; | 257 field.should_autocomplete = false; |
| 252 | 258 |
| 253 // Credit card related field. | 259 // Credit card related field. |
| 254 field.set_heuristic_type(CREDIT_CARD_NUMBER); | 260 field.set_heuristic_type(CREDIT_CARD_NUMBER); |
| 255 AutofillField::FillFormField(field, ASCIIToUTF16("4111111111111111"), "en-US", | 261 AutofillField::FillFormField(field, ASCIIToUTF16("4111111111111111"), "en-US", |
| 256 "en-US", &field); | 262 "en-US", &field); |
| 257 | 263 |
| 258 // Verify that the field is filled. | 264 // Verify that the field is filled. |
| 259 EXPECT_EQ(ASCIIToUTF16("4111111111111111"), field.value); | 265 EXPECT_EQ(ASCIIToUTF16("4111111111111111"), field.value); |
| 260 } | 266 } |
| 261 | 267 |
| 262 TEST(AutofillFieldTest, FillPhoneNumber) { | 268 TEST_F(AutofillFieldTest, FillPhoneNumber) { |
| 263 AutofillField field; | 269 AutofillField field; |
| 264 field.SetHtmlType(HTML_TYPE_TEL_LOCAL_PREFIX, HtmlFieldMode()); | 270 field.SetHtmlType(HTML_TYPE_TEL_LOCAL_PREFIX, HtmlFieldMode()); |
| 265 | 271 |
| 266 // Fill with a non-phone number; should fill normally. | 272 // Fill with a non-phone number; should fill normally. |
| 267 AutofillField::FillFormField( | 273 AutofillField::FillFormField( |
| 268 field, ASCIIToUTF16("Oh hai"), "en-US", "en-US", &field); | 274 field, ASCIIToUTF16("Oh hai"), "en-US", "en-US", &field); |
| 269 EXPECT_EQ(ASCIIToUTF16("Oh hai"), field.value); | 275 EXPECT_EQ(ASCIIToUTF16("Oh hai"), field.value); |
| 270 | 276 |
| 271 // Fill with a phone number; should fill just the prefix. | 277 // Fill with a phone number; should fill just the prefix. |
| 272 AutofillField::FillFormField( | 278 AutofillField::FillFormField( |
| 273 field, ASCIIToUTF16("5551234"), "en-US", "en-US", &field); | 279 field, ASCIIToUTF16("5551234"), "en-US", "en-US", &field); |
| 274 EXPECT_EQ(ASCIIToUTF16("555"), field.value); | 280 EXPECT_EQ(ASCIIToUTF16("555"), field.value); |
| 275 | 281 |
| 276 // Now reset the type, and set a max-length instead. | 282 // Now reset the type, and set a max-length instead. |
| 277 field.SetHtmlType(HTML_TYPE_UNSPECIFIED, HtmlFieldMode()); | 283 field.SetHtmlType(HTML_TYPE_UNSPECIFIED, HtmlFieldMode()); |
| 278 field.set_heuristic_type(PHONE_HOME_NUMBER); | 284 field.set_heuristic_type(PHONE_HOME_NUMBER); |
| 279 field.max_length = 4; | 285 field.max_length = 4; |
| 280 | 286 |
| 281 // Fill with a phone-number; should fill just the suffix. | 287 // Fill with a phone-number; should fill just the suffix. |
| 282 AutofillField::FillFormField( | 288 AutofillField::FillFormField( |
| 283 field, ASCIIToUTF16("5551234"), "en-US", "en-US", &field); | 289 field, ASCIIToUTF16("5551234"), "en-US", "en-US", &field); |
| 284 EXPECT_EQ(ASCIIToUTF16("1234"), field.value); | 290 EXPECT_EQ(ASCIIToUTF16("1234"), field.value); |
| 285 } | 291 } |
| 286 | 292 |
| 287 TEST(AutofillFieldTest, FillSelectControlByValue) { | 293 TEST_F(AutofillFieldTest, FillSelectControlByValue) { |
| 288 std::vector<const char*> kOptions = { | 294 std::vector<const char*> kOptions = { |
| 289 "Eenie", "Meenie", "Miney", "Mo", | 295 "Eenie", "Meenie", "Miney", "Mo", |
| 290 }; | 296 }; |
| 291 AutofillField field(GenerateSelectFieldWithOptions(kOptions, kOptions.size()), | 297 AutofillField field(GenerateSelectFieldWithOptions(kOptions, kOptions.size()), |
| 292 base::string16()); | 298 base::string16()); |
| 293 | 299 |
| 294 // Set semantically empty contents for each option, so that only the values | 300 // Set semantically empty contents for each option, so that only the values |
| 295 // can be used for matching. | 301 // can be used for matching. |
| 296 for (size_t i = 0; i < field.option_contents.size(); ++i) | 302 for (size_t i = 0; i < field.option_contents.size(); ++i) |
| 297 field.option_contents[i] = base::SizeTToString16(i); | 303 field.option_contents[i] = base::SizeTToString16(i); |
| 298 | 304 |
| 299 AutofillField::FillFormField( | 305 AutofillField::FillFormField( |
| 300 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); | 306 field, ASCIIToUTF16("Meenie"), "en-US", "en-US", &field); |
| 301 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); | 307 EXPECT_EQ(ASCIIToUTF16("Meenie"), field.value); |
| 302 } | 308 } |
| 303 | 309 |
| 304 TEST(AutofillFieldTest, FillSelectControlByContents) { | 310 TEST_F(AutofillFieldTest, FillSelectControlByContents) { |
| 305 std::vector<const char*> kOptions = { | 311 std::vector<const char*> kOptions = { |
| 306 "Eenie", "Meenie", "Miney", "Mo", | 312 "Eenie", "Meenie", "Miney", "Mo", |
| 307 }; | 313 }; |
| 308 AutofillField field(GenerateSelectFieldWithOptions(kOptions, kOptions.size()), | 314 AutofillField field(GenerateSelectFieldWithOptions(kOptions, kOptions.size()), |
| 309 base::string16()); | 315 base::string16()); |
| 310 | 316 |
| 311 // Set semantically empty values for each option, so that only the contents | 317 // Set semantically empty values for each option, so that only the contents |
| 312 // can be used for matching. | 318 // can be used for matching. |
| 313 for (size_t i = 0; i < field.option_values.size(); ++i) | 319 for (size_t i = 0; i < field.option_values.size(); ++i) |
| 314 field.option_values[i] = base::SizeTToString16(i); | 320 field.option_values[i] = base::SizeTToString16(i); |
| 315 | 321 |
| 316 AutofillField::FillFormField( | 322 AutofillField::FillFormField( |
| 317 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); | 323 field, ASCIIToUTF16("Miney"), "en-US", "en-US", &field); |
| 318 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". | 324 EXPECT_EQ(ASCIIToUTF16("2"), field.value); // Corresponds to "Miney". |
| 319 } | 325 } |
| 320 | 326 |
| 321 TEST(AutofillFieldTest, FillSelectControlWithFullCountryNames) { | 327 TEST_F(AutofillFieldTest, FillSelectControlWithFullCountryNames) { |
| 322 std::vector<const char*> kCountries = {"Albania", "Canada"}; | 328 std::vector<const char*> kCountries = {"Albania", "Canada"}; |
| 323 AutofillField field( | 329 AutofillField field( |
| 324 GenerateSelectFieldWithOptions(kCountries, kCountries.size()), | 330 GenerateSelectFieldWithOptions(kCountries, kCountries.size()), |
| 325 base::string16()); | 331 base::string16()); |
| 326 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); | 332 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); |
| 327 | 333 |
| 328 AutofillField::FillFormField( | 334 AutofillField::FillFormField( |
| 329 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); | 335 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
| 330 EXPECT_EQ(ASCIIToUTF16("Canada"), field.value); | 336 EXPECT_EQ(ASCIIToUTF16("Canada"), field.value); |
| 331 } | 337 } |
| 332 | 338 |
| 333 TEST(AutofillFieldTest, FillSelectControlWithAbbreviatedCountryNames) { | 339 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedCountryNames) { |
| 334 std::vector<const char*> kCountries = {"AL", "CA"}; | 340 std::vector<const char*> kCountries = {"AL", "CA"}; |
| 335 AutofillField field( | 341 AutofillField field( |
| 336 GenerateSelectFieldWithOptions(kCountries, kCountries.size()), | 342 GenerateSelectFieldWithOptions(kCountries, kCountries.size()), |
| 337 base::string16()); | 343 base::string16()); |
| 338 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); | 344 field.set_heuristic_type(ADDRESS_HOME_COUNTRY); |
| 339 | 345 |
| 340 AutofillField::FillFormField( | 346 AutofillField::FillFormField( |
| 341 field, ASCIIToUTF16("Canada"), "en-US", "en-US", &field); | 347 field, ASCIIToUTF16("Canada"), "en-US", "en-US", &field); |
| 342 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); | 348 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); |
| 343 } | 349 } |
| 344 | 350 |
| 345 TEST(AutofillFieldTest, FillSelectControlWithFullStateNames) { | 351 TEST_F(AutofillFieldTest, FillSelectControlWithFullStateNames) { |
| 346 std::vector<const char*> kStates = {"Alabama", "California"}; | 352 std::vector<const char*> kStates = {"Alabama", "California"}; |
| 347 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 353 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), |
| 348 base::string16()); | 354 base::string16()); |
| 349 field.set_heuristic_type(ADDRESS_HOME_STATE); | 355 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 350 | 356 |
| 351 AutofillField::FillFormField( | 357 AutofillField::FillFormField( |
| 352 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); | 358 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
| 353 EXPECT_EQ(ASCIIToUTF16("California"), field.value); | 359 EXPECT_EQ(ASCIIToUTF16("California"), field.value); |
| 354 } | 360 } |
| 355 | 361 |
| 356 TEST(AutofillFieldTest, FillSelectControlWithAbbreviateStateNames) { | 362 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviateStateNames) { |
| 357 std::vector<const char*> kStates = {"AL", "CA"}; | 363 std::vector<const char*> kStates = {"AL", "CA"}; |
| 358 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 364 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), |
| 359 base::string16()); | 365 base::string16()); |
| 360 field.set_heuristic_type(ADDRESS_HOME_STATE); | 366 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 361 | 367 |
| 362 AutofillField::FillFormField( | 368 AutofillField::FillFormField( |
| 363 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); | 369 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); |
| 364 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); | 370 EXPECT_EQ(ASCIIToUTF16("CA"), field.value); |
| 365 } | 371 } |
| 366 | 372 |
| 367 TEST(AutofillFieldTest, FillSelectControlWithInexactFullStateNames) { | 373 TEST_F(AutofillFieldTest, FillSelectControlWithInexactFullStateNames) { |
| 368 { | 374 { |
| 369 std::vector<const char*> kStates = { | 375 std::vector<const char*> kStates = { |
| 370 "SC - South Carolina", "CA - California", "NC - North Carolina", | 376 "SC - South Carolina", "CA - California", "NC - North Carolina", |
| 371 }; | 377 }; |
| 372 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 378 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), |
| 373 base::string16()); | 379 base::string16()); |
| 374 field.set_heuristic_type(ADDRESS_HOME_STATE); | 380 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 375 | 381 |
| 376 AutofillField::FillFormField( | 382 AutofillField::FillFormField( |
| 377 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); | 383 field, ASCIIToUTF16("California"), "en-US", "en-US", &field); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 424 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), |
| 419 base::string16()); | 425 base::string16()); |
| 420 field.set_heuristic_type(ADDRESS_HOME_STATE); | 426 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 421 | 427 |
| 422 AutofillField::FillFormField( | 428 AutofillField::FillFormField( |
| 423 field, ASCIIToUTF16("North Carolina"), "en-US", "en-US", &field); | 429 field, ASCIIToUTF16("North Carolina"), "en-US", "en-US", &field); |
| 424 EXPECT_EQ(ASCIIToUTF16("North Carolina."), field.value); | 430 EXPECT_EQ(ASCIIToUTF16("North Carolina."), field.value); |
| 425 } | 431 } |
| 426 } | 432 } |
| 427 | 433 |
| 428 TEST(AutofillFieldTest, FillSelectControlWithInexactAbbreviations) { | 434 TEST_F(AutofillFieldTest, FillSelectControlWithInexactAbbreviations) { |
| 429 { | 435 { |
| 430 std::vector<const char*> kStates = { | 436 std::vector<const char*> kStates = { |
| 431 "NC - North Carolina", "CA - California", | 437 "NC - North Carolina", "CA - California", |
| 432 }; | 438 }; |
| 433 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), | 439 AutofillField field(GenerateSelectFieldWithOptions(kStates, kStates.size()), |
| 434 base::string16()); | 440 base::string16()); |
| 435 field.set_heuristic_type(ADDRESS_HOME_STATE); | 441 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 436 | 442 |
| 437 AutofillField::FillFormField( | 443 AutofillField::FillFormField( |
| 438 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); | 444 field, ASCIIToUTF16("CA"), "en-US", "en-US", &field); |
| 439 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); | 445 EXPECT_EQ(ASCIIToUTF16("CA - California"), field.value); |
| 440 } | 446 } |
| 441 | 447 |
| 442 { | 448 { |
| 443 std::vector<const char*> kNotStates = { | 449 std::vector<const char*> kNotStates = { |
| 444 "NCNCA", "SCNCA", | 450 "NCNCA", "SCNCA", |
| 445 }; | 451 }; |
| 446 AutofillField field( | 452 AutofillField field( |
| 447 GenerateSelectFieldWithOptions(kNotStates, kNotStates.size()), | 453 GenerateSelectFieldWithOptions(kNotStates, kNotStates.size()), |
| 448 base::string16()); | 454 base::string16()); |
| 449 field.set_heuristic_type(ADDRESS_HOME_STATE); | 455 field.set_heuristic_type(ADDRESS_HOME_STATE); |
| 450 | 456 |
| 451 AutofillField::FillFormField( | 457 AutofillField::FillFormField( |
| 452 field, ASCIIToUTF16("NC"), "en-US", "en-US", &field); | 458 field, ASCIIToUTF16("NC"), "en-US", "en-US", &field); |
| 453 EXPECT_EQ(base::string16(), field.value); | 459 EXPECT_EQ(base::string16(), field.value); |
| 454 } | 460 } |
| 455 } | 461 } |
| 456 | 462 |
| 457 TEST(AutofillFieldTest, FillSelectControlWithExpirationMonth) { | 463 TEST_F(AutofillFieldTest, FillSelectControlWithExpirationMonth) { |
| 458 typedef struct { | 464 typedef struct { |
| 459 std::vector<const char*> select_values; | 465 std::vector<const char*> select_values; |
| 460 std::vector<const char*> select_contents; | 466 std::vector<const char*> select_contents; |
| 461 } TestCase; | 467 } TestCase; |
| 462 | 468 |
| 463 TestCase test_cases[] = { | 469 TestCase test_cases[] = { |
| 464 // Values start at 1. | 470 // Values start at 1. |
| 465 {{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, | 471 {{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}, |
| 466 NotNumericMonthsContentsNoPlaceholder()}, | 472 NotNumericMonthsContentsNoPlaceholder()}, |
| 467 // Values start at 0. | 473 // Values start at 0. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 483 | 489 |
| 484 for (TestCase test_case : test_cases) { | 490 for (TestCase test_case : test_cases) { |
| 485 ASSERT_EQ(test_case.select_values.size(), test_case.select_contents.size()); | 491 ASSERT_EQ(test_case.select_values.size(), test_case.select_contents.size()); |
| 486 | 492 |
| 487 TestFillingExpirationMonth(test_case.select_values, | 493 TestFillingExpirationMonth(test_case.select_values, |
| 488 test_case.select_contents, | 494 test_case.select_contents, |
| 489 test_case.select_values.size()); | 495 test_case.select_values.size()); |
| 490 } | 496 } |
| 491 } | 497 } |
| 492 | 498 |
| 493 TEST(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { | 499 TEST_F(AutofillFieldTest, FillSelectControlWithAbbreviatedMonthName) { |
| 494 std::vector<const char*> kMonthsAbbreviated = { | 500 std::vector<const char*> kMonthsAbbreviated = { |
| 495 "Jan", "Feb", "Mar", "Apr", "May", "Jun", | 501 "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
| 496 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | 502 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", |
| 497 }; | 503 }; |
| 498 AutofillField field(GenerateSelectFieldWithOptions(kMonthsAbbreviated, | 504 AutofillField field(GenerateSelectFieldWithOptions(kMonthsAbbreviated, |
| 499 kMonthsAbbreviated.size()), | 505 kMonthsAbbreviated.size()), |
| 500 base::string16()); | 506 base::string16()); |
| 501 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 507 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 502 | 508 |
| 503 AutofillField::FillFormField( | 509 AutofillField::FillFormField( |
| 504 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 510 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 505 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); | 511 EXPECT_EQ(ASCIIToUTF16("Apr"), field.value); |
| 506 } | 512 } |
| 507 | 513 |
| 508 TEST(AutofillFieldTest, FillSelectControlWithFullMonthName) { | 514 TEST_F(AutofillFieldTest, FillSelectControlWithFullMonthName) { |
| 509 std::vector<const char*> kMonthsFull = { | 515 std::vector<const char*> kMonthsFull = { |
| 510 "January", "February", "March", "April", "May", "June", | 516 "January", "February", "March", "April", "May", "June", |
| 511 "July", "August", "September", "October", "November", "December", | 517 "July", "August", "September", "October", "November", "December", |
| 512 }; | 518 }; |
| 513 AutofillField field( | 519 AutofillField field( |
| 514 GenerateSelectFieldWithOptions(kMonthsFull, kMonthsFull.size()), | 520 GenerateSelectFieldWithOptions(kMonthsFull, kMonthsFull.size()), |
| 515 base::string16()); | 521 base::string16()); |
| 516 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 522 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 517 | 523 |
| 518 AutofillField::FillFormField( | 524 AutofillField::FillFormField( |
| 519 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 525 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 520 EXPECT_EQ(ASCIIToUTF16("April"), field.value); | 526 EXPECT_EQ(ASCIIToUTF16("April"), field.value); |
| 521 } | 527 } |
| 522 | 528 |
| 523 TEST(AutofillFieldTest, FillSelectControlWithFrenchMonthName) { | 529 TEST_F(AutofillFieldTest, FillSelectControlWithFrenchMonthName) { |
| 524 std::vector<const char*> kMonthsFrench = {"JANV", "FÉVR.", "MARS", | 530 std::vector<const char*> kMonthsFrench = {"JANV", "FÉVR.", "MARS", |
| 525 "décembre"}; | 531 "décembre"}; |
| 526 AutofillField field( | 532 AutofillField field( |
| 527 GenerateSelectFieldWithOptions(kMonthsFrench, kMonthsFrench.size()), | 533 GenerateSelectFieldWithOptions(kMonthsFrench, kMonthsFrench.size()), |
| 528 base::string16()); | 534 base::string16()); |
| 529 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 535 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 530 | 536 |
| 531 AutofillField::FillFormField( | 537 AutofillField::FillFormField( |
| 532 field, ASCIIToUTF16("02"), "fr-FR", "fr-FR", &field); | 538 field, ASCIIToUTF16("02"), "fr-FR", "fr-FR", &field); |
| 533 EXPECT_EQ(UTF8ToUTF16("FÉVR."), field.value); | 539 EXPECT_EQ(UTF8ToUTF16("FÉVR."), field.value); |
| 534 | 540 |
| 535 AutofillField::FillFormField( | 541 AutofillField::FillFormField( |
| 536 field, ASCIIToUTF16("01"), "fr-FR", "fr-FR", &field); | 542 field, ASCIIToUTF16("01"), "fr-FR", "fr-FR", &field); |
| 537 EXPECT_EQ(UTF8ToUTF16("JANV"), field.value); | 543 EXPECT_EQ(UTF8ToUTF16("JANV"), field.value); |
| 538 | 544 |
| 539 AutofillField::FillFormField( | 545 AutofillField::FillFormField( |
| 540 field, ASCIIToUTF16("12"), "fr-FR", "fr-FR", &field); | 546 field, ASCIIToUTF16("12"), "fr-FR", "fr-FR", &field); |
| 541 EXPECT_EQ(UTF8ToUTF16("décembre"), field.value); | 547 EXPECT_EQ(UTF8ToUTF16("décembre"), field.value); |
| 542 } | 548 } |
| 543 | 549 |
| 544 TEST(AutofillFieldTest, FillSelectControlWithNumericMonthSansLeadingZero) { | 550 TEST_F(AutofillFieldTest, FillSelectControlWithNumericMonthSansLeadingZero) { |
| 545 std::vector<const char*> kMonthsNumeric = { | 551 std::vector<const char*> kMonthsNumeric = { |
| 546 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", | 552 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", |
| 547 }; | 553 }; |
| 548 AutofillField field( | 554 AutofillField field( |
| 549 GenerateSelectFieldWithOptions(kMonthsNumeric, kMonthsNumeric.size()), | 555 GenerateSelectFieldWithOptions(kMonthsNumeric, kMonthsNumeric.size()), |
| 550 base::string16()); | 556 base::string16()); |
| 551 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); | 557 field.set_heuristic_type(CREDIT_CARD_EXP_MONTH); |
| 552 | 558 |
| 553 AutofillField::FillFormField( | 559 AutofillField::FillFormField( |
| 554 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); | 560 field, ASCIIToUTF16("04"), "en-US", "en-US", &field); |
| 555 EXPECT_EQ(ASCIIToUTF16("4"), field.value); | 561 EXPECT_EQ(ASCIIToUTF16("4"), field.value); |
| 556 } | 562 } |
| 557 | 563 |
| 558 TEST(AutofillFieldTest, FillSelectControlWithTwoDigitCreditCardYear) { | 564 TEST_F(AutofillFieldTest, FillSelectControlWithTwoDigitCreditCardYear) { |
| 559 std::vector<const char*> kYears = {"12", "13", "14", "15", | 565 std::vector<const char*> kYears = {"12", "13", "14", "15", |
| 560 "16", "17", "18", "19"}; | 566 "16", "17", "18", "19"}; |
| 561 AutofillField field(GenerateSelectFieldWithOptions(kYears, kYears.size()), | 567 AutofillField field(GenerateSelectFieldWithOptions(kYears, kYears.size()), |
| 562 base::string16()); | 568 base::string16()); |
| 563 field.set_heuristic_type(CREDIT_CARD_EXP_2_DIGIT_YEAR); | 569 field.set_heuristic_type(CREDIT_CARD_EXP_2_DIGIT_YEAR); |
| 564 | 570 |
| 565 AutofillField::FillFormField( | 571 AutofillField::FillFormField( |
| 566 field, ASCIIToUTF16("2017"), "en-US", "en-US", &field); | 572 field, ASCIIToUTF16("2017"), "en-US", "en-US", &field); |
| 567 EXPECT_EQ(ASCIIToUTF16("17"), field.value); | 573 EXPECT_EQ(ASCIIToUTF16("17"), field.value); |
| 568 } | 574 } |
| 569 | 575 |
| 570 TEST(AutofillFieldTest, FillSelectControlWithCreditCardType) { | 576 TEST_F(AutofillFieldTest, FillSelectControlWithCreditCardType) { |
| 571 std::vector<const char*> kCreditCardTypes = {"Visa", "Master Card", "AmEx", | 577 std::vector<const char*> kCreditCardTypes = {"Visa", "Master Card", "AmEx", |
| 572 "discover"}; | 578 "discover"}; |
| 573 AutofillField field( | 579 AutofillField field( |
| 574 GenerateSelectFieldWithOptions(kCreditCardTypes, kCreditCardTypes.size()), | 580 GenerateSelectFieldWithOptions(kCreditCardTypes, kCreditCardTypes.size()), |
| 575 base::string16()); | 581 base::string16()); |
| 576 field.set_heuristic_type(CREDIT_CARD_TYPE); | 582 field.set_heuristic_type(CREDIT_CARD_TYPE); |
| 577 | 583 |
| 578 // Normal case: | 584 // Normal case: |
| 579 AutofillField::FillFormField( | 585 AutofillField::FillFormField( |
| 580 field, ASCIIToUTF16("Visa"), "en-US", "en-US", &field); | 586 field, ASCIIToUTF16("Visa"), "en-US", "en-US", &field); |
| 581 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); | 587 EXPECT_EQ(ASCIIToUTF16("Visa"), field.value); |
| 582 | 588 |
| 583 // Filling should be able to handle intervening whitespace: | 589 // Filling should be able to handle intervening whitespace: |
| 584 AutofillField::FillFormField( | 590 AutofillField::FillFormField( |
| 585 field, ASCIIToUTF16("MasterCard"), "en-US", "en-US", &field); | 591 field, ASCIIToUTF16("MasterCard"), "en-US", "en-US", &field); |
| 586 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value); | 592 EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value); |
| 587 | 593 |
| 588 // American Express is sometimes abbreviated as AmEx: | 594 // American Express is sometimes abbreviated as AmEx: |
| 589 AutofillField::FillFormField( | 595 AutofillField::FillFormField( |
| 590 field, ASCIIToUTF16("American Express"), "en-US", "en-US", &field); | 596 field, ASCIIToUTF16("American Express"), "en-US", "en-US", &field); |
| 591 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value); | 597 EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value); |
| 592 | 598 |
| 593 // Case insensitivity: | 599 // Case insensitivity: |
| 594 AutofillField::FillFormField( | 600 AutofillField::FillFormField( |
| 595 field, ASCIIToUTF16("Discover"), "en-US", "en-US", &field); | 601 field, ASCIIToUTF16("Discover"), "en-US", "en-US", &field); |
| 596 EXPECT_EQ(ASCIIToUTF16("discover"), field.value); | 602 EXPECT_EQ(ASCIIToUTF16("discover"), field.value); |
| 597 } | 603 } |
| 598 | 604 |
| 599 TEST(AutofillFieldTest, FillMonthControl) { | 605 TEST_F(AutofillFieldTest, FillMonthControl) { |
| 600 AutofillField field; | 606 AutofillField field; |
| 601 field.form_control_type = "month"; | 607 field.form_control_type = "month"; |
| 602 | 608 |
| 603 // Try a month with two digits. | 609 // Try a month with two digits. |
| 604 AutofillField::FillFormField( | 610 AutofillField::FillFormField( |
| 605 field, ASCIIToUTF16("12/2017"), "en-US", "en-US", &field); | 611 field, ASCIIToUTF16("12/2017"), "en-US", "en-US", &field); |
| 606 EXPECT_EQ(ASCIIToUTF16("2017-12"), field.value); | 612 EXPECT_EQ(ASCIIToUTF16("2017-12"), field.value); |
| 607 | 613 |
| 608 // Try a month with a leading zero. | 614 // Try a month with a leading zero. |
| 609 AutofillField::FillFormField( | 615 AutofillField::FillFormField( |
| 610 field, ASCIIToUTF16("03/2019"), "en-US", "en-US", &field); | 616 field, ASCIIToUTF16("03/2019"), "en-US", "en-US", &field); |
| 611 EXPECT_EQ(ASCIIToUTF16("2019-03"), field.value); | 617 EXPECT_EQ(ASCIIToUTF16("2019-03"), field.value); |
| 612 | 618 |
| 613 // Try a month without a leading zero. | 619 // Try a month without a leading zero. |
| 614 AutofillField::FillFormField( | 620 AutofillField::FillFormField( |
| 615 field, ASCIIToUTF16("4/2018"), "en-US", "en-US", &field); | 621 field, ASCIIToUTF16("4/2018"), "en-US", "en-US", &field); |
| 616 EXPECT_EQ(ASCIIToUTF16("2018-04"), field.value); | 622 EXPECT_EQ(ASCIIToUTF16("2018-04"), field.value); |
| 617 } | 623 } |
| 618 | 624 |
| 619 TEST(AutofillFieldTest, FillStreetAddressTextArea) { | 625 TEST_F(AutofillFieldTest, FillStreetAddressTextArea) { |
| 620 AutofillField field; | 626 AutofillField field; |
| 621 field.form_control_type = "textarea"; | 627 field.form_control_type = "textarea"; |
| 622 | 628 |
| 623 base::string16 value = ASCIIToUTF16("123 Fake St.\n" | 629 base::string16 value = ASCIIToUTF16("123 Fake St.\n" |
| 624 "Apt. 42"); | 630 "Apt. 42"); |
| 625 AutofillField::FillFormField(field, value, "en-US", "en-US", &field); | 631 AutofillField::FillFormField(field, value, "en-US", "en-US", &field); |
| 626 EXPECT_EQ(value, field.value); | 632 EXPECT_EQ(value, field.value); |
| 627 | 633 |
| 628 base::string16 ja_value = UTF8ToUTF16("桜丘町26-1\n" | 634 base::string16 ja_value = UTF8ToUTF16("桜丘町26-1\n" |
| 629 "セルリアンタワー6階"); | 635 "セルリアンタワー6階"); |
| 630 AutofillField::FillFormField(field, ja_value, "ja-JP", "en-US", &field); | 636 AutofillField::FillFormField(field, ja_value, "ja-JP", "en-US", &field); |
| 631 EXPECT_EQ(ja_value, field.value); | 637 EXPECT_EQ(ja_value, field.value); |
| 632 } | 638 } |
| 633 | 639 |
| 634 TEST(AutofillFieldTest, FillStreetAddressTextField) { | 640 TEST_F(AutofillFieldTest, FillStreetAddressTextField) { |
| 635 AutofillField field; | 641 AutofillField field; |
| 636 field.form_control_type = "text"; | 642 field.form_control_type = "text"; |
| 637 field.set_server_type(ADDRESS_HOME_STREET_ADDRESS); | 643 field.set_server_type(ADDRESS_HOME_STREET_ADDRESS); |
| 638 | 644 |
| 639 base::string16 value = ASCIIToUTF16("123 Fake St.\n" | 645 base::string16 value = ASCIIToUTF16("123 Fake St.\n" |
| 640 "Apt. 42"); | 646 "Apt. 42"); |
| 641 AutofillField::FillFormField(field, value, "en-US", "en-US", &field); | 647 AutofillField::FillFormField(field, value, "en-US", "en-US", &field); |
| 642 EXPECT_EQ(ASCIIToUTF16("123 Fake St., Apt. 42"), field.value); | 648 EXPECT_EQ(ASCIIToUTF16("123 Fake St., Apt. 42"), field.value); |
| 643 | 649 |
| 644 AutofillField::FillFormField(field, | 650 AutofillField::FillFormField(field, |
| 645 UTF8ToUTF16("桜丘町26-1\n" | 651 UTF8ToUTF16("桜丘町26-1\n" |
| 646 "セルリアンタワー6階"), | 652 "セルリアンタワー6階"), |
| 647 "ja-JP", | 653 "ja-JP", |
| 648 "en-US", | 654 "en-US", |
| 649 &field); | 655 &field); |
| 650 EXPECT_EQ(UTF8ToUTF16("桜丘町26-1セルリアンタワー6階"), field.value); | 656 EXPECT_EQ(UTF8ToUTF16("桜丘町26-1セルリアンタワー6階"), field.value); |
| 651 } | 657 } |
| 652 | 658 |
| 653 TEST(AutofillFieldTest, FillCreditCardNumberWithoutSplits) { | 659 TEST_F(AutofillFieldTest, FillCreditCardNumberWithoutSplits) { |
| 654 // Case 1: card number without any spilt. | 660 // Case 1: card number without any spilt. |
| 655 AutofillField cc_number_full; | 661 AutofillField cc_number_full; |
| 656 cc_number_full.set_heuristic_type(CREDIT_CARD_NUMBER); | 662 cc_number_full.set_heuristic_type(CREDIT_CARD_NUMBER); |
| 657 AutofillField::FillFormField(cc_number_full, | 663 AutofillField::FillFormField(cc_number_full, |
| 658 ASCIIToUTF16("4111111111111111"), | 664 ASCIIToUTF16("4111111111111111"), |
| 659 "en-US", | 665 "en-US", |
| 660 "en-US", | 666 "en-US", |
| 661 &cc_number_full); | 667 &cc_number_full); |
| 662 | 668 |
| 663 // Verify that full card-number shall get fill properly. | 669 // Verify that full card-number shall get fill properly. |
| 664 EXPECT_EQ(ASCIIToUTF16("4111111111111111"), cc_number_full.value); | 670 EXPECT_EQ(ASCIIToUTF16("4111111111111111"), cc_number_full.value); |
| 665 EXPECT_EQ(0U, cc_number_full.credit_card_number_offset()); | 671 EXPECT_EQ(0U, cc_number_full.credit_card_number_offset()); |
| 666 } | 672 } |
| 667 | 673 |
| 668 TEST(AutofillFieldTest, FillCreditCardNumberWithEqualSizeSplits) { | 674 TEST_F(AutofillFieldTest, FillCreditCardNumberWithEqualSizeSplits) { |
| 669 // Case 2: card number broken up into four equal groups, of length 4. | 675 // Case 2: card number broken up into four equal groups, of length 4. |
| 670 TestCase test; | 676 TestCase test; |
| 671 test.card_number_ = "5187654321098765"; | 677 test.card_number_ = "5187654321098765"; |
| 672 test.total_spilts_ = 4; | 678 test.total_spilts_ = 4; |
| 673 int splits[] = {4, 4, 4, 4}; | 679 int splits[] = {4, 4, 4, 4}; |
| 674 test.splits_ = std::vector<int>(splits, splits + arraysize(splits)); | 680 test.splits_ = std::vector<int>(splits, splits + arraysize(splits)); |
| 675 std::string results[] = {"5187", "6543", "2109", "8765"}; | 681 std::string results[] = {"5187", "6543", "2109", "8765"}; |
| 676 test.expected_results_ = | 682 test.expected_results_ = |
| 677 std::vector<std::string>(results, results + arraysize(results)); | 683 std::vector<std::string>(results, results + arraysize(results)); |
| 678 | 684 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 701 AutofillField::FillFormField(cc_number_full, | 707 AutofillField::FillFormField(cc_number_full, |
| 702 ASCIIToUTF16(test.card_number_), | 708 ASCIIToUTF16(test.card_number_), |
| 703 "en-US", | 709 "en-US", |
| 704 "en-US", | 710 "en-US", |
| 705 &cc_number_full); | 711 &cc_number_full); |
| 706 | 712 |
| 707 // Verify for expected results. | 713 // Verify for expected results. |
| 708 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); | 714 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); |
| 709 } | 715 } |
| 710 | 716 |
| 711 TEST(AutofillFieldTest, FillCreditCardNumberWithUnequalSizeSplits) { | 717 TEST_F(AutofillFieldTest, FillCreditCardNumberWithUnequalSizeSplits) { |
| 712 // Case 3: card with 15 digits number, broken up into three unequal groups, of | 718 // Case 3: card with 15 digits number, broken up into three unequal groups, of |
| 713 // lengths 4, 6, and 5. | 719 // lengths 4, 6, and 5. |
| 714 TestCase test; | 720 TestCase test; |
| 715 test.card_number_ = "423456789012345"; | 721 test.card_number_ = "423456789012345"; |
| 716 test.total_spilts_ = 3; | 722 test.total_spilts_ = 3; |
| 717 int splits[] = {4, 6, 5}; | 723 int splits[] = {4, 6, 5}; |
| 718 test.splits_ = std::vector<int>(splits, splits + arraysize(splits)); | 724 test.splits_ = std::vector<int>(splits, splits + arraysize(splits)); |
| 719 std::string results[] = {"4234", "567890", "12345"}; | 725 std::string results[] = {"4234", "567890", "12345"}; |
| 720 test.expected_results_ = | 726 test.expected_results_ = |
| 721 std::vector<std::string>(results, results + arraysize(results)); | 727 std::vector<std::string>(results, results + arraysize(results)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 747 AutofillField::FillFormField(cc_number_full, | 753 AutofillField::FillFormField(cc_number_full, |
| 748 ASCIIToUTF16(test.card_number_), | 754 ASCIIToUTF16(test.card_number_), |
| 749 "en-US", | 755 "en-US", |
| 750 "en-US", | 756 "en-US", |
| 751 &cc_number_full); | 757 &cc_number_full); |
| 752 | 758 |
| 753 // Verify for expected results. | 759 // Verify for expected results. |
| 754 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); | 760 EXPECT_EQ(ASCIIToUTF16(test.card_number_), cc_number_full.value); |
| 755 } | 761 } |
| 756 | 762 |
| 757 TEST(AutofillFieldTest, FindValueInSelectControl) { | 763 TEST_F(AutofillFieldTest, FindValueInSelectControl) { |
| 758 const size_t kBadIndex = 1000; | 764 const size_t kBadIndex = 1000; |
| 759 | 765 |
| 760 { | 766 { |
| 761 std::vector<const char*> kCountries = {"Albania", "Canada"}; | 767 std::vector<const char*> kCountries = {"Albania", "Canada"}; |
| 762 FormFieldData field( | 768 FormFieldData field( |
| 763 GenerateSelectFieldWithOptions(kCountries, kCountries.size())); | 769 GenerateSelectFieldWithOptions(kCountries, kCountries.size())); |
| 764 size_t index = kBadIndex; | 770 size_t index = kBadIndex; |
| 765 bool ret = AutofillField::FindValueInSelectControl( | 771 bool ret = AutofillField::FindValueInSelectControl( |
| 766 field, ASCIIToUTF16("Canada"), &index); | 772 field, ASCIIToUTF16("Canada"), &index); |
| 767 EXPECT_TRUE(ret); | 773 EXPECT_TRUE(ret); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 index = kBadIndex; | 807 index = kBadIndex; |
| 802 ret = AutofillField::FindValueInSelectControl( | 808 ret = AutofillField::FindValueInSelectControl( |
| 803 field, UTF8ToUTF16("NoVaScOtIa"), &index); | 809 field, UTF8ToUTF16("NoVaScOtIa"), &index); |
| 804 EXPECT_TRUE(ret); | 810 EXPECT_TRUE(ret); |
| 805 EXPECT_EQ(2U, index); | 811 EXPECT_EQ(2U, index); |
| 806 } | 812 } |
| 807 } | 813 } |
| 808 | 814 |
| 809 } // namespace | 815 } // namespace |
| 810 } // namespace autofill | 816 } // namespace autofill |
| OLD | NEW |