14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar//===- unittest/Format/CleanupTest.cpp - Code cleanup unit tests ----------===// 24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// The LLVM Compiler Infrastructure 44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// License. See LICENSE.TXT for details. 74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar//===----------------------------------------------------------------------===// 94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#include "clang/Format/Format.h" 114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#include "../Tooling/RewriterTestContext.h" 134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#include "clang/Tooling/Core/Replacement.h" 144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#include "gtest/gtest.h" 164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace clang { 184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace format { 194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace { 204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass CleanupTest : public ::testing::Test { 224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarprotected: 234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string cleanup(llvm::StringRef Code, 244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const std::vector<tooling::Range> &Ranges, 254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const FormatStyle &Style = getLLVMStyle()) { 264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = format::cleanup(Style, Code, Ranges); 274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Result = applyAllReplacements(Code, Replaces); 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Result)); 304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return *Result; 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, DeleteEmptyNamespaces) { 354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A {\n" 364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace B {\n" 374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace B\n" 384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace A\n\n" 394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace C {\n" 404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace D { int i; }\n" 414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "inline namespace E { namespace { } }\n" 424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n\n\n\n\nnamespace C {\n" 444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace D { int i; }\n \n" 454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges; 474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(28, 0)); 484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(91, 6)); 494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(132, 0)); 504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 544967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, NamespaceWithSyntaxError) { 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A {\n" 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace B {\n" // missing r_brace 574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace A\n\n" 584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace C {\n" 594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace D int i; }\n" 604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "inline namespace E { namespace { } }\n" 614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "namespace A {\n" 634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n\n\nnamespace C {\n" 644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace D int i; }\n \n" 654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); 674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 714967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, EmptyNamespaceNotAffected) { 724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A {\n\n" 734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace {\n\n}}"; 744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Even though the namespaces are empty, but the inner most empty namespace 754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // block is not affected by the changed ranges. 764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "namespace A {\n\n" 774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace {\n\n}}"; 784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Set the changed range to be the second "\n". 794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges(1, tooling::Range(14, 0)); 804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 844967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, EmptyNamespaceWithCommentsNoBreakBeforeBrace) { 854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A {\n" 864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace B {\n" 874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// Yo\n" 884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace B\n" 894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace A\n" 904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace C { // Yo\n" 914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n\n\n\n\n\n"; 934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); 944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 984967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, EmptyNamespaceWithCommentsBreakBeforeBrace) { 994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A\n" 1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* Yo */ {\n" 1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace B\n" 1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "{\n" 1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// Yo\n" 1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace B\n" 1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace A\n" 1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace C\n" 1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "{ // Yo\n" 1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}\n"; 1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n\n\n\n\n\n\n\n\n\n"; 1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); 1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FormatStyle Style = getLLVMStyle(); 1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style.BraceWrapping.AfterNamespace = true; 1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges, Style); 1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, CtorInitializationSimpleRedundantComma) { 1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "class A {\nA() : , {} };"; 1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "class A {\nA() {} };"; 1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges; 1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(17, 0)); 1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(19, 0)); 1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() : x(1), {} };"; 1274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() : x(1) {} };"; 1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.clear(); 1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(23, 0)); 1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() :,,,,{} };"; 1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() {} };"; 1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.clear(); 1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(15, 0)); 1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, ListSimpleRedundantComma) { 1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "void f() { std::vector<int> v = {1,2,,,3,{4,5}}; }"; 1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "void f() { std::vector<int> v = {1,2,3,{4,5}}; }"; 1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges; 1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(40, 0)); 1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "int main() { f(1,,2,3,,4);}"; 1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "int main() { f(1,2,3,4);}"; 1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.clear(); 1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(17, 0)); 1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(22, 0)); 1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, CtorInitializationBracesInParens) { 1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "class A {\nA() : x({1}),, {} };"; 1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "class A {\nA() : x({1}) {} };"; 1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges; 1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(24, 0)); 1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(26, 0)); 1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, RedundantCommaNotInAffectedRanges) { 1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = 1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A {\nA() : x({1}), /* comment */, { int x = 0; } };"; 1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = 1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A {\nA() : x({1}), /* comment */, { int x = 0; } };"; 1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Set the affected range to be "int x = 0", which does not intercept the 1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // constructor initialization list. 1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges(1, tooling::Range(42, 9)); 1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() : x(1), {} };"; 1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() : x(1), {} };"; 1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // No range. Fixer should do nothing. 1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.clear(); 1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// FIXME: delete comments too. 1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, CtorInitializationCommentAroundCommas) { 1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Remove redundant commas around comment. 1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "class A {\nA() : x({1}), /* comment */, {} };"; 1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "class A {\nA() : x({1}) /* comment */ {} };"; 1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges; 1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(25, 0)); 1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges.push_back(tooling::Range(40, 0)); 1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Remove trailing comma and ignore comment. 1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() : x({1}), // comment\n{} };"; 2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() : x({1}) // comment\n{} };"; 2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges = std::vector<tooling::Range>(1, tooling::Range(25, 0)); 2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Remove trailing comma and ignore comment. 2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() : x({1}), // comment\n , y(1),{} };"; 2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() : x({1}), // comment\n y(1){} };"; 2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges = std::vector<tooling::Range>(1, tooling::Range(38, 0)); 2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Remove trailing comma and ignore comment. 2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() : x({1}), \n/* comment */, y(1),{} };"; 2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() : x({1}), \n/* comment */ y(1){} };"; 2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges = std::vector<tooling::Range>(1, tooling::Range(40, 0)); 2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Remove trailing comma and ignore comment. 2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Code = "class A {\nA() : , // comment\n y(1),{} };"; 2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Expected = "class A {\nA() : // comment\n y(1){} };"; 2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Ranges = std::vector<tooling::Range>(1, tooling::Range(17, 0)); 2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Result = cleanup(Code, Ranges); 2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanupTest, CtorInitializerInNamespace) { 2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A {\n" 2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace B {\n" // missing r_brace 2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace A\n\n" 2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace C {\n" 2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A { A() : x(0),, {} };\n" 2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "inline namespace E { namespace { } }\n" 2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "namespace A {\n" 2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n\n\nnamespace C {\n" 2374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A { A() : x(0) {} };\n \n" 2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); 2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = cleanup(Code, Ranges); 2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, Result); 2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 2434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarclass CleanUpReplacementsTest : public ::testing::Test { 2454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarprotected: 2464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacement createReplacement(unsigned Offset, unsigned Length, 2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar StringRef Text) { 2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return tooling::Replacement(FileName, Offset, Length, Text); 2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacement createInsertion(StringRef HeaderName) { 2524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return createReplacement(UINT_MAX, 0, HeaderName); 2534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar inline std::string apply(StringRef Code, 2564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const tooling::Replacements Replaces) { 2574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto CleanReplaces = cleanupAroundReplacements(Code, Replaces, Style); 2584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(CleanReplaces)) 2594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar << llvm::toString(CleanReplaces.takeError()) << "\n"; 2604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Result = applyAllReplacements(Code, *CleanReplaces); 2614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Result)); 2624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return *Result; 2634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar inline std::string formatAndApply(StringRef Code, 2664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const tooling::Replacements Replaces) { 2674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto CleanReplaces = cleanupAroundReplacements(Code, Replaces, Style); 2694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(CleanReplaces)) 2704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar << llvm::toString(CleanReplaces.takeError()) << "\n"; 2714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto FormattedReplaces = formatReplacements(Code, *CleanReplaces, Style); 2724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(FormattedReplaces)) 2734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar << llvm::toString(FormattedReplaces.takeError()) << "\n"; 2744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Result = applyAllReplacements(Code, *FormattedReplaces); 2754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Result)); 2764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return *Result; 2774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int getOffset(StringRef Code, int Line, int Column) { 2804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar RewriterTestContext Context; 2814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FileID ID = Context.createInMemoryFile(FileName, Code); 2824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto DecomposedLocation = 2834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Context.Sources.getDecomposedLoc(Context.getLocation(ID, Line, Column)); 2844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return DecomposedLocation.second; 2854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 2864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const std::string FileName = "fix.cpp"; 2884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FormatStyle Style = getLLVMStyle(); 2894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 2904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2914967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, FixOnlyAffectedCodeAfterReplacements) { 2924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "namespace A {\n" 2934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace B {\n" 2944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " int x;\n" 2954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace B\n" 2964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} // namespace A\n" 2974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 2984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace C {\n" 2994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace D { int i; }\n" 3004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "inline namespace E { namespace { int y; } }\n" 3014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x= 0;" 3024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 3034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n\nnamespace C {\n" 3044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "namespace D { int i; }\n\n" 3054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x= 0;" 3064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"; 3074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = { 3084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createReplacement(getOffset(Code, 3, 3), 6, ""), 3094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createReplacement(getOffset(Code, 9, 34), 6, "")}; 3104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); 3124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3144967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, NoExistingIncludeWithoutDefine) { 3154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "int main() {}"; 3164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"a.h\"\n" 3174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"a.h\"")}; 3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, NoExistingIncludeWithDefine) { 3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#ifndef A_H\n" 3244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define A_H\n" 3254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A {};\n" 3264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define MMM 123\n" 3274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#endif"; 3284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#ifndef A_H\n" 3294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define A_H\n" 3304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 3314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A {};\n" 3324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define MMM 123\n" 3334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#endif"; 3344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"b.h\"")}; 3364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 3374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3394967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertBeforeCategoryWithLowerPriority) { 3404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#ifndef A_H\n" 3414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define A_H\n" 3424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 3464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A {};\n" 3474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define MMM 123\n" 3484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#endif"; 3494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#ifndef A_H\n" 3504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define A_H\n" 3514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 3554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 3564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class A {};\n" 3574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define MMM 123\n" 3584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#endif"; 3594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"a.h\"")}; 3614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 3624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3644967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertAfterMainHeader) { 3654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"fix.h\"\n" 3664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"fix.h\"\n" 3694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <a>\n" 3704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <a>")}; 3734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); 3744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 3754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3774967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertBeforeSystemHeaderLLVM) { 3784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include <memory>\n" 3794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"z.h\"\n" 3824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <memory>\n" 3834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"z.h\"")}; 3864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 3874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3894967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertAfterSystemHeaderGoogle) { 3904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include <memory>\n" 3914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include <memory>\n" 3944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"z.h\"\n" 3954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 3964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int main() {}"; 3974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"z.h\"")}; 3984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); 3994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 4004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4024967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertOneIncludeLLVMStyle) { 4034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"x/fix.h\"\n" 4044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 4054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 4064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"clang/Format/Format.h\"\n" 4074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <memory>\n"; 4084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"x/fix.h\"\n" 4094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 4104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 4114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"d.h\"\n" 4124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"clang/Format/Format.h\"\n" 4134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"llvm/x/y.h\"\n" 4144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <memory>\n"; 4154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"d.h\""), 4164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"llvm/x/y.h\"")}; 4174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 4184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4204967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertMultipleIncludesLLVMStyle) { 4214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"x/fix.h\"\n" 4224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 4234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 4244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"clang/Format/Format.h\"\n" 4254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <memory>\n"; 4264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"x/fix.h\"\n" 4274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 4284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 4294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"new/new.h\"\n" 4304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"clang/Format/Format.h\"\n" 4314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <memory>\n" 4324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <list>\n"; 4334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <list>"), 4344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"new/new.h\"")}; 4354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 4364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4384967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertNewSystemIncludeGoogleStyle) { 4394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"x/fix.h\"\n" 4404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 4414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"y/a.h\"\n" 4424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"z/b.h\"\n"; 4434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // FIXME: inserting after the empty line following the main header might be 4444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // prefered. 4454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"x/fix.h\"\n" 4464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 4474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 4484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"y/a.h\"\n" 4494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"z/b.h\"\n"; 4504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 4514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); 4524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 4534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4554967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertMultipleIncludesGoogleStyle) { 4564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"x/fix.h\"\n" 4574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 4584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 4594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 4604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"y/a.h\"\n" 4614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"z/b.h\"\n"; 4624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"x/fix.h\"\n" 4634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 4644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 4654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <list>\n" 4664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 4674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"y/a.h\"\n" 4684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"z/b.h\"\n" 4694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"x/x.h\"\n"; 4704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <list>"), 4714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"x/x.h\"")}; 4724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); 4734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 4744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4764967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertMultipleNewHeadersAndSortLLVM) { 4774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "\nint x;"; 4784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n#include \"fix.h\"\n" 4794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 4804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 4814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"c.h\"\n" 4824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <list>\n" 4834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 4844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;"; 4854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"a.h\""), 4864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"c.h\""), 4874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"b.h\""), 4884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <vector>"), 4894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <list>"), 4904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"fix.h\"")}; 4914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); 4924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 4944967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, InsertMultipleNewHeadersAndSortGoogle) { 4954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "\nint x;"; 4964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n#include \"fix.h\"\n" 4974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <list>\n" 4984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 4994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"a.h\"\n" 5004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n" 5014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"c.h\"\n" 5024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;"; 5034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"a.h\""), 5044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"c.h\""), 5054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"b.h\""), 5064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <vector>"), 5074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <list>"), 5084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"fix.h\"")}; 5094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style = format::getGoogleStyle(format::FormatStyle::LanguageKind::LK_Cpp); 5104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); 5114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5134967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, FormatCorrectLineWhenHeadersAreInserted) { 5144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "\n" 5154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 5164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int a;\n" 5174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int a;\n" 5184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int a;"; 5194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "\n#include \"x.h\"\n" 5214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"y.h\"\n" 5224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"clang/x/x.h\"\n" 5234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <list>\n" 5244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 5254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 5264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int a;\n" 5274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int b;\n" 5284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int a;"; 5294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = { 5304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createReplacement(getOffset(Code, 4, 8), 1, "b"), 5314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <vector>"), 5324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <list>"), 5334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"clang/x/x.h\""), 5344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"y.h\""), 5354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"x.h\"")}; 5364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); 5374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5394967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, NotConfusedByDefine) { 5404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "void f() {}\n" 5414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define A \\\n" 5424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " int i;"; 5434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include <vector>\n" 5444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "void f() {}\n" 5454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define A \\\n" 5464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " int i;"; 5474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 5484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, formatAndApply(Code, Replaces)); 5494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5514967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, SkippedTopComment) { 5524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "// comment\n" 5534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 5544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " // comment\n"; 5554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "// comment\n" 5564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 5574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " // comment\n" 5584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n"; 5594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 5604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 5614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5634967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, SkippedMixedComments) { 5644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "// comment\n" 5654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment \\\n" 5664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " comment continued\n" 5674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/*\n" 5684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "* comment\n" 5694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n"; 5704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "// comment\n" 5714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment \\\n" 5724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " comment continued\n" 5734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/*\n" 5744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "* comment\n" 5754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 5764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n"; 5774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 5784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 5794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5814967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, MultipleBlockCommentsInOneLine) { 5824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "/*\n" 5834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "* comment\n" 5844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/ /* comment\n" 5854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 5864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n\n" 5874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* c1 */ /*c2 */\n"; 5884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "/*\n" 5894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "* comment\n" 5904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/ /* comment\n" 5914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 5924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n\n" 5934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* c1 */ /*c2 */\n" 5944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n"; 5954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 5964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 5974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 5984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 5994967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, CodeAfterComments) { 6004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "/*\n" 6014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "* comment\n" 6024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/ /* comment\n" 6034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 6044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n\n" 6054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* c1 */ /*c2 */\n" 6064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 6074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n"; 6084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "/*\n" 6094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "* comment\n" 6104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/ /* comment\n" 6114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 6124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n\n" 6134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* c1 */ /*c2 */\n" 6144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "\n" 6154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 6164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n"; 6174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6214967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, FakeHeaderGuardIfDef) { 6224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "// comment \n" 6234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifdef X\n" 6244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define X\n"; 6254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "// comment \n" 6264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 6274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifdef X\n" 6284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define X\n"; 6294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6334967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, RealHeaderGuardAfterComments) { 6344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "// comment \n" 6354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifndef X\n" 6364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define X\n" 6374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 6384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define Y 1\n"; 6394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "// comment \n" 6404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifndef X\n" 6414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define X\n" 6424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 6434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 6444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define Y 1\n"; 6454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6494967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, IfNDefWithNoDefine) { 6504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "// comment \n" 6514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifndef X\n" 6524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 6534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define Y 1\n"; 6544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "// comment \n" 6554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 6564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifndef X\n" 6574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 6584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define Y 1\n"; 6594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6634967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, HeaderGuardWithComment) { 6644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "// comment \n" 6654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifndef X // comment\n" 6664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment\n" 6674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* comment\n" 6684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 6694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* comment */ #define X\n" 6704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 6714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define Y 1\n"; 6724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "// comment \n" 6734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#ifndef X // comment\n" 6744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment\n" 6754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* comment\n" 6764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "*/\n" 6774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/* comment */ #define X\n" 6784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 6794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "int x;\n" 6804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#define Y 1\n"; 6814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6854967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, EmptyCode) { 6864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = ""; 6874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include <vector>\n"; 6884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// FIXME: although this case does not crash, the insertion is wrong. A '\n' 6934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// should be inserted between the two #includes. 6944967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, NoNewLineAtTheEndOfCode) { 6954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include <map>"; 6964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include <map>#include <vector>\n"; 6974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>")}; 6984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 6994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 7004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 7014967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, SkipExistingHeaders) { 7024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"a.h\"\n" 7034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n"; 7044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"a.h\"\n" 7054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n"; 7064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include <vector>"), 7074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include \"a.h\"")}; 7084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 7094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 7104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 7114967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(CleanUpReplacementsTest, AddIncludesWithDifferentForms) { 7124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include \"a.h\"\n" 7134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n"; 7144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // FIXME: this might not be the best behavior. 7154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Expected = "#include \"a.h\"\n" 7164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"vector\"\n" 7174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <vector>\n" 7184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <a.h>\n"; 7194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar tooling::Replacements Replaces = {createInsertion("#include \"vector\""), 7204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar createInsertion("#include <a.h>")}; 7214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected, apply(Code, Replaces)); 7224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 7234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 7244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} // end namespace 7254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} // end namespace format 7264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} // end namespace clang 727