1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be
33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file.
43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/autofill_field.h"
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/autofill/form_field.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "testing/gtest/include/gtest/gtest.h"
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace {
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST(FormFieldTest, Match) {
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField field;
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Empty strings match.
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, string16(), true));
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Empty pattern matches non-empty string.
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("a");
203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, string16(), true));
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Strictly empty pattern matches empty string.
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("");
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^$"), true));
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Strictly empty pattern does not match non-empty string.
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("a");
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^$"), true));
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Non-empty pattern doesn't match empty string.
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = string16();
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("a"), true));
333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Beginning of line.
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("head_tail");
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^head"), true));
373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^tail"), true));
383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // End of line.
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("head_tail");
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("head$"), true));
423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("tail$"), true));
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Exact.
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("head_tail");
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^head$"), true));
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^tail$"), true));
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^head_tail$"), true));
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Escaped dots.
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("m.i.");
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Note: This pattern is misleading as the "." characters are wild cards.
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m.i."), true));
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m\\.i\\."), true));
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("mXiX");
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m.i."), true));
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("m\\.i\\."), true));
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Repetition.
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("headtail");
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.*tail"), true));
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("headXtail");
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.*tail"), true));
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("headXXXtail");
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.*tail"), true));
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("headtail");
673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("head.+tail"), true));
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("headXtail");
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.+tail"), true));
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("headXXXtail");
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head.+tail"), true));
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Alternation.
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("head_tail");
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head|other"), true));
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("tail|other"), true));
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("bad|good"), true));
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Case sensitivity.
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.label = ASCIIToUTF16("xxxHeAd_tAiLxxx");
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head_tail"), true));
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}  // namespace
85