187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar//===- unittest/Format/SortIncludesTest.cpp - Include sort unit tests -----===// 287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// 387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// The LLVM Compiler Infrastructure 487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// 587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// License. See LICENSE.TXT for details. 787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// 887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar//===----------------------------------------------------------------------===// 987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 1087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#include "FormatTestUtils.h" 1187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#include "clang/Format/Format.h" 1287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#include "llvm/Support/Debug.h" 1387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#include "gtest/gtest.h" 1487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 1587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#define DEBUG_TYPE "format-test" 1687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 1787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace clang { 1887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace format { 1987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace { 2087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 2187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarclass SortIncludesTest : public ::testing::Test { 2287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarprotected: 234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::vector<tooling::Range> GetCodeRange(StringRef Code) { 244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return std::vector<tooling::Range>(1, tooling::Range(0, Code.size())); 254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string sort(StringRef Code, StringRef FileName = "input.cpp") { 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Ranges = GetCodeRange(Code); 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Sorted = 3087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar applyAllReplacements(Code, sortIncludes(Style, Code, Ranges, FileName)); 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Sorted)); 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Result = applyAllReplacements( 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar *Sorted, reformat(Style, *Sorted, Ranges, FileName)); 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Result)); 354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return *Result; 3687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar } 3787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 3887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar unsigned newCursor(llvm::StringRef Code, unsigned Cursor) { 394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar sortIncludes(Style, Code, GetCodeRange(Code), "input.cpp", &Cursor); 4087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar return Cursor; 4187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar } 4287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 4387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar FormatStyle Style = getLLVMStyle(); 4487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 4587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}; 4687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 4787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, BasicSorting) { 4887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 4987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 5087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 5187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\"\n" 5287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 5387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n")); 5487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 5587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(SortIncludesTest, NoReplacementsForValidIncludes) { 574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Identical #includes have led to a failure with an unstable sort. 584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Code = "#include <a>\n" 594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <b>\n" 604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <b>\n" 614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <b>\n" 624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <b>\n" 634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include <c>\n"; 644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(sortIncludes(Style, Code, GetCodeRange(Code), "a.cc").empty()); 654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, SupportClangFormatOff) { 6887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include <a>\n" 6987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <b>\n" 7087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <c>\n" 7187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "// clang-format off\n" 7287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <b>\n" 7387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <a>\n" 7487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <c>\n" 7587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "// clang-format on\n", 7687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include <b>\n" 7787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <a>\n" 7887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <c>\n" 7987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "// clang-format off\n" 8087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <b>\n" 8187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <a>\n" 8287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <c>\n" 8387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "// clang-format on\n")); 8487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 8587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 8687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, IncludeSortingCanBeDisabled) { 8787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar Style.SortIncludes = false; 8887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 8987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 9087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 9187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\"\n" 9287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 9387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n")); 9487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 9587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 9687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, MixIncludeAndImport) { 9787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 9887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#import \"b.h\"\n" 9987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 10087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\"\n" 10187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 10287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#import \"b.h\"\n")); 10387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 10487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 10587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, FixTrailingComments) { 10687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\" // comment\n" 10787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"bb.h\" // comment\n" 10887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"ccc.h\"\n", 10987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\" // comment\n" 11087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"ccc.h\"\n" 11187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"bb.h\" // comment\n")); 11287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 11387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 11487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, LeadingWhitespace) { 11587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 11687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 11787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 11887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort(" #include \"a.h\"\n" 11987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " #include \"c.h\"\n" 12087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " #include \"b.h\"\n")); 12187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 12287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 12387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 12487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("# include \"a.h\"\n" 12587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "# include \"c.h\"\n" 12687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "# include \"b.h\"\n")); 12787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 12887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 12987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, GreaterInComment) { 13087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 13187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\" // >\n" 13287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 13387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\"\n" 13487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 13587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\" // >\n")); 13687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 13787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 13887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, SortsLocallyInEachBlock) { 13987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 14087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 14187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "\n" 14287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 14387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\"\n" 14487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 14587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "\n" 14687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n")); 14787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 14887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 14987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, HandlesAngledIncludesAsSeparateBlocks) { 15087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 15187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 15287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <b.h>\n" 15387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <d.h>\n", 15487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include <d.h>\n" 15587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <b.h>\n" 15687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 15787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a.h\"\n")); 15887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 15987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar Style = getGoogleStyle(FormatStyle::LK_Cpp); 16087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include <b.h>\n" 16187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <d.h>\n" 16287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a.h\"\n" 16387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 16487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include <d.h>\n" 16587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <b.h>\n" 16687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 16787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a.h\"\n")); 16887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 16987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 17087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, HandlesMultilineIncludes) { 17187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 17287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 17387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 17487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"a.h\"\n" 17587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \\\n" 17687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "\"c.h\"\n" 17787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n")); 17887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 17987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 18087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, LeavesMainHeaderFirst) { 1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style.IncludeIsMainRegex = "([-_](test|unittest))?$"; 18287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"llvm/a.h\"\n" 18387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 18487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 18587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"llvm/a.h\"\n" 18687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 18787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 18887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "a.cc")); 18987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"llvm/a.h\"\n" 19087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 19187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 19287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"llvm/a.h\"\n" 19387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 19487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a_test.cc")); 19687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"llvm/input.h\"\n" 19787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 19887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n", 19987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"llvm/input.h\"\n" 20087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 20187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 20287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "input.mm")); 20387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Don't allow prefixes. 2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ("#include \"b.h\"\n" 2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"c.h\"\n" 2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"llvm/not_a.h\"\n", 2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar sort("#include \"llvm/not_a.h\"\n" 2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"c.h\"\n" 2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n", 2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a.cc")); 2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Don't do this for _main and other suffixes. 2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ("#include \"b.h\"\n" 2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"c.h\"\n" 2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"llvm/a.h\"\n", 2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar sort("#include \"llvm/a.h\"\n" 2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"c.h\"\n" 2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#include \"b.h\"\n", 2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a_main.cc")); 2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 22287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // Don't do this in headers. 22387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"b.h\"\n" 22487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 22587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"llvm/a.h\"\n", 22687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"llvm/a.h\"\n" 22787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 22887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 22987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "a.h")); 23087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 23187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // Only do this in the first #include block. 23287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include <a>\n" 23387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "\n" 23487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 23587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 23687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"llvm/a.h\"\n", 23787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include <a>\n" 23887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "\n" 23987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"llvm/a.h\"\n" 24087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 24187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n", 24287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "a.cc")); 24387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 24487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // Only recognize the first #include with a matching basename as main include. 24587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"a.h\"\n" 24687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"b.h\"\n" 24787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 24887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"llvm/a.h\"\n", 24987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"b.h\"\n" 25087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a.h\"\n" 25187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c.h\"\n" 25287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"llvm/a.h\"\n", 25387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "a.cc")); 25487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 25587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 25687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, NegativePriorities) { 25787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; 25887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"important_os_header.h\"\n" 25987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c_main.h\"\n" 26087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a_other.h\"\n", 26187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"c_main.h\"\n" 26287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a_other.h\"\n" 26387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"important_os_header.h\"\n", 26487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "c_main.cc")); 26587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 26687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // check stable when re-run 26787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ("#include \"important_os_header.h\"\n" 26887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c_main.h\"\n" 26987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a_other.h\"\n", 27087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar sort("#include \"important_os_header.h\"\n" 27187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"c_main.h\"\n" 27287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include \"a_other.h\"\n", 27387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "c_main.cc")); 27487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 27587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 27687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(SortIncludesTest, CalculatesCorrectCursorPosition) { 27787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar std::string Code = "#include <ccc>\n" // Start of line: 0 27887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <bbbbbb>\n" // Start of line: 15 27987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "#include <a>\n"; // Start of line: 33 28087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ(31u, newCursor(Code, 0)); 28187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ(13u, newCursor(Code, 15)); 28287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ(0u, newCursor(Code, 33)); 28387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 28487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ(41u, newCursor(Code, 10)); 28587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ(23u, newCursor(Code, 25)); 28687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar EXPECT_EQ(10u, newCursor(Code, 43)); 28787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 28887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 28987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} // end namespace 29087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} // end namespace format 29187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} // end namespace clang 292