|  | //===---- ObjCModuleTest.cpp - clang-tidy ---------------------------------===// | 
|  | // | 
|  | // 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 "ClangTidyOptions.h" | 
|  | #include "clang/Basic/LLVM.h" | 
|  | #include "llvm/Support/MemoryBuffer.h" | 
|  | #include "llvm/Support/VirtualFileSystem.h" | 
|  | #include "gtest/gtest.h" | 
|  |  | 
|  | namespace clang { | 
|  | namespace tidy { | 
|  | namespace test { | 
|  |  | 
|  | TEST(ClangTidyOptionsProvider, InMemoryFileSystems) { | 
|  | llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> FileSystem( | 
|  | new llvm::vfs::InMemoryFileSystem); | 
|  |  | 
|  | StringRef BaseClangTidy = R"( | 
|  | Checks: -*,clang-diagnostic-* | 
|  | )"; | 
|  | 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/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("")); | 
|  | FileSystem->addFile("ProjectRoot/SubDir1/SubDir2/SubDir3/File.cpp", 0, | 
|  | llvm::MemoryBuffer::getMemBuffer("")); | 
|  |  | 
|  | FileOptionsProvider FileOpt({}, {}, {}, FileSystem); | 
|  |  | 
|  | ClangTidyOptions File1Options = | 
|  | FileOpt.getOptions("ProjectRoot/SubDir1/File.cpp"); | 
|  | ClangTidyOptions File2Options = | 
|  | FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/File.cpp"); | 
|  | 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-*"); | 
|  |  | 
|  | // 2 and 3 should use the same config so these should also be the same. | 
|  | EXPECT_EQ(File2Options.Checks, File3Options.Checks); | 
|  | } | 
|  |  | 
|  | } // namespace test | 
|  | } // namespace tidy | 
|  | } // namespace clang |