1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===- unittest/Format/FormatTestProto.cpp --------------------------------===//
2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//                     The LLVM Compiler Infrastructure
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// This file is distributed under the University of Illinois Open Source
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// License. See LICENSE.TXT for details.
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===----------------------------------------------------------------------===//
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "FormatTestUtils.h"
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Format/Format.h"
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/Support/Debug.h"
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "gtest/gtest.h"
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define DEBUG_TYPE "format-test"
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace clang {
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace format {
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass FormatTestProto : public ::testing::Test {
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesprotected:
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  static std::string format(llvm::StringRef Code, unsigned Offset,
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines                            unsigned Length, const FormatStyle &Style) {
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    DEBUG(llvm::errs() << "---\n");
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    DEBUG(llvm::errs() << Code << "\n\n");
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length));
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    tooling::Replacements Replaces = reformat(Style, Code, Ranges);
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    auto Result = applyAllReplacements(Code, Replaces);
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    EXPECT_TRUE(static_cast<bool>(Result));
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    return *Result;
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  }
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  static std::string format(llvm::StringRef Code) {
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    FormatStyle Style = getGoogleStyle(FormatStyle::LK_Proto);
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    Style.ColumnLimit = 60; // To make writing tests easier.
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    return format(Code, 0, Code.size(), Style);
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  }
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  static void verifyFormat(llvm::StringRef Code) {
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    EXPECT_EQ(Code.str(), format(test::messUp(Code)));
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  }
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
45651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsMessages) {
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("message SomeMessage {\n"
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  required int32 field1 = 1;\n"
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "}");
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("message SomeMessage {\n"
50c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines               "  required .absolute.Reference field1 = 1;\n"
51c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines               "}");
52c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines  verifyFormat("message SomeMessage {\n"
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  required int32 field1 = 1;\n"
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  optional string field2 = 2 [default = \"2\"]\n"
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "}");
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("message SomeMessage {\n"
586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "  optional really.really.long.qualified.type.aaa.aaaaaaa\n"
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "      fiiiiiiiiiiiiiiiiiiiiiiiiield = 1;\n"
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  optional\n"
616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "      really.really.long.qualified.type.aaa.aaaaaaa.aaaaaaaa\n"
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "          another_fiiiiiiiiiiiiiiiiiiiiield = 2;\n"
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "}");
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
6687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestProto, KeywordsInOtherLanguages) {
6787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  verifyFormat("optional string operator = 1;");
6887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
6987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
70651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsEnums) {
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("enum Type {\n"
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  UNKNOWN = 0;\n"
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  TYPE_A = 1;\n"
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "  TYPE_B = 2;\n"
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "};");
7687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  verifyFormat("enum Type {\n"
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  UNKNOWN = 0 [(some_options) = {a: aa, b: bb}];\n"
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "};");
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("enum Type {\n"
8087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar               "  UNKNOWN = 0 [(some_options) = {\n"
814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    a: aa,  // wrap\n"
8287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar               "    b: bb\n"
8387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar               "  }];\n"
8487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar               "};");
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
87651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, UnderstandsReturns) {
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("rpc Search(SearchRequest) returns (SearchResponse);");
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
91651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, MessageFieldAttributes) {
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("optional string test = 1 [default = \"test\"];");
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("optional bool a = 1 [default = true, deprecated = true];");
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("optional LongMessageType long_proto_field = 1 [\n"
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  default = REALLY_REALLY_LONG_CONSTANT_VALUE,\n"
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  deprecated = true\n"
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "];");
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("optional LongMessageType long_proto_field = 1\n"
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines               "    [default = REALLY_REALLY_LONG_CONSTANT_VALUE];");
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  verifyFormat("repeated double value = 1\n"
1016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "    [(aaaaaaa.aaaaaaaaa) = {aaaaaaaaaaaaaaaaa: AAAAAAAA}];");
102176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n"
103176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  aaaaaaaaaaaaaaaa: AAAAAAAAAA,\n"
104176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  bbbbbbbbbbbbbbbb: BBBBBBBBBB\n"
105176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "}];");
106176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n"
107176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  aaaaaaaaaaaaaaaa: AAAAAAAAAA\n"
108176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  bbbbbbbbbbbbbbbb: BBBBBBBBBB\n"
109176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "}];");
1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("repeated double value = 1 [\n"
1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  (aaaaaaa.aaaaaaaaa) = {\n"
1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    aaaaaaaaaaaaaaaa: AAAAAAAAAA\n"
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    bbbbbbbbbbbbbbbb: BBBBBBBBBB\n"
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  },\n"
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  (bbbbbbb.bbbbbbbbb) = {\n"
1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    aaaaaaaaaaaaaaaa: AAAAAAAAAA\n"
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    bbbbbbbbbbbbbbbb: BBBBBBBBBB\n"
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  }\n"
1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "];");
120176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n"
12158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar               "  type: \"AAAAAAAAAA\"\n"
12258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar               "  is: \"AAAAAAAAAA\"\n"
12358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar               "  or: \"BBBBBBBBBB\"\n"
12458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar               "}];");
12558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar  verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n"
126176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  aaaaaaaaaaaaaaaa: AAAAAAAAAA,\n"
127176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  bbbbbbb: BBBB,\n"
128176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  bbbb: BBB\n"
129176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "}];");
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("optional AAA aaa = 1 [\n"
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  foo = {\n"
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    key: 'a'  //\n"
1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  },\n"
1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  bar = {\n"
1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "    key: 'a'  //\n"
1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  }\n"
1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "];");
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
140b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestProto, DoesntWrapFileOptions) {
141b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar  EXPECT_EQ(
142b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      "option java_package = "
143b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      "\"some.really.long.package.that.exceeds.the.column.limit\";",
144b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar      format("option    java_package   =    "
145b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar             "\"some.really.long.package.that.exceeds.the.column.limit\";"));
146b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar}
147b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
148651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsOptions) {
149176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("option (MyProto.options) = {\n"
150176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_a: OK\n"
151176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_b: \"OK\"\n"
152176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_c: \"OK\"\n"
153176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  msg_field: {field_d: 123}\n"
154176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "};");
155176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("option (MyProto.options) = {\n"
156176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_a: OK\n"
157176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_b: \"OK\"\n"
158176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_c: \"OK\"\n"
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  msg_field: {field_d: 123 field_e: OK}\n"
160176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "};");
161176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("option (MyProto.options) = {\n"
162176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_a: OK  // Comment\n"
163176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_b: \"OK\"\n"
164176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_c: \"OK\"\n"
165176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  msg_field: {field_d: 123}\n"
166176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "};");
167176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  verifyFormat("option (MyProto.options) = {\n"
168176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  field_c: \"OK\"\n"
169176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "  msg_field{field_d: 123}\n"
170176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines               "};");
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Support syntax with <> instead of {}.
1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("option (MyProto.options) = {\n"
1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  field_c: \"OK\",\n"
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "  msg_field: <field_d: 123>\n"
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "};");
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
1796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestProto, FormatsService) {
1806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  verifyFormat("service SearchService {\n"
1816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "  rpc Search(SearchRequest) returns (SearchResponse) {\n"
1826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "    option foo = true;\n"
1836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "  }\n"
1846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines               "};");
1856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
1866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
18787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestProto, ExtendingMessage) {
18887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar  verifyFormat("extend .foo.Bar {\n"
18987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar               "}");
19087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}
19187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestProto, FormatsImports) {
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("import \"a.proto\";\n"
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "import \"b.proto\";\n"
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "// comment\n"
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "message A {\n"
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "}");
1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("import public \"a.proto\";\n"
2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "import \"b.proto\";\n"
2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "// comment\n"
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "message A {\n"
2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "}");
2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Missing semicolons should not confuse clang-format.
2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  verifyFormat("import \"a.proto\"\n"
2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "import \"b.proto\"\n"
2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "// comment\n"
2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "message A {\n"
2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar               "}");
2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace tooling
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace clang
215