//===- TreeTestBase.h -----------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // This file provides the test infrastructure for syntax trees. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_UNITTESTS_TOOLING_SYNTAX_TREETESTBASE_H #define LLVM_CLANG_UNITTESTS_TOOLING_SYNTAX_TREETESTBASE_H #include "clang/Basic/LLVM.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Testing/TestClangConfig.h" #include "clang/Tooling/Syntax/Nodes.h" #include "clang/Tooling/Syntax/Tokens.h" #include "clang/Tooling/Syntax/Tree.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/ScopedPrinter.h" #include "llvm/Testing/Support/Annotations.h" #include "gmock/gmock.h" #include "gtest/gtest.h" namespace clang { namespace syntax { class SyntaxTreeTest : public ::testing::Test, public ::testing::WithParamInterface { protected: // Build a syntax tree for the code. TranslationUnit *buildTree(StringRef Code, const TestClangConfig &ClangConfig); /// Finds the deepest node in the tree that covers exactly \p R. /// FIXME: implement this efficiently and move to public syntax tree API. syntax::Node *nodeByRange(llvm::Annotations::Range R, syntax::Node *Root); // Data fields. IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); IntrusiveRefCntPtr Diags = new DiagnosticsEngine(new DiagnosticIDs, DiagOpts.get()); IntrusiveRefCntPtr FS = new llvm::vfs::InMemoryFileSystem; IntrusiveRefCntPtr FileMgr = new FileManager(FileSystemOptions(), FS); IntrusiveRefCntPtr SourceMgr = new SourceManager(*Diags, *FileMgr); std::shared_ptr Invocation; // Set after calling buildTree(). std::unique_ptr TB; std::unique_ptr Arena; }; std::vector allTestClangConfigs(); MATCHER_P(role, R, "") { if (arg.getRole() == R) return true; *result_listener << "role is " << llvm::to_string(arg.getRole()); return false; } } // namespace syntax } // namespace clang #endif // LLVM_CLANG_UNITTESTS_TOOLING_SYNTAX_TREETESTBASE_H