diff options
author | Jan Korous <jkorous@apple.com> | 2019-09-03 22:01:46 +0000 |
---|---|---|
committer | Jan Korous <jkorous@apple.com> | 2019-09-03 22:01:46 +0000 |
commit | cb57fe36feaa1b01253a354795b728f503aac39c (patch) | |
tree | fd2345a7a66b9266d5d52ef659547e34e476f1d4 /unittests | |
parent | 9678410799615bdbf800fbb1d6b8c036061d9401 (diff) | |
download | clang-cb57fe36feaa1b01253a354795b728f503aac39c.tar.gz |
[libclang][test][NFC] Split off fixture from tests.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370825 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/libclang/LibclangTest.cpp | 72 | ||||
-rw-r--r-- | unittests/libclang/TestUtils.h | 94 |
2 files changed, 95 insertions, 71 deletions
diff --git a/unittests/libclang/LibclangTest.cpp b/unittests/libclang/LibclangTest.cpp index b3ad5c705b..e2e3a8e887 100644 --- a/unittests/libclang/LibclangTest.cpp +++ b/unittests/libclang/LibclangTest.cpp @@ -13,6 +13,7 @@ #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" +#include "TestUtils.h" #include <fstream> #include <functional> #include <map> @@ -352,77 +353,6 @@ TEST(libclang, ModuleMapDescriptor) { clang_ModuleMapDescriptor_dispose(MMD); } -class LibclangParseTest : public ::testing::Test { - std::set<std::string> Files; - typedef std::unique_ptr<std::string> fixed_addr_string; - std::map<fixed_addr_string, fixed_addr_string> UnsavedFileContents; -public: - std::string TestDir; - CXIndex Index; - CXTranslationUnit ClangTU; - unsigned TUFlags; - std::vector<CXUnsavedFile> UnsavedFiles; - - void SetUp() override { - llvm::SmallString<256> Dir; - ASSERT_FALSE(llvm::sys::fs::createUniqueDirectory("libclang-test", Dir)); - TestDir = Dir.str(); - TUFlags = CXTranslationUnit_DetailedPreprocessingRecord | - clang_defaultEditingTranslationUnitOptions(); - Index = clang_createIndex(0, 0); - ClangTU = nullptr; - } - void TearDown() override { - clang_disposeTranslationUnit(ClangTU); - clang_disposeIndex(Index); - for (const std::string &Path : Files) - llvm::sys::fs::remove(Path); - llvm::sys::fs::remove(TestDir); - } - void WriteFile(std::string &Filename, const std::string &Contents) { - if (!llvm::sys::path::is_absolute(Filename)) { - llvm::SmallString<256> Path(TestDir); - llvm::sys::path::append(Path, Filename); - Filename = Path.str(); - Files.insert(Filename); - } - llvm::sys::fs::create_directories(llvm::sys::path::parent_path(Filename)); - std::ofstream OS(Filename); - OS << Contents; - assert(OS.good()); - } - void MapUnsavedFile(std::string Filename, const std::string &Contents) { - if (!llvm::sys::path::is_absolute(Filename)) { - llvm::SmallString<256> Path(TestDir); - llvm::sys::path::append(Path, Filename); - Filename = Path.str(); - } - auto it = UnsavedFileContents.insert(std::make_pair( - fixed_addr_string(new std::string(Filename)), - fixed_addr_string(new std::string(Contents)))); - UnsavedFiles.push_back({ - it.first->first->c_str(), // filename - it.first->second->c_str(), // contents - it.first->second->size() // length - }); - } - template<typename F> - void Traverse(const F &TraversalFunctor) { - CXCursor TuCursor = clang_getTranslationUnitCursor(ClangTU); - std::reference_wrapper<const F> FunctorRef = std::cref(TraversalFunctor); - clang_visitChildren(TuCursor, - &TraverseStateless<std::reference_wrapper<const F>>, - &FunctorRef); - } -private: - template<typename TState> - static CXChildVisitResult TraverseStateless(CXCursor cx, CXCursor parent, - CXClientData data) { - TState *State = static_cast<TState*>(data); - return State->get()(cx, parent); - } -}; - TEST_F(LibclangParseTest, AllSkippedRanges) { std::string Header = "header.h", Main = "main.cpp"; WriteFile(Header, diff --git a/unittests/libclang/TestUtils.h b/unittests/libclang/TestUtils.h new file mode 100644 index 0000000000..883155ec81 --- /dev/null +++ b/unittests/libclang/TestUtils.h @@ -0,0 +1,94 @@ +//===- unittests/libclang/TestUtils.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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TEST_TESTUTILS_H +#define LLVM_CLANG_TEST_TESTUTILS_H + +#include "clang-c/Index.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" + +#include <fstream> +#include <memory> +#include <string> +#include <vector> +#include "gtest/gtest.h" + +class LibclangParseTest : public ::testing::Test { + std::set<std::string> Files; + typedef std::unique_ptr<std::string> fixed_addr_string; + std::map<fixed_addr_string, fixed_addr_string> UnsavedFileContents; +public: + std::string TestDir; + CXIndex Index; + CXTranslationUnit ClangTU; + unsigned TUFlags; + std::vector<CXUnsavedFile> UnsavedFiles; + + void SetUp() override { + llvm::SmallString<256> Dir; + ASSERT_FALSE(llvm::sys::fs::createUniqueDirectory("libclang-test", Dir)); + TestDir = Dir.str(); + TUFlags = CXTranslationUnit_DetailedPreprocessingRecord | + clang_defaultEditingTranslationUnitOptions(); + Index = clang_createIndex(0, 0); + ClangTU = nullptr; + } + void TearDown() override { + clang_disposeTranslationUnit(ClangTU); + clang_disposeIndex(Index); + for (const std::string &Path : Files) + llvm::sys::fs::remove(Path); + llvm::sys::fs::remove(TestDir); + } + void WriteFile(std::string &Filename, const std::string &Contents) { + if (!llvm::sys::path::is_absolute(Filename)) { + llvm::SmallString<256> Path(TestDir); + llvm::sys::path::append(Path, Filename); + Filename = Path.str(); + Files.insert(Filename); + } + llvm::sys::fs::create_directories(llvm::sys::path::parent_path(Filename)); + std::ofstream OS(Filename); + OS << Contents; + assert(OS.good()); + } + void MapUnsavedFile(std::string Filename, const std::string &Contents) { + if (!llvm::sys::path::is_absolute(Filename)) { + llvm::SmallString<256> Path(TestDir); + llvm::sys::path::append(Path, Filename); + Filename = Path.str(); + } + auto it = UnsavedFileContents.insert(std::make_pair( + fixed_addr_string(new std::string(Filename)), + fixed_addr_string(new std::string(Contents)))); + UnsavedFiles.push_back({ + it.first->first->c_str(), // filename + it.first->second->c_str(), // contents + it.first->second->size() // length + }); + } + template<typename F> + void Traverse(const F &TraversalFunctor) { + CXCursor TuCursor = clang_getTranslationUnitCursor(ClangTU); + std::reference_wrapper<const F> FunctorRef = std::cref(TraversalFunctor); + clang_visitChildren(TuCursor, + &TraverseStateless<std::reference_wrapper<const F>>, + &FunctorRef); + } +private: + template<typename TState> + static CXChildVisitResult TraverseStateless(CXCursor cx, CXCursor parent, + CXClientData data) { + TState *State = static_cast<TState*>(data); + return State->get()(cx, parent); + } +}; + +#endif // LLVM_CLANG_TEST_TESTUTILS_H
\ No newline at end of file |