//===- unittest/Format/MatchFilePathTest.cpp ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "../../lib/Format/MatchFilePath.h"
#include "gtest/gtest.h"

namespace clang {
namespace format {
namespace {

class MatchFilePathTest : public ::testing::Test {
protected:
  bool match(llvm::StringRef FilePath, llvm::StringRef Pattern) {
    return matchFilePath(Pattern, FilePath);
  }
};

// Most of the test cases below are from:
// https://github.com/python/cpython/blob/main/Lib/test/test_fnmatch.py

TEST_F(MatchFilePathTest, Wildcard) {
  EXPECT_TRUE(match("abc", "?*?"));
  EXPECT_TRUE(match("abc", "???*"));
  EXPECT_TRUE(match("abc", "*???"));
  EXPECT_TRUE(match("abc", "???"));
  EXPECT_TRUE(match("abc", "*"));
  EXPECT_TRUE(match("abc", "ab[cd]"));
  EXPECT_TRUE(match("abc", "ab[!de]"));
  EXPECT_FALSE(match("abc", "ab[de]"));
  EXPECT_FALSE(match("a", "??"));
  EXPECT_FALSE(match("a", "b"));
}

TEST_F(MatchFilePathTest, Backslash) {
  EXPECT_TRUE(match("a?", R"(a\?)"));
  EXPECT_FALSE(match("a\\", R"(a\)"));
  EXPECT_TRUE(match("\\", R"([\])"));
  EXPECT_TRUE(match("a", R"([!\])"));
  EXPECT_FALSE(match("\\", R"([!\])"));
}

TEST_F(MatchFilePathTest, Newline) {
  EXPECT_TRUE(match("foo\nbar", "foo*"));
  EXPECT_TRUE(match("foo\nbar\n", "foo*"));
  EXPECT_FALSE(match("\nfoo", "foo*"));
  EXPECT_TRUE(match("\n", "*"));
}

TEST_F(MatchFilePathTest, Star) {
  EXPECT_TRUE(match(std::string(50, 'a'), "*a*a*a*a*a*a*a*a*a*a"));
  EXPECT_FALSE(match((std::string(50, 'a') + 'b'), "*a*a*a*a*a*a*a*a*a*a"));
}

TEST_F(MatchFilePathTest, CaseSensitive) {
  EXPECT_TRUE(match("abc", "abc"));
  EXPECT_FALSE(match("AbC", "abc"));
  EXPECT_FALSE(match("abc", "AbC"));
  EXPECT_TRUE(match("AbC", "AbC"));
}

TEST_F(MatchFilePathTest, PathSeparators) {
  EXPECT_TRUE(match("usr/bin", "usr/bin"));
  EXPECT_TRUE(match("usr\\bin", R"(usr\\bin)"));
}

TEST_F(MatchFilePathTest, NumericEscapeSequence) {
  EXPECT_TRUE(match("test", "te*"));
  EXPECT_TRUE(match("test\xff", "te*\xff"));
  EXPECT_TRUE(match("foo\nbar", "foo*"));
}

TEST_F(MatchFilePathTest, ValidBrackets) {
  EXPECT_TRUE(match("z", "[az]"));
  EXPECT_FALSE(match("z", "[!az]"));
  EXPECT_TRUE(match("a", "[aa]"));
  EXPECT_TRUE(match("^", "[^az]"));
  EXPECT_TRUE(match("[", "[[az]"));
  EXPECT_FALSE(match("]", "[!]]"));
}

TEST_F(MatchFilePathTest, InvalidBrackets) {
  EXPECT_TRUE(match("[", "["));
  EXPECT_TRUE(match("[]", "[]"));
  EXPECT_TRUE(match("[!", "[!"));
  EXPECT_TRUE(match("[!]", "[!]"));
}

TEST_F(MatchFilePathTest, Range) {
  EXPECT_TRUE(match("c", "[b-d]"));
  EXPECT_FALSE(match("c", "[!b-d]"));
  EXPECT_TRUE(match("y", "[b-dx-z]"));
  EXPECT_FALSE(match("y", "[!b-dx-z]"));
}

TEST_F(MatchFilePathTest, Hyphen) {
  EXPECT_FALSE(match("#", "[!-#]"));
  EXPECT_FALSE(match("-", "[!--.]"));
  EXPECT_TRUE(match("_", "[^-`]"));
  EXPECT_TRUE(match("]", "[[-^]"));
  EXPECT_TRUE(match("]", R"([\-^])"));
  EXPECT_TRUE(match("-", "[b-]"));
  EXPECT_FALSE(match("-", "[!b-]"));
  EXPECT_TRUE(match("-", "[-b]"));
  EXPECT_FALSE(match("-", "[!-b]"));
  EXPECT_TRUE(match("-", "[-]"));
  EXPECT_FALSE(match("-", "[!-]"));
}

TEST_F(MatchFilePathTest, UpperLELower) {
  EXPECT_FALSE(match("c", "[d-b]"));
  EXPECT_TRUE(match("c", "[!d-b]"));
  EXPECT_TRUE(match("y", "[d-bx-z]"));
  EXPECT_FALSE(match("y", "[!d-bx-z]"));
  EXPECT_TRUE(match("_", "[d-b^-`]"));
  EXPECT_TRUE(match("]", "[d-b[-^]"));
  EXPECT_TRUE(match("b", "[b-b]"));
}

TEST_F(MatchFilePathTest, SlashAndBackslashInBrackets) {
  EXPECT_FALSE(match("/", "[/]"));
  EXPECT_TRUE(match("\\", R"([\])"));
  EXPECT_TRUE(match("[/]", "[/]"));
  EXPECT_TRUE(match("\\", R"([\t])"));
  EXPECT_TRUE(match("t", R"([\t])"));
  EXPECT_FALSE(match("\t", R"([\t])"));
}

TEST_F(MatchFilePathTest, SlashAndBackslashInRange) {
  EXPECT_FALSE(match("a/b", "a[.-0]b"));
  EXPECT_TRUE(match("a\\b", "a[Z-^]b"));
  EXPECT_FALSE(match("a/b", "a[/-0]b"));
  EXPECT_TRUE(match("a[/-0]b", "a[/-0]b"));
  EXPECT_FALSE(match("a/b", "a[.-/]b"));
  EXPECT_TRUE(match("a[.-/]b", "a[.-/]b"));
  EXPECT_TRUE(match("a\\b", R"(a[\-^]b)"));
  EXPECT_TRUE(match("a\\b", R"(a[Z-\]b)"));
}

TEST_F(MatchFilePathTest, Brackets) {
  EXPECT_TRUE(match("[", "[[]"));
  EXPECT_TRUE(match("&", "[a&&b]"));
  EXPECT_TRUE(match("|", "[a||b]"));
  EXPECT_TRUE(match("~", "[a~~b]"));
  EXPECT_TRUE(match(",", "[a-z+--A-Z]"));
  EXPECT_FALSE(match(".", "[a-z--/A-Z]"));
}

TEST_F(MatchFilePathTest, Path) {
  EXPECT_TRUE(match(".clang-format", "*"));
  EXPECT_TRUE(match(".git", "*git*"));
  EXPECT_TRUE(match(".gitignore", "*git*"));
  EXPECT_TRUE(match("foo/bar", "foo*/*bar"));
  EXPECT_TRUE(match("foo/bar", "*/*"));
  EXPECT_TRUE(match("foo/bar", R"(*foo*\/*bar*)"));
  EXPECT_FALSE(match("foo/bar", "foo*"));
  EXPECT_FALSE(match("foo/bar", "foo?bar"));
  EXPECT_FALSE(match("foo/bar", "foo*bar"));
  EXPECT_FALSE(match("foobar", "foo*/*"));
  EXPECT_FALSE(match("foo\\", R"(foo*\)"));
}

} // namespace
} // namespace format
} // namespace clang
