summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-09-30 13:59:21 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-09-30 13:59:21 +0000
commit59d93af4a55897b99873225249692cc7d8fe5969 (patch)
tree46e6e707b1a20eb84b98c1edeec20445cd6a19e3 /clang-tools-extra/unittests/clang-apply-replacements/ReformattingTest.cpp
parentd544aa79c94502ffe3ddd4771503d00e14d2995e (diff)
downloadbcm5719-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.cpp69
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));
+}
OpenPOWER on IntegriCloud