diff options
author | Edwin Vane <edwin.vane@intel.com> | 2013-09-30 13:59:21 +0000 |
---|---|---|
committer | Edwin Vane <edwin.vane@intel.com> | 2013-09-30 13:59:21 +0000 |
commit | 59d93af4a55897b99873225249692cc7d8fe5969 (patch) | |
tree | 46e6e707b1a20eb84b98c1edeec20445cd6a19e3 /clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp | |
parent | d544aa79c94502ffe3ddd4771503d00e14d2995e (diff) | |
download | bcm5719-llvm-59d93af4a55897b99873225249692cc7d8fe5969.tar.gz bcm5719-llvm-59d93af4a55897b99873225249692cc7d8fe5969.zip |
clang-apply-replacements: Add code formatting functionality
The tool now supports a collection of arguments to turn on and provide settings
for the formatting of code affected by applying replacements:
* --format turns on formatting (default style is LLVM)
* --style controls code style settings
* --style-config allows one to explicitly indicate where a style config file
lives.
The libclangApplyReplacements interface has a new function to turn Replacements
into Ranges to be used with tooling::reformat().
llvm-svn: 191667
Diffstat (limited to 'clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp')
-rw-r--r-- | clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp b/clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp new file mode 100644 index 00000000000..e16308223c9 --- /dev/null +++ b/clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp @@ -0,0 +1,69 @@ +//===- clang-apply-replacements/ReformattingTest.cpp ----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "clang-apply-replacements/Tooling/ApplyReplacements.h" +#include "clang/Format/Format.h" +#include "clang/Tooling/Refactoring.h" +#include "common/VirtualFileHelper.h" +#include "gtest/gtest.h" + +using namespace clang; +using namespace clang::tooling; +using namespace clang::replace; + +typedef std::vector<clang::tooling::Replacement> ReplacementsVec; + +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 +static ReplacementsVec makeReplacements(unsigned Offset, unsigned Length, + unsigned ReplacementLength, + llvm::StringRef FilePath = "~") { + ReplacementsVec Replaces; + Replaces.push_back( + makeReplacement(Offset, Length, ReplacementLength, FilePath)); + return Replaces; +} + +// Put these functions in the clang::tooling namespace so arg-dependent name +// lookup finds these functions for the EXPECT_EQ macros below. +namespace clang { +namespace tooling { +bool operator==(const Range &A, const Range &B) { + return A.getOffset() == B.getOffset() && A.getLength() == B.getLength(); +} + +std::ostream &operator<<(std::ostream &os, const Range &R) { + return os << "Range(" << R.getOffset() << ", " << R.getLength() << ")"; +} +} // namespace tooling +} // namespace clang + +// Ensure zero-length ranges are produced. Even lines where things are deleted +// need reformatting. +TEST(CalculateChangedRangesTest, producesZeroLengthRange) { + RangeVector Changes = calculateChangedRanges(makeReplacements(0, 4, 0)); + EXPECT_EQ(Range(0, 0), Changes.front()); +} + +// Basic test to ensure replacements turn into ranges properly. +TEST(CalculateChangedRangesTest, calculatesRanges) { + ReplacementsVec R; + R.push_back(makeReplacement(2, 0, 3)); + R.push_back(makeReplacement(5, 2, 4)); + RangeVector Changes = calculateChangedRanges(R); + + Range ExpectedRanges[] = { Range(2, 3), Range(8, 4) }; + EXPECT_TRUE(std::equal(Changes.begin(), Changes.end(), ExpectedRanges)); +} |