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