1*d89ae9d3SDaniel Jasper //===- unittest/Format/SortIncludesTest.cpp - Include sort unit tests -----===// 2*d89ae9d3SDaniel Jasper // 3*d89ae9d3SDaniel Jasper // The LLVM Compiler Infrastructure 4*d89ae9d3SDaniel Jasper // 5*d89ae9d3SDaniel Jasper // This file is distributed under the University of Illinois Open Source 6*d89ae9d3SDaniel Jasper // License. See LICENSE.TXT for details. 7*d89ae9d3SDaniel Jasper // 8*d89ae9d3SDaniel Jasper //===----------------------------------------------------------------------===// 9*d89ae9d3SDaniel Jasper 10*d89ae9d3SDaniel Jasper #include "FormatTestUtils.h" 11*d89ae9d3SDaniel Jasper #include "clang/Format/Format.h" 12*d89ae9d3SDaniel Jasper #include "llvm/Support/Debug.h" 13*d89ae9d3SDaniel Jasper #include "gtest/gtest.h" 14*d89ae9d3SDaniel Jasper 15*d89ae9d3SDaniel Jasper #define DEBUG_TYPE "format-test" 16*d89ae9d3SDaniel Jasper 17*d89ae9d3SDaniel Jasper namespace clang { 18*d89ae9d3SDaniel Jasper namespace format { 19*d89ae9d3SDaniel Jasper namespace { 20*d89ae9d3SDaniel Jasper 21*d89ae9d3SDaniel Jasper class SortIncludesTest : public ::testing::Test { 22*d89ae9d3SDaniel Jasper protected: 23*d89ae9d3SDaniel Jasper std::string sort(llvm::StringRef Code) { 24*d89ae9d3SDaniel Jasper std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); 25*d89ae9d3SDaniel Jasper std::string Sorted = applyAllReplacements( 26*d89ae9d3SDaniel Jasper Code, sortIncludes(getLLVMStyle(), Code, Ranges, "input.cpp")); 27*d89ae9d3SDaniel Jasper return applyAllReplacements( 28*d89ae9d3SDaniel Jasper Sorted, reformat(getLLVMStyle(), Sorted, Ranges, "input.cpp")); 29*d89ae9d3SDaniel Jasper } 30*d89ae9d3SDaniel Jasper }; 31*d89ae9d3SDaniel Jasper 32*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, BasicSorting) { 33*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\"\n" 34*d89ae9d3SDaniel Jasper "#include \"b.h\"\n" 35*d89ae9d3SDaniel Jasper "#include \"c.h\"\n", 36*d89ae9d3SDaniel Jasper sort("#include \"a.h\"\n" 37*d89ae9d3SDaniel Jasper "#include \"c.h\"\n" 38*d89ae9d3SDaniel Jasper "#include \"b.h\"\n")); 39*d89ae9d3SDaniel Jasper } 40*d89ae9d3SDaniel Jasper 41*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, FixTrailingComments) { 42*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\" // comment\n" 43*d89ae9d3SDaniel Jasper "#include \"bb.h\" // comment\n" 44*d89ae9d3SDaniel Jasper "#include \"ccc.h\"\n", 45*d89ae9d3SDaniel Jasper sort("#include \"a.h\" // comment\n" 46*d89ae9d3SDaniel Jasper "#include \"ccc.h\"\n" 47*d89ae9d3SDaniel Jasper "#include \"bb.h\" // comment\n")); 48*d89ae9d3SDaniel Jasper } 49*d89ae9d3SDaniel Jasper 50*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, LeadingWhitespace) { 51*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\"\n" 52*d89ae9d3SDaniel Jasper "#include \"b.h\"\n" 53*d89ae9d3SDaniel Jasper "#include \"c.h\"\n", 54*d89ae9d3SDaniel Jasper sort(" #include \"a.h\"\n" 55*d89ae9d3SDaniel Jasper " #include \"c.h\"\n" 56*d89ae9d3SDaniel Jasper " #include \"b.h\"\n")); 57*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\"\n" 58*d89ae9d3SDaniel Jasper "#include \"b.h\"\n" 59*d89ae9d3SDaniel Jasper "#include \"c.h\"\n", 60*d89ae9d3SDaniel Jasper sort("# include \"a.h\"\n" 61*d89ae9d3SDaniel Jasper "# include \"c.h\"\n" 62*d89ae9d3SDaniel Jasper "# include \"b.h\"\n")); 63*d89ae9d3SDaniel Jasper } 64*d89ae9d3SDaniel Jasper 65*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, GreaterInComment) { 66*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\"\n" 67*d89ae9d3SDaniel Jasper "#include \"b.h\" // >\n" 68*d89ae9d3SDaniel Jasper "#include \"c.h\"\n", 69*d89ae9d3SDaniel Jasper sort("#include \"a.h\"\n" 70*d89ae9d3SDaniel Jasper "#include \"c.h\"\n" 71*d89ae9d3SDaniel Jasper "#include \"b.h\" // >\n")); 72*d89ae9d3SDaniel Jasper } 73*d89ae9d3SDaniel Jasper 74*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, SortsLocallyInEachBlock) { 75*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\"\n" 76*d89ae9d3SDaniel Jasper "#include \"c.h\"\n" 77*d89ae9d3SDaniel Jasper "\n" 78*d89ae9d3SDaniel Jasper "#include \"b.h\"\n", 79*d89ae9d3SDaniel Jasper sort("#include \"c.h\"\n" 80*d89ae9d3SDaniel Jasper "#include \"a.h\"\n" 81*d89ae9d3SDaniel Jasper "\n" 82*d89ae9d3SDaniel Jasper "#include \"b.h\"\n")); 83*d89ae9d3SDaniel Jasper } 84*d89ae9d3SDaniel Jasper 85*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, HandlesAngledIncludesAsSeparateBlocks) { 86*d89ae9d3SDaniel Jasper EXPECT_EQ("#include <b.h>\n" 87*d89ae9d3SDaniel Jasper "#include <d.h>\n" 88*d89ae9d3SDaniel Jasper "#include \"a.h\"\n" 89*d89ae9d3SDaniel Jasper "#include \"c.h\"\n", 90*d89ae9d3SDaniel Jasper sort("#include <d.h>\n" 91*d89ae9d3SDaniel Jasper "#include <b.h>\n" 92*d89ae9d3SDaniel Jasper "#include \"c.h\"\n" 93*d89ae9d3SDaniel Jasper "#include \"a.h\"\n")); 94*d89ae9d3SDaniel Jasper } 95*d89ae9d3SDaniel Jasper 96*d89ae9d3SDaniel Jasper TEST_F(SortIncludesTest, HandlesMultilineIncludes) { 97*d89ae9d3SDaniel Jasper EXPECT_EQ("#include \"a.h\"\n" 98*d89ae9d3SDaniel Jasper "#include \"b.h\"\n" 99*d89ae9d3SDaniel Jasper "#include \"c.h\"\n", 100*d89ae9d3SDaniel Jasper sort("#include \"a.h\"\n" 101*d89ae9d3SDaniel Jasper "#include \\\n" 102*d89ae9d3SDaniel Jasper "\"c.h\"\n" 103*d89ae9d3SDaniel Jasper "#include \"b.h\"\n")); 104*d89ae9d3SDaniel Jasper } 105*d89ae9d3SDaniel Jasper 106*d89ae9d3SDaniel Jasper } // end namespace 107*d89ae9d3SDaniel Jasper } // end namespace format 108*d89ae9d3SDaniel Jasper } // end namespace clang 109