================ @@ -46,20 +46,65 @@ TEST(ClangTidyOptionsProvider, InMemoryFileSystems) { FileOptionsProvider FileOpt({}, {}, {}, FileSystem); - ClangTidyOptions File1Options = + llvm::ErrorOr<ClangTidyOptions> File1Options = FileOpt.getOptions("ProjectRoot/SubDir1/File.cpp"); - ClangTidyOptions File2Options = + llvm::ErrorOr<ClangTidyOptions> File2Options = FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/File.cpp"); - ClangTidyOptions File3Options = + llvm::ErrorOr<ClangTidyOptions> File3Options = FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/SubDir3/File.cpp"); - ASSERT_TRUE(File1Options.Checks.has_value()); - EXPECT_EQ(*File1Options.Checks, "-*,clang-diagnostic-*,readability-*"); - ASSERT_TRUE(File2Options.Checks.has_value()); - EXPECT_EQ(*File2Options.Checks, "bugprone-*,misc-*,clang-diagnostic-*"); + ASSERT_TRUE(File1Options->Checks.has_value()); + EXPECT_EQ(*File1Options->Checks, "-*,clang-diagnostic-*,readability-*"); + ASSERT_TRUE(File2Options->Checks.has_value()); + EXPECT_EQ(*File2Options->Checks, "bugprone-*,misc-*,clang-diagnostic-*"); // 2 and 3 should use the same config so these should also be the same. - EXPECT_EQ(File2Options.Checks, File3Options.Checks); + EXPECT_EQ(File2Options->Checks, File3Options->Checks); +} + +TEST(ClangTidyOptionsProvider, InvalidConfigurationFiles) { + llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> FileSystem( + new llvm::vfs::InMemoryFileSystem); + + StringRef BaseClangTidy = R"( + Checks: -*,clang-diagnostic-* + Unexpected + )"; + StringRef Sub1ClangTidy = R"( + Checks: readability-* + InheritParentConfig: true + )"; + StringRef Sub2ClangTidy = R"( + Checks: bugprone-*,misc-*,clang-diagnostic-* + InheritParentConfig: false + )"; + FileSystem->addFile("ProjectRoot/.clang-tidy", 0, + llvm::MemoryBuffer::getMemBuffer(BaseClangTidy)); + FileSystem->addFile("ProjectRoot/File.cpp", 0, + llvm::MemoryBuffer::getMemBuffer("")); + FileSystem->addFile("ProjectRoot/SubDir1/.clang-tidy", 0, + llvm::MemoryBuffer::getMemBuffer(Sub1ClangTidy)); + FileSystem->addFile("ProjectRoot/SubDir1/File.cpp", 0, + llvm::MemoryBuffer::getMemBuffer("")); + FileSystem->addFile("ProjectRoot/SubDir1/SubDir2/.clang-tidy", 0, + llvm::MemoryBuffer::getMemBuffer(Sub2ClangTidy)); + FileSystem->addFile("ProjectRoot/SubDir1/SubDir2/File.cpp", 0, + llvm::MemoryBuffer::getMemBuffer("")); + + FileOptionsProvider FileOpt({}, {}, {}, FileSystem); + + llvm::ErrorOr<ClangTidyOptions> File1Options = + FileOpt.getOptions("ProjectRoot/File.cpp"); + llvm::ErrorOr<ClangTidyOptions> File2Options = + FileOpt.getOptions("ProjectRoot/SubDir1/File.cpp"); + llvm::ErrorOr<ClangTidyOptions> File3Options = + FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/File.cpp"); + + ASSERT_TRUE(!File1Options); ---------------- galenelias wrote:
Yah, sorry - wasn't being very idiomatic here. Cleaned them up. I don't think we need the negations or double negations to coerce to booleans, it seems like we can just use the ASSERT_ macros directly. Not sure why I formulated them this way. Apologies. https://github.com/llvm/llvm-project/pull/136167 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits