summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/cpp11-migrate
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-07-23 12:50:03 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-07-23 12:50:03 +0000
commit571a64159b4c828f2748b228993619bee416b90b (patch)
treef756baf58c396121d0cf4168057d08f623fa94f4 /clang-tools-extra/unittests/cpp11-migrate
parent2dfb1cfd0cfffcf6444740579f39a865107a34e3 (diff)
downloadbcm5719-llvm-571a64159b4c828f2748b228993619bee416b90b.tar.gz
bcm5719-llvm-571a64159b4c828f2748b228993619bee416b90b.zip
cp11-migrate: Integration with LibFormat
Adding a feature to optionally reformat code changed by the migrator. Like LibFormat, can choose between built-in styles (LLVM, Mozilla, Google, Chromium) or use a YAML-format config file. Now with no dependency on iostream by the Reformatting.cpp LIT test. Author: Guillaume Papin <guillaume.papin@epitech.eu> llvm-svn: 186938
Diffstat (limited to 'clang-tools-extra/unittests/cpp11-migrate')
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt3
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp103
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/Makefile9
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp50
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp2
5 files changed, 161 insertions, 6 deletions
diff --git a/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt b/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt
index 75bf35e9f14..1f647d5dc19 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt
+++ b/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt
@@ -8,6 +8,7 @@ include_directories(${CPP11_MIGRATE_SOURCE_DIR})
add_extra_unittest(Cpp11MigrateTests
FileOverridesTest.cpp
+ ReformattingTest.cpp
IncludeExcludeTest.cpp
PerfSupportTest.cpp
TransformTest.cpp
@@ -16,7 +17,9 @@ add_extra_unittest(Cpp11MigrateTests
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 3cbdfd3969b..39ed662cbec 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/FileOverridesTest.cpp
@@ -21,10 +21,11 @@ TEST(SourceOverridesTest, Interface) {
FileName,
"std::vector<such_a_long_name_for_a_type>::const_iterator long_type =\n"
" vec.begin();\n");
- SourceOverrides Overrides(FileName);
+ SourceOverrides Overrides(FileName, /*TrackFileChanges=*/false);
EXPECT_EQ(FileName, Overrides.getMainFileName());
EXPECT_FALSE(Overrides.isSourceOverriden());
+ EXPECT_FALSE(Overrides.isTrackingFileChanges());
Replacements Replaces;
unsigned ReplacementLength =
@@ -37,3 +38,103 @@ TEST(SourceOverridesTest, Interface) {
" vec.begin();\n";
EXPECT_EQ(ExpectedContent, Overrides.getMainFileContent());
}
+
+namespace {
+Replacement makeReplacement(unsigned Offset, unsigned Length,
+ unsigned ReplacementLength) {
+ return Replacement("", 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));
+ return Replaces;
+}
+
+bool equalRanges(Range A, Range B) {
+ return A.getOffset() == B.getOffset() && A.getLength() == B.getLength();
+}
+} // end anonymous namespace
+
+TEST(ChangedRangesTest, adjustChangedRangesShrink) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(0, 0, 4));
+ EXPECT_NE(Changes.begin(), Changes.end());
+ EXPECT_TRUE(equalRanges(Range(0, 4), *Changes.begin()));
+ // create a replacement that cuts the end of the last insertion
+ Changes.adjustChangedRanges(makeReplacements(2, 4, 0));
+ Range ExpectedChanges[] = { Range(0, 2) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesExtend) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(1, 0, 4));
+ // cut the old one by a bigger one
+ Changes.adjustChangedRanges(makeReplacements(3, 4, 6));
+ Range ExpectedChanges[] = { Range(1, 8) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesNoOverlap) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(0, 0, 4));
+ Changes.adjustChangedRanges(makeReplacements(6, 0, 4));
+ Range ExpectedChanges[] = { Range(0, 4), Range(6, 4) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesNullRange) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(0, 4, 0));
+ Range ExpectedChanges[] = { Range(0, 0) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesExtendExisting) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(0, 0, 3));
+ Changes.adjustChangedRanges(makeReplacements(2, 5, 8));
+ Range ExpectedChanges[] = { Range(0, 10) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesSplit) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(0, 0, 3));
+ Changes.adjustChangedRanges(makeReplacements(1, 1, 0));
+ Range ExpectedChanges[] = { Range(0, 2) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesRangeContained) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(3, 0, 2));
+ Changes.adjustChangedRanges(makeReplacements(1, 4, 5));
+ Range ExpectedChanges[] = { Range(1, 5) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
+
+TEST(ChangedRangesTest, adjustChangedRangesRangeResized) {
+ ChangedRanges Changes;
+ Changes.adjustChangedRanges(makeReplacements(2, 0, 5));
+ // first make the range bigger
+ Changes.adjustChangedRanges(makeReplacements(4, 1, 3));
+ Range ExpectedChanges[] = { Range(2, 7) };
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+ // then smaller
+ Changes.adjustChangedRanges(makeReplacements(3, 3, 1));
+ ExpectedChanges[0] = Range(2, 5);
+ EXPECT_TRUE(
+ std::equal(Changes.begin(), Changes.end(), ExpectedChanges, equalRanges));
+}
diff --git a/clang-tools-extra/unittests/cpp11-migrate/Makefile b/clang-tools-extra/unittests/cpp11-migrate/Makefile
index 31ef9c297ad..8a0028e07b5 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/Makefile
+++ b/clang-tools-extra/unittests/cpp11-migrate/Makefile
@@ -12,10 +12,11 @@ include $(CLANG_LEVEL)/../../Makefile.config
TESTNAME = Cpp11MigrateTests
LINK_COMPONENTS := asmparser bitreader support MC MCParser option
-USEDLIBS = migrateCore.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 clangBasic.a
+USEDLIBS = migrateCore.a clangFormat.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 \
+ clangBasic.a
include $(CLANG_LEVEL)/Makefile
MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1
diff --git a/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp
new file mode 100644
index 00000000000..fcde6b81db4
--- /dev/null
+++ b/clang-tools-extra/unittests/cpp11-migrate/ReformattingTest.cpp
@@ -0,0 +1,50 @@
+//===- cpp11-migrate/ReformattingTest.cpp - Reformatting unit tests -------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Core/Reformatting.h"
+#include "Core/FileOverrides.h"
+#include "gtest/gtest.h"
+#include "VirtualFileHelper.h"
+
+using namespace clang;
+using namespace clang::tooling;
+
+namespace {
+// convenience function to create a ChangedRanges containing one Range
+ChangedRanges makeChangedRanges(unsigned Offset, unsigned Length) {
+ ChangedRanges Changes;
+ Replacements Replaces;
+
+ Replaces.insert(Replacement("", Offset, 0, std::string(Length, '~')));
+ Changes.adjustChangedRanges(Replaces);
+ return Changes;
+}
+} // end anonymous namespace
+
+TEST(Reformatter, SingleReformat) {
+ VirtualFileHelper VFHelper;
+ llvm::StringRef FileName = "<test>";
+ VFHelper.mapFile(FileName, "int a;\n"
+ "int b;\n");
+
+ 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);
+}
diff --git a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
index 555237e073c..c58aeb227ca 100644
--- a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
+++ b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp
@@ -161,7 +161,7 @@ TEST(Transform, Timings) {
// Transform's handle* functions require FileOverrides to be set, even if
// there aren't any.
- FileOverrides Overrides;
+ FileOverrides Overrides(/*TrackFileChanges=*/false);
T.setOverrides(Overrides);
Tool.run(clang::tooling::newFrontendActionFactory(&Factory, &Callbacks));
OpenPOWER on IntegriCloud