summaryrefslogtreecommitdiff
path: root/unittests
diff options
context:
space:
mode:
authorJan Korous <jkorous@apple.com>2019-09-03 22:01:46 +0000
committerJan Korous <jkorous@apple.com>2019-09-03 22:01:46 +0000
commitcb57fe36feaa1b01253a354795b728f503aac39c (patch)
treefd2345a7a66b9266d5d52ef659547e34e476f1d4 /unittests
parent9678410799615bdbf800fbb1d6b8c036061d9401 (diff)
downloadclang-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.cpp72
-rw-r--r--unittests/libclang/TestUtils.h94
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