================
@@ -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

Reply via email to