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