summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/cpp11-migrate
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/unittests/cpp11-migrate')
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt57
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp118
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/Makefile4
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp4
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp33
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp4
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp35
7 files changed, 154 insertions, 101 deletions
diff --git a/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt b/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt
index fcf678d3490..228de69b5c7 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt
+++ b/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt
@@ -1,26 +1,31 @@
-set(LLVM_LINK_COMPONENTS
- support
- )
-
-get_filename_component(CPP11_MIGRATE_SOURCE_DIR
- ${CMAKE_CURRENT_SOURCE_DIR}/../../cpp11-migrate REALPATH)
-include_directories(${CPP11_MIGRATE_SOURCE_DIR})
-
-add_extra_unittest(Cpp11MigrateTests
- FileOverridesTest.cpp
- ReformattingTest.cpp
- IncludeExcludeTest.cpp
- PerfSupportTest.cpp
- TransformTest.cpp
- UniqueHeaderNameTest.cpp
- IncludeDirectivesTest.cpp
- )
-
-target_link_libraries(Cpp11MigrateTests
- migrateCore
- clangFormat
- clangTooling
- clangBasic
- clangASTMatchers
- clangRewriteFrontend
- )
+set(LLVM_LINK_COMPONENTS
+ support
+ )
+
+get_filename_component(CPP11_MIGRATE_SOURCE_DIR
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../cpp11-migrate REALPATH)
+get_filename_component(ClangReplaceLocation
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../clang-replace/include" REALPATH)
+include_directories(
+ ${CPP11_MIGRATE_SOURCE_DIR}
+ ${ClangReplaceLocation}
+ )
+
+add_extra_unittest(Cpp11MigrateTests
+ FileOverridesTest.cpp
+ ReformattingTest.cpp
+ IncludeExcludeTest.cpp
+ PerfSupportTest.cpp
+ TransformTest.cpp
+ UniqueHeaderNameTest.cpp
+ IncludeDirectivesTest.cpp
+ )
+
+target_link_libraries(Cpp11MigrateTests
+ migrateCore
+ clangFormat
+ clangTooling
+ clangBasic
+ clangASTMatchers
+ clangRewriteFrontend
+ )
diff --git a/clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp
index fc54474af84..5404aeb579d 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp
@@ -8,56 +8,34 @@
//===----------------------------------------------------------------------===//
#include "Core/FileOverrides.h"
+#include "Core/Refactoring.h"
#include "gtest/gtest.h"
#include "VirtualFileHelper.h"
+#include "clang/Rewrite/Core/Rewriter.h"
using namespace clang;
using namespace clang::tooling;
-TEST(SourceOverridesTest, Interface) {
- llvm::StringRef FileName = "<test-file>";
- VirtualFileHelper VFHelper;
- VFHelper.mapFile(
- FileName,
- "std::vector<such_a_long_name_for_a_type>::const_iterator long_type =\n"
- " vec.begin();\n");
- SourceOverrides Overrides(FileName, /*TrackFileChanges=*/false);
-
- EXPECT_EQ(FileName, Overrides.getMainFileName());
- EXPECT_FALSE(Overrides.isSourceOverriden());
- EXPECT_FALSE(Overrides.isTrackingFileChanges());
-
- Replacements Replaces;
- unsigned ReplacementLength =
- strlen("std::vector<such_a_long_name_for_a_type>::const_iterator");
- Replaces.insert(
- Replacement(FileName, 0, ReplacementLength, "auto"));
- Overrides.applyReplacements(Replaces, VFHelper.getNewSourceManager());
- EXPECT_TRUE(Overrides.isSourceOverriden());
-
- std::string ExpectedContent = "auto long_type =\n"
- " vec.begin();\n";
- EXPECT_EQ(ExpectedContent, Overrides.getMainFileContent());
-}
-
-namespace {
-Replacement makeReplacement(unsigned Offset, unsigned Length,
- unsigned ReplacementLength) {
- return Replacement("", Offset, Length, std::string(ReplacementLength, '~'));
+static Replacement makeReplacement(unsigned Offset, unsigned Length,
+ unsigned ReplacementLength,
+ llvm::StringRef FilePath) {
+ return Replacement(FilePath, Offset, Length,
+ std::string(ReplacementLength, '~'));
}
// generate a set of replacements containing one element
-Replacements makeReplacements(unsigned Offset, unsigned Length,
- unsigned ReplacementLength) {
- Replacements Replaces;
- Replaces.insert(makeReplacement(Offset, Length, ReplacementLength));
+static ReplacementsVec makeReplacements(unsigned Offset, unsigned Length,
+ unsigned ReplacementLength,
+ llvm::StringRef FilePath = "~") {
+ ReplacementsVec Replaces;
+ Replaces.push_back(
+ makeReplacement(Offset, Length, ReplacementLength, FilePath));
return Replaces;
}
-bool equalRanges(Range A, Range B) {
+static bool equalRanges(Range A, Range B) {
return A.getOffset() == B.getOffset() && A.getLength() == B.getLength();
}
-} // end anonymous namespace
TEST(ChangedRangesTest, adjustChangedRangesShrink) {
ChangedRanges Changes;
@@ -139,3 +117,71 @@ TEST(ChangedRangesTest, adjustChangedRangesRangeResized) {
EXPECT_TRUE(
std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
}
+
+TEST(FileOverridesTest, applyOverrides) {
+
+ // Set up initial state
+ VirtualFileHelper VFHelper;
+
+ SmallString<128> fileAPath("fileA.cpp");
+ ASSERT_FALSE(llvm::sys::fs::make_absolute(fileAPath));
+ SmallString<128> fileBPath("fileB.cpp");
+ ASSERT_FALSE(llvm::sys::fs::make_absolute(fileBPath));
+ VFHelper.mapFile(fileAPath, "Content A");
+ VFHelper.mapFile(fileBPath, "Content B");
+ SourceManager &SM = VFHelper.getNewSourceManager();
+
+ // Fill a Rewriter with changes
+ Rewriter Rewrites(SM, LangOptions());
+ ReplacementsVec R(1, Replacement(fileAPath, 0, 7, "Stuff"));
+ ASSERT_TRUE(applyAllReplacements(R, Rewrites));
+
+ FileOverrides Overrides;
+ Overrides.updateState(Rewrites);
+
+ const FileOverrides::FileStateMap &State = Overrides.getState();
+
+ // Ensure state updated
+ ASSERT_TRUE(State.end() == State.find(fileBPath));
+ ASSERT_TRUE(State.begin() == State.find(fileAPath));
+ ASSERT_EQ("Stuff A", State.begin()->getValue());
+
+ Overrides.applyOverrides(SM);
+
+ const FileEntry *EntryA = SM.getFileManager().getFile(fileAPath);
+ FileID IdA = SM.translateFile(EntryA);
+ ASSERT_FALSE(IdA.isInvalid());
+
+ // Ensure the contents of the buffer matches what we'd expect.
+ const llvm::MemoryBuffer *BufferA = SM.getBuffer(IdA);
+ ASSERT_FALSE(0 == BufferA);
+ ASSERT_EQ("Stuff A", BufferA->getBuffer());
+}
+
+TEST(FileOverridesTest, adjustChangedRanges) {
+ SmallString<128> fileAPath("fileA.cpp");
+ ASSERT_FALSE(llvm::sys::fs::make_absolute(fileAPath));
+ SmallString<128> fileBPath("fileB.cpp");
+ ASSERT_FALSE(llvm::sys::fs::make_absolute(fileBPath));
+
+ replace::FileToReplacementsMap GroupedReplacements;
+ GroupedReplacements[fileAPath] = makeReplacements(0, 5, 4, fileAPath);
+ GroupedReplacements[fileBPath] = makeReplacements(10, 0, 6, fileBPath);
+
+ FileOverrides Overrides;
+
+ const FileOverrides::ChangeMap &Map = Overrides.getChangedRanges();
+
+ ASSERT_TRUE(Map.empty());
+
+ Overrides.adjustChangedRanges(GroupedReplacements);
+
+ ASSERT_TRUE(Map.end() != Map.find(fileAPath));
+ ASSERT_TRUE(Map.end() != Map.find(fileBPath));
+ const Range &RA = *Map.find(fileAPath)->second.begin();
+ EXPECT_EQ(0u, RA.getOffset());
+ EXPECT_EQ(4u, RA.getLength());
+ const Range &RB = *Map.find(fileBPath)->second.begin();
+ EXPECT_EQ(10u, RB.getOffset());
+ EXPECT_EQ(6u, RB.getLength());
+}
diff --git a/clang-tools-extra/unittests/cpp11-migrate/Makefile b/clang-tools-extra/unittests/cpp11-migrate/Makefile
index 270c523798b..2f4a59afd07 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/Makefile
+++ b/clang-tools-extra/unittests/cpp11-migrate/Makefile
@@ -13,7 +13,7 @@ include $(CLANG_LEVEL)/../../Makefile.config
TESTNAME = Cpp11MigrateTests
LINK_COMPONENTS := asmparser bitreader support MC MCParser option \
TransformUtils
-USEDLIBS = migrateCore.a clangFormat.a clangTooling.a clangFrontend.a \
+USEDLIBS = migrateCore.a clangFormat.a clangReplace.a clangTooling.a clangFrontend.a \
clangSerialization.a clangDriver.a clangRewriteFrontend.a \
clangRewriteCore.a clangParse.a clangSema.a clangAnalysis.a \
clangAST.a clangASTMatchers.a clangEdit.a clangLex.a \
@@ -21,5 +21,5 @@ USEDLIBS = migrateCore.a clangFormat.a clangTooling.a clangFrontend.a \
include $(CLANG_LEVEL)/Makefile
MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1
-CPP.Flags += -I$(PROJ_SRC_DIR)/../../cpp11-migrate
+CPP.Flags += -I$(PROJ_SRC_DIR)/../../cpp11-migrate -I$(PROJ_SRC_DIR)/../../clang-replace/include
include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
diff --git a/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp
index bbfb08e217c..81235481bff 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp
@@ -18,7 +18,7 @@ public:
TransformA(const TransformOptions &Options)
: Transform("TransformA", Options) {}
- virtual int apply(FileOverrides &,
+ virtual int apply(const FileOverrides &,
const tooling::CompilationDatabase &,
const std::vector<std::string> &) {
return 0;
@@ -34,7 +34,7 @@ public:
TransformB(const TransformOptions &Options)
: Transform("TransformB", Options) {}
- virtual int apply(FileOverrides &,
+ virtual int apply(const FileOverrides &,
const tooling::CompilationDatabase &,
const std::vector<std::string> &) {
return 0;
diff --git a/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp
index fcde6b81db4..b4b9a365478 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp
@@ -9,6 +9,7 @@
#include "Core/Reformatting.h"
#include "Core/FileOverrides.h"
+#include "Core/Refactoring.h"
#include "gtest/gtest.h"
#include "VirtualFileHelper.h"
@@ -19,9 +20,9 @@ namespace {
// convenience function to create a ChangedRanges containing one Range
ChangedRanges makeChangedRanges(unsigned Offset, unsigned Length) {
ChangedRanges Changes;
- Replacements Replaces;
+ ReplacementsVec Replaces;
- Replaces.insert(Replacement("", Offset, 0, std::string(Length, '~')));
+ Replaces.push_back(Replacement("", Offset, 0, std::string(Length, '~')));
Changes.adjustChangedRanges(Replaces);
return Changes;
}
@@ -35,16 +36,20 @@ TEST(Reformatter, SingleReformat) {
Reformatter ChangesReformatter(format::getLLVMStyle());
ChangedRanges Changes = makeChangedRanges(0, 6);
- tooling::Replacements Replaces = ChangesReformatter.reformatSingleFile(
- FileName, Changes, VFHelper.getNewSourceManager());
-
- SourceOverrides Overrides(FileName, /*TrackChanges=*/false);
- Overrides.applyReplacements(Replaces, VFHelper.getNewSourceManager());
-
- std::string Expected, Result;
-
- Expected = "int a;\n"
- "int b;\n";
- Result = Overrides.getMainFileContent();
- EXPECT_EQ(Expected, Result);
+ tooling::ReplacementsVec Replaces;
+ ChangesReformatter.reformatSingleFile(
+ FileName, Changes, VFHelper.getNewSourceManager(), Replaces);
+
+ // We expect the code above to reformatted like so:
+ //
+ // int a;
+ // int b;
+ //
+ // This test is slightly fragile since there's more than one Replacement that
+ // results in the above change. However, testing the result of applying the
+ // replacement is more trouble than it's worth in this context.
+ ASSERT_EQ(1u, Replaces.size());
+ EXPECT_EQ(3u, Replaces[0].getOffset());
+ EXPECT_EQ(2u, Replaces[0].getLength());
+ EXPECT_EQ(" ", Replaces[0].getReplacementText());
}
diff --git a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
index b8efc9b5840..75397bf7760 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
@@ -26,7 +26,7 @@ public:
DummyTransform(llvm::StringRef Name, const TransformOptions &Options)
: Transform(Name, Options) {}
- virtual int apply(FileOverrides &,
+ virtual int apply(const FileOverrides &,
const tooling::CompilationDatabase &,
const std::vector<std::string> &) { return 0; }
@@ -161,7 +161,7 @@ TEST(Transform, Timings) {
// Transform's handle* functions require FileOverrides to be set, even if
// there aren't any.
- FileOverrides Overrides(/*TrackFileChanges=*/false);
+ FileOverrides Overrides;
T.setOverrides(Overrides);
Tool.run(clang::tooling::newFrontendActionFactory(&Factory, &Callbacks));
diff --git a/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp
index 0323222c03c..a2d70e03baa 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/UniqueHeaderNameTest.cpp
@@ -28,34 +28,31 @@ TEST(UniqueHeaderName, testUniqueHeaderName) {
append(SourceFile, "project/lib/feature.cpp");
native(SourceFile.str().str(), SourceFile);
- llvm::SmallString<128> HeaderFile(TmpDir);
- append(HeaderFile, "project/include/feature.h");
- native(HeaderFile.str().str(), HeaderFile);
-
- llvm::SmallString<128> ExpectedName("^feature.cpp_feature.h_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}.yaml$");
-
- llvm::SmallString<128> ActualName;
+ llvm::SmallString<128> FullActualPath;
llvm::SmallString<128> Error;
bool Result =
- generateReplacementsFileName(SourceFile, HeaderFile, ActualName, Error);
+ generateReplacementsFileName(SourceFile, FullActualPath, Error);
ASSERT_TRUE(Result);
EXPECT_TRUE(Error.empty());
// We need to check the directory name and filename separately since on
// Windows, the path separator is '\' which is a regex escape character.
- llvm::SmallString<128> ExpectedHeaderPath =
- llvm::sys::path::parent_path(HeaderFile);
- llvm::SmallString<128> ActualHeaderPath =
- llvm::sys::path::parent_path(ActualName);
- llvm::SmallString<128> ActualHeaderName =
- llvm::sys::path::filename(ActualName);
-
- EXPECT_STREQ(ExpectedHeaderPath.c_str(), ActualHeaderPath.c_str());
-
+ llvm::SmallString<128> ExpectedPath =
+ llvm::sys::path::parent_path(SourceFile);
+ llvm::SmallString<128> ActualPath =
+ llvm::sys::path::parent_path(FullActualPath);
+ llvm::SmallString<128> ActualName =
+ llvm::sys::path::filename(FullActualPath);
+
+ EXPECT_STREQ(ExpectedPath.c_str(), ActualPath.c_str());
+
+ llvm::StringRef ExpectedName =
+ "^feature.cpp_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_[0-9a-f]{2}_["
+ "0-9a-f]{2}_[0-9a-f]{2}.yaml$";
llvm::Regex R(ExpectedName);
- ASSERT_TRUE(R.match(ActualHeaderName))
- << "ExpectedName: " << ExpectedName.c_str()
+ ASSERT_TRUE(R.match(ActualName))
+ << "ExpectedName: " << ExpectedName.data()
<< "\nActualName: " << ActualName.c_str();
ASSERT_TRUE(Error.empty()) << "Error: " << Error.c_str();
}
OpenPOWER on IntegriCloud