1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "testing/gtest/include/gtest/gtest.h" 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "tools/gn/pattern.h" 76806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.org 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comnamespace { 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct Case { 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* pattern; 125da3f220034f89f3234b16b98bd86e7246941ffecommit-bot@chromium.org const char* candidate; 135da3f220034f89f3234b16b98bd86e7246941ffecommit-bot@chromium.org bool expected_match; 140716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com}; 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 168c3ff17e2cab6f7c798b9f8ff4515c4a3d3fd9d1bsalomon@google.com} // namespace 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 180456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.comTEST(Pattern, Matches) { 190456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com Case pattern_cases[] = { 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Empty pattern matches only empty string. 210e2810be95d3f1aa95c341521d3f514eb9e9ebdemike@reedtribe.org { "", "", true }, 220716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "", "foo", false }, 230716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com // Exact matches. 240716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "foo", "foo", true }, 250716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "foo", "bar", false }, 26842292f10fc08bc8701114f7eec00944b6ea26d2reed@google.com // Path boundaries. 27842292f10fc08bc8701114f7eec00944b6ea26d2reed@google.com { "\\b", "", true }, 280716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\b", "/", true }, 290e2810be95d3f1aa95c341521d3f514eb9e9ebdemike@reedtribe.org { "\\b\\b", "/", true }, 300716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\b\\b\\b", "", false }, 310716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\b\\b\\b", "/", true }, 320716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\b", "//", false }, 330716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\bfoo\\b", "foo", true }, 340716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\bfoo\\b", "/foo/", true }, 350716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "\\b\\bfoo", "/foo", true }, 360716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com // * 37fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com { "*", "", true }, 388426058dee0faf75a18b81cfcde47ee8ab8c31d9reed@google.com { "*", "foo", true }, 398426058dee0faf75a18b81cfcde47ee8ab8c31d9reed@google.com { "*foo", "foo", true }, 408426058dee0faf75a18b81cfcde47ee8ab8c31d9reed@google.com { "*foo", "gagafoo", true }, 418426058dee0faf75a18b81cfcde47ee8ab8c31d9reed@google.com { "*foo", "gagafoob", false }, 42842292f10fc08bc8701114f7eec00944b6ea26d2reed@google.com { "foo*bar", "foobar", true }, 438426058dee0faf75a18b81cfcde47ee8ab8c31d9reed@google.com { "foo*bar", "foo-bar", true }, 441f90287df3129cb267422e482c52ebeca6a8990ftomhudson@google.com { "foo*bar", "foolalalalabar", true }, 45fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com { "foo*bar", "foolalalalabaz", false }, 460e2810be95d3f1aa95c341521d3f514eb9e9ebdemike@reedtribe.org { "*a*b*c*d*", "abcd", true }, 470e2810be95d3f1aa95c341521d3f514eb9e9ebdemike@reedtribe.org { "*a*b*c*d*", "1a2b3c4d5", true }, 480716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "*a*b*c*d*", "1a2b3c45", false }, 490716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "*\\bfoo\\b*", "foo", true }, 500716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "*\\bfoo\\b*", "/foo/", true }, 510716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "*\\bfoo\\b*", "foob", false }, 520716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com { "*\\bfoo\\b*", "lala/foo/bar/baz", true }, 530716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com }; 540716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com for (size_t i = 0; i < arraysize(pattern_cases); i++) { 550716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com const Case& c = pattern_cases[i]; 560716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com Pattern pattern(c.pattern); 570716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com bool result = pattern.MatchesString(c.candidate); 580716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com EXPECT_EQ(c.expected_match, result) << i << ": \"" << c.pattern 590716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com << "\", \"" << c.candidate << "\""; 608c3ff17e2cab6f7c798b9f8ff4515c4a3d3fd9d1bsalomon@google.com } 610716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com} 620716c63332a64c3cc77a9afb87ae2fd9614f0c4freed@google.com