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