Index: components/autofill/core/browser/webdata/autofill_table_unittest.cc |
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc |
index f3cf2006b1ac6c27f43c08654179e51bc4bea717..af71b6c9b660b925590f67829c0d2d28cfc4dbfd 100644 |
--- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc |
+++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc |
@@ -5,6 +5,7 @@ |
#include <utility> |
#include <vector> |
+#include "base/command_line.h" |
#include "base/files/file_util.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/guid.h" |
@@ -21,6 +22,8 @@ |
#include "components/autofill/core/browser/webdata/autofill_change.h" |
#include "components/autofill/core/browser/webdata/autofill_entry.h" |
#include "components/autofill/core/browser/webdata/autofill_table.h" |
+#include "components/autofill/core/common/autofill_switches.h" |
+#include "components/autofill/core/common/autofill_util.h" |
#include "components/autofill/core/common/form_field_data.h" |
#include "components/os_crypt/os_crypt.h" |
#include "components/webdata/common/web_database.h" |
@@ -1856,4 +1859,60 @@ TEST_F(AutofillTableTest, DeleteUnmaskedCard) { |
outputs.clear(); |
} |
+TEST_F(AutofillTableTest, GetFormValuesForElementName_SubstringMatchEnabled) { |
+ // Token matching is currently behind a flag. |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ autofill::switches::kEnableSuggestionsWithSubstringMatch); |
+ |
+ const size_t kMaxCount = 2; |
+ const struct { |
+ const char* const field_suggestion[kMaxCount]; |
+ const char* const field_contents; |
+ size_t expected_suggestion_count; |
+ const char* const expected_suggestion[kMaxCount]; |
+ } kTestCases[] = { |
+ {{"user.test", "test_user"}, "TEST", 2, {"test_user", "user.test"}}, |
+ {{"user test", "test-user"}, "user", 2, {"user test", "test-user"}}, |
+ {{"user test", "test-rest"}, "user", 1, {"user test", nullptr}}, |
+ {{"user@test", "test_user"}, "user@t", 1, {"user@test", nullptr}}, |
+ {{"user.test", "test_user"}, "er.tes", 0, {nullptr, nullptr}}, |
+ {{"user test", "test_user"}, "_ser", 0, {nullptr, nullptr}}, |
+ {{"user.test", "test_user"}, "%ser", 0, {nullptr, nullptr}}, |
+ {{"user.test", "test_user"}, |
+ "; DROP TABLE autofill;", |
+ 0, |
+ {nullptr, nullptr}}, |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(kTestCases); ++i) { |
+ SCOPED_TRACE(testing::Message() |
+ << "suggestion = " << kTestCases[i].field_suggestion[0] |
+ << ", contents = " << kTestCases[i].field_contents); |
+ |
+ Time t1 = Time::Now(); |
+ |
+ // Simulate the submission of a handful of entries in a field called "Name". |
+ AutofillChangeList changes; |
+ FormFieldData field; |
+ for (size_t k = 0; k < kMaxCount; ++k) { |
+ field.name = ASCIIToUTF16("Name"); |
+ field.value = ASCIIToUTF16(kTestCases[i].field_suggestion[k]); |
+ table_->AddFormFieldValue(field, &changes); |
+ } |
+ |
+ std::vector<base::string16> v; |
+ table_->GetFormValuesForElementName( |
+ ASCIIToUTF16("Name"), ASCIIToUTF16(kTestCases[i].field_contents), &v, |
+ 6); |
+ |
+ EXPECT_EQ(kTestCases[i].expected_suggestion_count, v.size()); |
+ for (size_t j = 0; j < kTestCases[i].expected_suggestion_count; ++j) { |
+ EXPECT_EQ(ASCIIToUTF16(kTestCases[i].expected_suggestion[j]), v[j]); |
+ } |
+ |
+ changes.clear(); |
+ table_->RemoveFormElementsAddedBetween(t1, Time(), &changes); |
+ } |
+} |
+ |
} // namespace autofill |