1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//===- unittest/Format/FormatTestSelective.cpp - Formatting unit tests ----===//
2b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//
3b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//
5b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
6b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// License. See LICENSE.TXT for details.
7b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//
8b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
9b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
10b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#include "FormatTestUtils.h"
11b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#include "clang/Format/Format.h"
12b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#include "llvm/Support/Debug.h"
13b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#include "gtest/gtest.h"
14b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
15b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#define DEBUG_TYPE "format-test"
16b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
17b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarnamespace clang {
18b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarnamespace format {
19b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarnamespace {
20b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
21b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarclass FormatTestSelective : public ::testing::Test {
22b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarprotected:
23b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  std::string format(llvm::StringRef Code, unsigned Offset, unsigned Length) {
24b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar    DEBUG(llvm::errs() << "---\n");
25b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar    DEBUG(llvm::errs() << Code << "\n\n");
26b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar    std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length));
27b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar    bool IncompleteFormat = false;
28b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar    tooling::Replacements Replaces =
29b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar        reformat(Style, Code, Ranges, "<stdin>", &IncompleteFormat);
30b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar    EXPECT_FALSE(IncompleteFormat) << Code << "\n\n";
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    auto Result = applyAllReplacements(Code, Replaces);
324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    EXPECT_TRUE(static_cast<bool>(Result));
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    return *Result;
35b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  }
36b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
37b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  FormatStyle Style = getLLVMStyle();
38b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar};
39b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
40b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, RemovesTrailingWhitespaceOfFormattedLine) {
41b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a;\nint b;", format("int a; \nint b;", 0, 0));
42b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a;", format("int a;         ", 0, 0));
43b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a;\n", format("int a;  \n   \n   \n ", 0, 0));
44b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a;\nint b;    ", format("int a;  \nint b;    ", 0, 0));
45b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
46b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
47b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, FormatsCorrectRegionForLeadingWhitespace) {
4887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  EXPECT_EQ("{int b;\n"
4987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  int a;\n"
5087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "}",
5187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            format("{int b;\n  int  a;}", 8, 0));
5287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  EXPECT_EQ("{\n"
5387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  int b;\n"
5487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  int  a;}",
5587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            format("{int b;\n  int  a;}", 7, 0));
56b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
57b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.ColumnLimit = 12;
58b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("#define A  \\\n"
59b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int a;   \\\n"
60b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int b;",
61b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("#define A  \\\n"
62b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int a;   \\\n"
63b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int b;",
64b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   26, 0));
65b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("#define A  \\\n"
66b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int a;   \\\n"
67b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int b;",
68b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("#define A  \\\n"
69b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int a;   \\\n"
70b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int b;",
71b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   25, 0));
72b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
73b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
74b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, FormatLineWhenInvokedOnTrailingNewline) {
75b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int  b;\n\nint a;", format("int  b;\n\nint a;", 8, 0));
76b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int b;\n\nint a;", format("int  b;\n\nint a;", 7, 0));
77b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
78b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  // This might not strictly be correct, but is likely good in all practical
79b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  // cases.
80b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int b;\nint a;", format("int  b;int a;", 7, 0));
81b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
82b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
83b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, RemovesWhitespaceWhenTriggeredOnEmptyLine) {
84b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int  a;\n\n int b;", format("int  a;\n  \n\n int b;", 8, 0));
85b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int  a;\n\n int b;", format("int  a;\n  \n\n int b;", 9, 0));
86b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
87b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
88b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, ReformatsMovedLines) {
89b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ(
90b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      "template <typename T> T *getFETokenInfo() const {\n"
91b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      "  return static_cast<T *>(FETokenInfo);\n"
92b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      "}\n"
9387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "int  a; // <- Should not be formatted",
94b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      format(
95b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar          "template<typename T>\n"
96b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar          "T *getFETokenInfo() const { return static_cast<T*>(FETokenInfo); }\n"
9787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar          "int  a; // <- Should not be formatted",
98b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar          9, 5));
99b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
100b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
101b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, FormatsIfWithoutCompoundStatement) {
102b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.AllowShortIfStatementsOnASingleLine = true;
103b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("if (a) return;", format("if(a)\nreturn;", 7, 1));
104b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("if (a) return; // comment",
105b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("if(a)\nreturn; // comment", 20, 1));
106b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
107b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
108b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, FormatsCommentsLocally) {
109b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a;    // comment\n"
110b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int    b; // comment",
111b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int   a; // comment\n"
112b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int    b; // comment",
113b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
114b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int   a; // comment\n"
115b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "         // line 2\n"
116b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int b;",
117b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int   a; // comment\n"
118b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "            // line 2\n"
119b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int b;",
120b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   28, 0));
121b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int aaaaaa; // comment\n"
122b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int b;\n"
123b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int c; // unrelated comment",
124b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int aaaaaa; // comment\n"
125b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int b;\n"
126b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int   c; // unrelated comment",
127b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   31, 0));
128b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
129b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a; // This\n"
130b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // is\n"
131b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // a",
132b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int a;      // This\n"
133b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "            // is\n"
134b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "            // a",
135b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
136b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a; // This\n"
137b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // is\n"
138b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // a\n"
139b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "// This is b\n"
140b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int b;",
141b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int a; // This\n"
142b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     // is\n"
143b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     // a\n"
144b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "// This is b\n"
145b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int b;",
146b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
147b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a; // This\n"
148b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // is\n"
149b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // a\n"
150b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "\n"
15187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "//This is unrelated",
152b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int a; // This\n"
153b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     // is\n"
154b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     // a\n"
155b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "\n"
15687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "//This is unrelated",
157b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
158b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a;\n"
159b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "// This is\n"
160b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "// not formatted.   ",
161b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int a;\n"
162b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "// This is\n"
163b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "// not formatted.   ",
164b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  EXPECT_EQ("int x;  // Format this line.\n"
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "int xx; //\n"
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "int xxxxx; //",
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            format("int x; // Format this line.\n"
1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "int xx; //\n"
1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "int xxxxx; //",
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   0, 0));
172b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
173b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
174b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, IndividualStatementsOfNestedBlocks) {
175b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("DEBUG({\n"
176b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int i;\n"
177b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int        j;\n"
178b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "});",
179b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("DEBUG(   {\n"
180b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int        i;\n"
181b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int        j;\n"
182b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}   )  ;",
183b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   20, 1));
184b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("DEBUG(   {\n"
185b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int        i;\n"
186b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int j;\n"
187b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}   )  ;",
188b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("DEBUG(   {\n"
189b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int        i;\n"
190b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int        j;\n"
191b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}   )  ;",
192b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   41, 1));
193b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("DEBUG(   {\n"
194b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int        i;\n"
195b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int j;\n"
196b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}   )  ;",
197b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("DEBUG(   {\n"
198b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int        i;\n"
199b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int        j;\n"
200b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}   )  ;",
201b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   41, 1));
202b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("DEBUG({\n"
203b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int i;\n"
204b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int j;\n"
205b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "});",
206b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("DEBUG(   {\n"
207b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int        i;\n"
208b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int        j;\n"
209b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}   )  ;",
210b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   20, 1));
211b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
212b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("Debug({\n"
213b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "        if (aaaaaaaaaaaaaaaaaaaaaaaa)\n"
214b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "          return;\n"
215b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "      },\n"
216b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "      a);",
217b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("Debug({\n"
218b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "        if (aaaaaaaaaaaaaaaaaaaaaaaa)\n"
219b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "             return;\n"
220b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "      },\n"
221b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "      a);",
222b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   50, 1));
223b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("DEBUG({\n"
224b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  DEBUG({\n"
225b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int a;\n"
226b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int b;\n"
227b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  }) ;\n"
228b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "});",
229b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("DEBUG({\n"
230b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  DEBUG({\n"
231b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int a;\n"
232b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int    b;\n" // Format this line only.
233b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  }) ;\n"        // Don't touch this line.
234b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "});",
235b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   35, 0));
236b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("DEBUG({\n"
237b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int a; //\n"
238b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "});",
239b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("DEBUG({\n"
240b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int a; //\n"
241b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "});",
242b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
243b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("someFunction(\n"
244b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    [] {\n"
245b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "      // Only with this comment.\n"
246b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "      int i; // invoke formatting here.\n"
247b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    }, // force line break\n"
248b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    aaa);",
249b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("someFunction(\n"
250b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    [] {\n"
251b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "      // Only with this comment.\n"
252b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "      int   i; // invoke formatting here.\n"
253b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    }, // force line break\n"
254b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    aaa);",
255b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   63, 1));
256b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
257b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int longlongname; // comment\n"
258b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int x = f({\n"
259b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int x; // comment\n"
260b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int y; // comment\n"
261b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "});",
262b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int longlongname; // comment\n"
263b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int x = f({\n"
264b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int x; // comment\n"
265b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int y; // comment\n"
266b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "});",
267b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   65, 0));
268b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int s = f({\n"
269b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  class X {\n"
270b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  public:\n"
271b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    void f();\n"
272b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  };\n"
273b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "});",
274b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int s = f({\n"
275b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  class X {\n"
276b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    public:\n"
277b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    void f();\n"
278b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  };\n"
279b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "});",
280b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
2814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  EXPECT_EQ("SomeFunction(\n"
2824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "    [] {\n"
2834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "      int i;\n"
2844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "      return i;\n" // Format this line.
2854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "    },\n"
2864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "    [] {\n"
2874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "       return 2;\n" // Don't fix this.
2884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            "    });",
2894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            format("SomeFunction(\n"
2904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "    [] {\n"
2914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "      int i;\n"
2924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "       return i;\n" // Format this line.
2934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "    },\n"
2944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "    [] {\n"
2954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "       return 2;\n" // Don't fix this.
2964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   "    });",
2974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                   40, 0));
298b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
299b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
30087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestSelective, WrongIndent) {
30187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  EXPECT_EQ("namespace {\n"
30287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "int i;\n"
30387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "int j;\n"
30487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "}",
30587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            format("namespace {\n"
30687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "  int i;\n" // Format here.
30787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "  int j;\n"
30887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "}",
30987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   15, 0));
31087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  EXPECT_EQ("namespace {\n"
31187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  int i;\n"
31287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  int j;\n"
31387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "}",
31487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            format("namespace {\n"
31587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "  int i;\n"
31687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "  int j;\n" // Format here.
31787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "}",
31887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   24, 0));
31987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
32087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
321b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, AlwaysFormatsEntireMacroDefinitions) {
322b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.AlignEscapedNewlinesLeft = true;
323b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int  i;\n"
324b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "#define A \\\n"
325b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int i;  \\\n"
326b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int j\n"
327b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int  k;",
328b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int  i;\n"
329b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "#define A  \\\n"
330b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   " int   i    ;  \\\n"
331b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   " int   j\n"
332b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int  k;",
333b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   8, 0)); // 8: position of "#define".
334b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int  i;\n"
335b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "#define A \\\n"
336b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int i;  \\\n"
337b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  int j\n"
338b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int  k;",
339b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int  i;\n"
340b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "#define A  \\\n"
341b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   " int   i    ;  \\\n"
342b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   " int   j\n"
343b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "int  k;",
344b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   45, 0)); // 45: position of "j".
345b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
346b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
347b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, ReformatRegionAdjustsIndent) {
348b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("{\n"
349b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "{\n"
350b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "a;\n"
351b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "b;\n"
352b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}\n"
353b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
354b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("{\n"
355b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "{\n"
356b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "a;\n"
357b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     b;\n"
358b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}\n"
359b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
360b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   13, 2));
361b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("{\n"
362b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "{\n"
363b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  a;\n"
36487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  b;\n"
36587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            "  c;\n"
36687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar            " d;\n"
367b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}\n"
368b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
369b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("{\n"
370b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "{\n"
371b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     a;\n"
37287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "   b;\n"
37387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   "  c;\n"
37487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar                   " d;\n"
375b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}\n"
376b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
377b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   9, 2));
378b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("{\n"
379b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "{\n"
380b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "public:\n"
381b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  b;\n"
382b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}\n"
383b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
384b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("{\n"
385b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "{\n"
386b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "public:\n"
387b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     b;\n"
388b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}\n"
389b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
390b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   17, 2));
391b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("{\n"
392b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "{\n"
393b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "a;\n"
394b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}\n"
395b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "{\n"
396b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  b; //\n"
397b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}\n"
398b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
399b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("{\n"
400b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "{\n"
401b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "a;\n"
402b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}\n"
403b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "{\n"
404b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "           b; //\n"
405b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}\n"
406b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
407b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   22, 2));
408b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("  {\n"
409b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    a; //\n"
410b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  }",
411b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("  {\n"
412b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "a; //\n"
413b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  }",
414b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   4, 2));
415b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("void f() {}\n"
416b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "void g() {}",
417b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("void f() {}\n"
418b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "void g() {}",
419b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   13, 0));
420b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("int a; // comment\n"
421b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "       // line 2\n"
422b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "int b;",
423b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("int a; // comment\n"
424b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "       // line 2\n"
425b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  int b;",
426b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   35, 0));
427b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
428b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ(" void f() {\n"
429b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "#define A 1\n"
430b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            " }",
431b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format(" void f() {\n"
432b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "     #define A 1\n" // Format this line.
433b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   " }",
434b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   20, 0));
435b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ(" void f() {\n"
436b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int i;\n"
437b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "#define A \\\n"
438b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int i;  \\\n"
439b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "   int j;\n"
440b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "    int k;\n"
441b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            " }",
442b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format(" void f() {\n"
443b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int i;\n"
444b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "#define A \\\n"
445b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "    int i;  \\\n"
446b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "   int j;\n"
447b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "      int k;\n" // Format this line.
448b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   " }",
449b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   67, 0));
450b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
451b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.ColumnLimit = 11;
452b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("  int a;\n"
453b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  void\n"
454b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  ffffff() {\n"
455b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  }",
456b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("  int a;\n"
457b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "void ffffff() {}",
458b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   11, 0));
459b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
460b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
461b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestSelective, UnderstandsTabs) {
462b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.IndentWidth = 8;
463b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.UseTab = FormatStyle::UT_Always;
464b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  Style.AlignEscapedNewlinesLeft = true;
465b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("void f() {\n"
466b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "\tf();\n"
467b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "\tg();\n"
468b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
469b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("void f() {\n"
470b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "\tf();\n"
471b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "\tg();\n"
472b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
473b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   0, 0));
474b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("void f() {\n"
475b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "\tf();\n"
476b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "\tg();\n"
477b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
478b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("void f() {\n"
479b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "\tf();\n"
480b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "\tg();\n"
481b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
482b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   16, 0));
483b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ("void f() {\n"
484b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "  \tf();\n"
485b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "\tg();\n"
486b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            "}",
487b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar            format("void f() {\n"
488b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  \tf();\n"
489b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "  \tg();\n"
490b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   "}",
491b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar                   21, 0));
492b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
493b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
49487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestSelective, StopFormattingWhenLeavingScope) {
49587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  EXPECT_EQ(
49687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "void f() {\n"
49787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "  if (a) {\n"
49887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "    g();\n"
49987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "    h();\n"
50087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "}\n"
50187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "\n"
50287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "void g() {\n"
50387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      "}",
50487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar      format("void f() {\n"
50587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "  if (a) {\n" // Assume this was added without the closing brace.
50687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "  g();\n"
50787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "  h();\n"
50887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "}\n"
50987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "\n"
51087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "void g() {\n" // Make sure not to format this.
51187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             "}",
51287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar             15, 0));
51387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
51487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
5154967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestSelective, SelectivelyRequoteJavaScript) {
5164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  Style = getGoogleStyle(FormatStyle::LK_JavaScript);
5174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  EXPECT_EQ(
5184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      "var x = \"a\";\n"
5194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      "var x = 'a';\n"
5204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      "var x = \"a\";",
5214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      format("var x = \"a\";\n"
5224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar             "var x = \"a\";\n"
5234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar             "var x = \"a\";",
5244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar             20, 0));
5254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
5264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
527b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} // end namespace
528b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} // end namespace format
529b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} // end namespace clang
530