diff options
author | Edwin Vane <edwin.vane@intel.com> | 2013-07-23 12:50:03 +0000 |
---|---|---|
committer | Edwin Vane <edwin.vane@intel.com> | 2013-07-23 12:50:03 +0000 |
commit | 571a64159b4c828f2748b228993619bee416b90b (patch) | |
tree | f756baf58c396121d0cf4168057d08f623fa94f4 /clang-tools-extra/unittests/cpp11-migrate | |
parent | 2dfb1cfd0cfffcf6444740579f39a865107a34e3 (diff) | |
download | bcm5719-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')
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)); |