OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/memory/scoped_vector.h" | |
6 #include "base/strings/string16.h" | |
7 #include "base/strings/utf_string_conversions.h" | |
8 #include "components/autofill/browser/autofill_field.h" | |
9 #include "components/autofill/browser/form_field.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 namespace autofill { | |
13 | |
14 TEST(FormFieldTest, Match) { | |
15 AutofillField field; | |
16 | |
17 // Empty strings match. | |
18 EXPECT_TRUE(FormField::Match(&field, base::string16(), | |
19 FormField::MATCH_LABEL)); | |
20 | |
21 // Empty pattern matches non-empty string. | |
22 field.label = ASCIIToUTF16("a"); | |
23 EXPECT_TRUE(FormField::Match(&field, base::string16(), | |
24 FormField::MATCH_LABEL)); | |
25 | |
26 // Strictly empty pattern matches empty string. | |
27 field.label = base::string16(); | |
28 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^$"), | |
29 FormField::MATCH_LABEL)); | |
30 | |
31 // Strictly empty pattern does not match non-empty string. | |
32 field.label = ASCIIToUTF16("a"); | |
33 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^$"), | |
34 FormField::MATCH_LABEL)); | |
35 | |
36 // Non-empty pattern doesn't match empty string. | |
37 field.label = base::string16(); | |
38 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("a"), | |
39 FormField::MATCH_LABEL)); | |
40 | |
41 // Beginning of line. | |
42 field.label = ASCIIToUTF16("head_tail"); | |
43 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^head"), | |
44 FormField::MATCH_LABEL)); | |
45 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^tail"), | |
46 FormField::MATCH_LABEL)); | |
47 | |
48 // End of line. | |
49 field.label = ASCIIToUTF16("head_tail"); | |
50 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("head$"), | |
51 FormField::MATCH_LABEL)); | |
52 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("tail$"), | |
53 FormField::MATCH_LABEL)); | |
54 | |
55 // Exact. | |
56 field.label = ASCIIToUTF16("head_tail"); | |
57 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^head$"), | |
58 FormField::MATCH_LABEL)); | |
59 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^tail$"), | |
60 FormField::MATCH_LABEL)); | |
61 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^head_tail$"), | |
62 FormField::MATCH_LABEL)); | |
63 | |
64 // Escaped dots. | |
65 field.label = ASCIIToUTF16("m.i."); | |
66 // Note: This pattern is misleading as the "." characters are wild cards. | |
67 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m.i."), | |
68 FormField::MATCH_LABEL)); | |
69 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m\\.i\\."), | |
70 FormField::MATCH_LABEL)); | |
71 field.label = ASCIIToUTF16("mXiX"); | |
72 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m.i."), | |
73 FormField::MATCH_LABEL)); | |
74 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("m\\.i\\."), | |
75 FormField::MATCH_LABEL)); | |
76 | |
77 // Repetition. | |
78 field.label = ASCIIToUTF16("headtail"); | |
79 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.*tail"), | |
80 FormField::MATCH_LABEL)); | |
81 field.label = ASCIIToUTF16("headXtail"); | |
82 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.*tail"), | |
83 FormField::MATCH_LABEL)); | |
84 field.label = ASCIIToUTF16("headXXXtail"); | |
85 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.*tail"), | |
86 FormField::MATCH_LABEL)); | |
87 field.label = ASCIIToUTF16("headtail"); | |
88 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("head.+tail"), | |
89 FormField::MATCH_LABEL)); | |
90 field.label = ASCIIToUTF16("headXtail"); | |
91 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.+tail"), | |
92 FormField::MATCH_LABEL)); | |
93 field.label = ASCIIToUTF16("headXXXtail"); | |
94 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.+tail"), | |
95 FormField::MATCH_LABEL)); | |
96 | |
97 // Alternation. | |
98 field.label = ASCIIToUTF16("head_tail"); | |
99 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head|other"), | |
100 FormField::MATCH_LABEL)); | |
101 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("tail|other"), | |
102 FormField::MATCH_LABEL)); | |
103 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("bad|good"), | |
104 FormField::MATCH_LABEL)); | |
105 | |
106 // Case sensitivity. | |
107 field.label = ASCIIToUTF16("xxxHeAd_tAiLxxx"); | |
108 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head_tail"), | |
109 FormField::MATCH_LABEL)); | |
110 | |
111 // Word boundaries. | |
112 field.label = ASCIIToUTF16("contains word:"); | |
113 EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("\\bword\\b"), | |
114 FormField::MATCH_LABEL)); | |
115 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("\\bcon\\b"), | |
116 FormField::MATCH_LABEL)); | |
117 // Make sure the circumflex in 'crepe' is not treated as a word boundary. | |
118 field.label = UTF8ToUTF16("cr" "\xC3\xAA" "pe"); | |
119 EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("\\bcr\\b"), | |
120 FormField::MATCH_LABEL)); | |
121 } | |
122 | |
123 // Test that we ignore checkable elements. | |
124 TEST(FormFieldTest, ParseFormFields) { | |
125 ScopedVector<AutofillField> fields; | |
126 FormFieldData field_data; | |
127 field_data.form_control_type = "text"; | |
128 | |
129 field_data.label = ASCIIToUTF16("Address line1"); | |
130 fields.push_back(new AutofillField(field_data, field_data.label)); | |
131 | |
132 field_data.is_checkable = true; | |
133 field_data.label = ASCIIToUTF16("Is PO Box"); | |
134 fields.push_back(new AutofillField(field_data, field_data.label)); | |
135 | |
136 // reset is_checkable to false. | |
137 field_data.is_checkable = false; | |
138 field_data.label = ASCIIToUTF16("Address line2"); | |
139 fields.push_back(new AutofillField(field_data, field_data.label)); | |
140 | |
141 FieldTypeMap field_type_map; | |
142 FormField::ParseFormFields(fields.get(), &field_type_map); | |
143 // Checkable element shouldn't interfere with inference of Address line2. | |
144 EXPECT_EQ(2U, field_type_map.size()); | |
145 | |
146 EXPECT_EQ(ADDRESS_HOME_LINE1, | |
147 field_type_map.find(ASCIIToUTF16("Address line1"))->second); | |
148 EXPECT_EQ(ADDRESS_HOME_LINE2, | |
149 field_type_map.find(ASCIIToUTF16("Address line2"))->second); | |
150 } | |
151 | |
152 } // namespace autofill | |
OLD | NEW |