|
@@ -9,6 +9,7 @@
|
|
|
|
|
|
#include "clang/Format/Format.h"
|
|
#include "clang/Format/Format.h"
|
|
|
|
|
|
|
|
+#include "../Tooling/RewriterTestContext.h"
|
|
#include "clang/Tooling/Core/Replacement.h"
|
|
#include "clang/Tooling/Core/Replacement.h"
|
|
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "gtest/gtest.h"
|
|
@@ -240,6 +241,46 @@ TEST_F(CleanupTest, CtorInitializerInNamespace) {
|
|
EXPECT_EQ(Expected, Result);
|
|
EXPECT_EQ(Expected, Result);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+class CleanUpReplacementsTest : public ::testing::Test {
|
|
|
|
+protected:
|
|
|
|
+ tooling::Replacement createReplacement(SourceLocation Start, unsigned Length,
|
|
|
|
+ llvm::StringRef ReplacementText) {
|
|
|
|
+ return tooling::Replacement(Context.Sources, Start, Length,
|
|
|
|
+ ReplacementText);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RewriterTestContext Context;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+TEST_F(CleanUpReplacementsTest, FixOnlyAffectedCodeAfterReplacements) {
|
|
|
|
+ std::string Code = "namespace A {\n"
|
|
|
|
+ "namespace B {\n"
|
|
|
|
+ " int x;\n"
|
|
|
|
+ "} // namespace B\n"
|
|
|
|
+ "} // namespace A\n"
|
|
|
|
+ "\n"
|
|
|
|
+ "namespace C {\n"
|
|
|
|
+ "namespace D { int i; }\n"
|
|
|
|
+ "inline namespace E { namespace { int y; } }\n"
|
|
|
|
+ "int x= 0;"
|
|
|
|
+ "}";
|
|
|
|
+ std::string Expected = "\n\nnamespace C {\n"
|
|
|
|
+ "namespace D { int i; }\n\n"
|
|
|
|
+ "int x= 0;"
|
|
|
|
+ "}";
|
|
|
|
+ FileID ID = Context.createInMemoryFile("fix.cpp", Code);
|
|
|
|
+ tooling::Replacements Replaces;
|
|
|
|
+ Replaces.insert(tooling::Replacement(Context.Sources,
|
|
|
|
+ Context.getLocation(ID, 3, 3), 6, ""));
|
|
|
|
+ Replaces.insert(tooling::Replacement(Context.Sources,
|
|
|
|
+ Context.getLocation(ID, 9, 34), 6, ""));
|
|
|
|
+
|
|
|
|
+ format::FormatStyle Style = format::getLLVMStyle();
|
|
|
|
+ auto FinalReplaces = formatReplacements(
|
|
|
|
+ Code, cleanupAroundReplacements(Code, Replaces, Style), Style);
|
|
|
|
+ EXPECT_EQ(Expected, applyAllReplacements(Code, FinalReplaces));
|
|
|
|
+}
|
|
|
|
+
|
|
} // end namespace
|
|
} // end namespace
|
|
} // end namespace format
|
|
} // end namespace format
|
|
} // end namespace clang
|
|
} // end namespace clang
|