1d2a36bdfSKrasimir Georgiev //===- unittest/Format/FormatTestTextProto.cpp ----------------------------===//
226b144ccSKrasimir Georgiev //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
626b144ccSKrasimir Georgiev //
726b144ccSKrasimir Georgiev //===----------------------------------------------------------------------===//
826b144ccSKrasimir Georgiev
926b144ccSKrasimir Georgiev #include "FormatTestUtils.h"
1026b144ccSKrasimir Georgiev #include "clang/Format/Format.h"
1126b144ccSKrasimir Georgiev #include "llvm/Support/Debug.h"
1226b144ccSKrasimir Georgiev #include "gtest/gtest.h"
1326b144ccSKrasimir Georgiev
1426b144ccSKrasimir Georgiev #define DEBUG_TYPE "format-test"
1526b144ccSKrasimir Georgiev
1626b144ccSKrasimir Georgiev namespace clang {
1726b144ccSKrasimir Georgiev namespace format {
1826b144ccSKrasimir Georgiev
1926b144ccSKrasimir Georgiev class FormatTestTextProto : public ::testing::Test {
2026b144ccSKrasimir Georgiev protected:
format(llvm::StringRef Code,unsigned Offset,unsigned Length,const FormatStyle & Style)2126b144ccSKrasimir Georgiev static std::string format(llvm::StringRef Code, unsigned Offset,
22d6824876SKrasimir Georgiev unsigned Length, const FormatStyle &Style) {
233538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << "---\n");
243538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << Code << "\n\n");
2526b144ccSKrasimir Georgiev std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length));
26d6824876SKrasimir Georgiev tooling::Replacements Replaces = reformat(Style, Code, Ranges);
2726b144ccSKrasimir Georgiev auto Result = applyAllReplacements(Code, Replaces);
2826b144ccSKrasimir Georgiev EXPECT_TRUE(static_cast<bool>(Result));
293538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
3026b144ccSKrasimir Georgiev return *Result;
3126b144ccSKrasimir Georgiev }
3226b144ccSKrasimir Georgiev
format(llvm::StringRef Code,const FormatStyle & Style)33b79987a9SKrasimir Georgiev static std::string format(llvm::StringRef Code, const FormatStyle &Style) {
3426b144ccSKrasimir Georgiev return format(Code, 0, Code.size(), Style);
3526b144ccSKrasimir Georgiev }
3626b144ccSKrasimir Georgiev
_verifyFormat(const char * File,int Line,llvm::StringRef Code,const FormatStyle & Style)3769ecd248SMarek Kurdej static void _verifyFormat(const char *File, int Line, llvm::StringRef Code,
3869ecd248SMarek Kurdej const FormatStyle &Style) {
3969ecd248SMarek Kurdej ::testing::ScopedTrace t(File, Line, ::testing::Message() << Code.str());
40c9a918c5SMark Zeren EXPECT_EQ(Code.str(), format(Code, Style)) << "Expected code is not stable";
41b79987a9SKrasimir Georgiev EXPECT_EQ(Code.str(), format(test::messUp(Code), Style));
42b79987a9SKrasimir Georgiev }
43b79987a9SKrasimir Georgiev
_verifyFormat(const char * File,int Line,llvm::StringRef Code)4469ecd248SMarek Kurdej static void _verifyFormat(const char *File, int Line, llvm::StringRef Code) {
45b79987a9SKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
46b79987a9SKrasimir Georgiev Style.ColumnLimit = 60; // To make writing tests easier.
4769ecd248SMarek Kurdej _verifyFormat(File, Line, Code, Style);
4826b144ccSKrasimir Georgiev }
4926b144ccSKrasimir Georgiev };
5026b144ccSKrasimir Georgiev
5169ecd248SMarek Kurdej #define verifyFormat(...) _verifyFormat(__FILE__, __LINE__, __VA_ARGS__)
5269ecd248SMarek Kurdej
TEST_F(FormatTestTextProto,KeepsTopLevelEntriesFittingALine)5326b144ccSKrasimir Georgiev TEST_F(FormatTestTextProto, KeepsTopLevelEntriesFittingALine) {
5426b144ccSKrasimir Georgiev verifyFormat("field_a: OK field_b: OK field_c: OK field_d: OK field_e: OK");
5526b144ccSKrasimir Georgiev }
5626b144ccSKrasimir Georgiev
TEST_F(FormatTestTextProto,SupportsMessageFields)5726b144ccSKrasimir Georgiev TEST_F(FormatTestTextProto, SupportsMessageFields) {
5826b144ccSKrasimir Georgiev verifyFormat("msg_field: {}");
5926b144ccSKrasimir Georgiev
6026b144ccSKrasimir Georgiev verifyFormat("msg_field: { field_a: A }");
6126b144ccSKrasimir Georgiev
6226b144ccSKrasimir Georgiev verifyFormat("msg_field: { field_a: \"OK\" field_b: 123 }");
6326b144ccSKrasimir Georgiev
6426b144ccSKrasimir Georgiev verifyFormat("msg_field: {\n"
6526b144ccSKrasimir Georgiev " field_a: 1\n"
6626b144ccSKrasimir Georgiev " field_b: OK\n"
6726b144ccSKrasimir Georgiev " field_c: \"OK\"\n"
6826b144ccSKrasimir Georgiev " field_d: 123\n"
6926b144ccSKrasimir Georgiev " field_e: 23\n"
7026b144ccSKrasimir Georgiev "}");
7126b144ccSKrasimir Georgiev
7226b144ccSKrasimir Georgiev verifyFormat("msg_field {}");
7326b144ccSKrasimir Georgiev
7426b144ccSKrasimir Georgiev verifyFormat("msg_field { field_a: A }");
7526b144ccSKrasimir Georgiev
7626b144ccSKrasimir Georgiev verifyFormat("msg_field { field_a: \"OK\" field_b: 123 }");
7726b144ccSKrasimir Georgiev
7826b144ccSKrasimir Georgiev verifyFormat("msg_field {\n"
7926b144ccSKrasimir Georgiev " field_a: 1\n"
8026b144ccSKrasimir Georgiev " field_b: OK\n"
8126b144ccSKrasimir Georgiev " field_c: \"OK\"\n"
8226b144ccSKrasimir Georgiev " field_d: 123\n"
8326b144ccSKrasimir Georgiev " field_e: 23.0\n"
8426b144ccSKrasimir Georgiev " field_f: false\n"
8526b144ccSKrasimir Georgiev " field_g: 'lala'\n"
8626b144ccSKrasimir Georgiev " field_h: 1234.567e-89\n"
8726b144ccSKrasimir Georgiev "}");
8826b144ccSKrasimir Georgiev
8926b144ccSKrasimir Georgiev verifyFormat("msg_field: { msg_field { field_a: 1 } }");
9026b144ccSKrasimir Georgiev
9126b144ccSKrasimir Georgiev verifyFormat("id: \"ala.bala\"\n"
9226b144ccSKrasimir Georgiev "item { type: ITEM_A rank: 1 score: 90.0 }\n"
9326b144ccSKrasimir Georgiev "item { type: ITEM_B rank: 2 score: 70.5 }\n"
9426b144ccSKrasimir Georgiev "item {\n"
9526b144ccSKrasimir Georgiev " type: ITEM_A\n"
9626b144ccSKrasimir Georgiev " rank: 3\n"
9726b144ccSKrasimir Georgiev " score: 20.0\n"
9826b144ccSKrasimir Georgiev " description: \"the third item has a description\"\n"
9926b144ccSKrasimir Georgiev "}");
10026b144ccSKrasimir Georgiev }
10126b144ccSKrasimir Georgiev
TEST_F(FormatTestTextProto,AvoidsTopLevelBinPacking)10226b144ccSKrasimir Georgiev TEST_F(FormatTestTextProto, AvoidsTopLevelBinPacking) {
10326b144ccSKrasimir Georgiev verifyFormat("field_a: OK\n"
10426b144ccSKrasimir Georgiev "field_b: OK\n"
10526b144ccSKrasimir Georgiev "field_c: OK\n"
10626b144ccSKrasimir Georgiev "field_d: OK\n"
10726b144ccSKrasimir Georgiev "field_e: OK\n"
10826b144ccSKrasimir Georgiev "field_f: OK");
10926b144ccSKrasimir Georgiev
11026b144ccSKrasimir Georgiev verifyFormat("field_a: OK\n"
11126b144ccSKrasimir Georgiev "field_b: \"OK\"\n"
11226b144ccSKrasimir Georgiev "field_c: \"OK\"\n"
11326b144ccSKrasimir Georgiev "msg_field: { field_d: 123 }\n"
11426b144ccSKrasimir Georgiev "field_e: OK\n"
11526b144ccSKrasimir Georgiev "field_f: OK");
11626b144ccSKrasimir Georgiev
11726b144ccSKrasimir Georgiev verifyFormat("field_a: OK\n"
11826b144ccSKrasimir Georgiev "field_b: \"OK\"\n"
11926b144ccSKrasimir Georgiev "field_c: \"OK\"\n"
12026b144ccSKrasimir Georgiev "msg_field: { field_d: 123 field_e: OK }");
12126b144ccSKrasimir Georgiev
12226b144ccSKrasimir Georgiev verifyFormat("a: {\n"
12326b144ccSKrasimir Georgiev " field_a: OK\n"
12426b144ccSKrasimir Georgiev " field_b { field_c: OK }\n"
12526b144ccSKrasimir Georgiev " field_d: OKOKOK\n"
12626b144ccSKrasimir Georgiev " field_e: OK\n"
12726b144ccSKrasimir Georgiev "}");
12826b144ccSKrasimir Georgiev
12926b144ccSKrasimir Georgiev verifyFormat("field_a: OK,\n"
13026b144ccSKrasimir Georgiev "field_b { field_c: OK },\n"
13126b144ccSKrasimir Georgiev "field_d: OKOKOK,\n"
13226b144ccSKrasimir Georgiev "field_e: OK");
13326b144ccSKrasimir Georgiev }
13426b144ccSKrasimir Georgiev
TEST_F(FormatTestTextProto,AddsNewlinesAfterTrailingComments)13526b144ccSKrasimir Georgiev TEST_F(FormatTestTextProto, AddsNewlinesAfterTrailingComments) {
13626b144ccSKrasimir Georgiev verifyFormat("field_a: OK // Comment\n"
13726b144ccSKrasimir Georgiev "field_b: 1");
13826b144ccSKrasimir Georgiev
13926b144ccSKrasimir Georgiev verifyFormat("field_a: OK\n"
14026b144ccSKrasimir Georgiev "msg_field: {\n"
14126b144ccSKrasimir Georgiev " field_b: OK // Comment\n"
14226b144ccSKrasimir Georgiev "}");
14326b144ccSKrasimir Georgiev
14426b144ccSKrasimir Georgiev verifyFormat("field_a: OK\n"
14526b144ccSKrasimir Georgiev "msg_field {\n"
14626b144ccSKrasimir Georgiev " field_b: OK // Comment\n"
14726b144ccSKrasimir Georgiev "}");
14826b144ccSKrasimir Georgiev }
14926b144ccSKrasimir Georgiev
TEST_F(FormatTestTextProto,ImplicitStringLiteralConcatenation)1509c95dfe6SDaniel Jasper TEST_F(FormatTestTextProto, ImplicitStringLiteralConcatenation) {
1519c95dfe6SDaniel Jasper verifyFormat("field_a: 'aaaaa'\n"
1529c95dfe6SDaniel Jasper " 'bbbbb'");
1539c95dfe6SDaniel Jasper verifyFormat("field_a: \"aaaaa\"\n"
1549c95dfe6SDaniel Jasper " \"bbbbb\"");
1559c95dfe6SDaniel Jasper FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
1569c95dfe6SDaniel Jasper Style.AlwaysBreakBeforeMultilineStrings = true;
1579c95dfe6SDaniel Jasper verifyFormat("field_a:\n"
1589c95dfe6SDaniel Jasper " 'aaaaa'\n"
1599c95dfe6SDaniel Jasper " 'bbbbb'",
1609c95dfe6SDaniel Jasper Style);
1619c95dfe6SDaniel Jasper verifyFormat("field_a:\n"
1629c95dfe6SDaniel Jasper " \"aaaaa\"\n"
1639c95dfe6SDaniel Jasper " \"bbbbb\"",
1649c95dfe6SDaniel Jasper Style);
1659c95dfe6SDaniel Jasper }
1669c95dfe6SDaniel Jasper
TEST_F(FormatTestTextProto,SupportsAngleBracketMessageFields)16726b144ccSKrasimir Georgiev TEST_F(FormatTestTextProto, SupportsAngleBracketMessageFields) {
16826b144ccSKrasimir Georgiev // Single-line tests
16926b144ccSKrasimir Georgiev verifyFormat("msg_field <>");
17026b144ccSKrasimir Georgiev verifyFormat("msg_field: <>");
17126b144ccSKrasimir Georgiev verifyFormat("msg_field < field_a: OK >");
17226b144ccSKrasimir Georgiev verifyFormat("msg_field: < field_a: 123 >");
17326b144ccSKrasimir Georgiev verifyFormat("msg_field < field_a <> >");
17426b144ccSKrasimir Georgiev verifyFormat("msg_field < field_a < field_b <> > >");
17526b144ccSKrasimir Georgiev verifyFormat("msg_field: < field_a < field_b: <> > >");
17626b144ccSKrasimir Georgiev verifyFormat("msg_field < field_a: OK, field_b: \"OK\" >");
17726b144ccSKrasimir Georgiev verifyFormat("msg_field: < field_a: OK, field_b: \"OK\" >");
17826b144ccSKrasimir Georgiev // Multiple lines tests
17926b144ccSKrasimir Georgiev verifyFormat("msg_field <\n"
18026b144ccSKrasimir Georgiev " field_a: OK\n"
1818b98f551SKrasimir Georgiev " field_b: <>,\n"
1828b98f551SKrasimir Georgiev " field_c: OK\n"
1838b98f551SKrasimir Georgiev ">");
1848b98f551SKrasimir Georgiev
1858b98f551SKrasimir Georgiev verifyFormat("msg_field <\n"
1868b98f551SKrasimir Georgiev " field_a { field_b: 1 },\n"
1878b98f551SKrasimir Georgiev " field_c: < f_d: 2 >\n"
1888b98f551SKrasimir Georgiev ">");
1898b98f551SKrasimir Georgiev
1908b98f551SKrasimir Georgiev verifyFormat("msg_field: <\n"
1918b98f551SKrasimir Georgiev " field_a: OK\n"
1928b98f551SKrasimir Georgiev " field_b: <>,\n"
1938b98f551SKrasimir Georgiev " field_c: OK\n"
1948b98f551SKrasimir Georgiev ">");
1958b98f551SKrasimir Georgiev
1968b98f551SKrasimir Georgiev verifyFormat("msg_field: <\n"
1978b98f551SKrasimir Georgiev " field_a { field_b: 1 },\n"
1988b98f551SKrasimir Georgiev " field_c: < fd_d: 2 >\n"
1998b98f551SKrasimir Georgiev ">");
2008b98f551SKrasimir Georgiev
2018b98f551SKrasimir Georgiev verifyFormat("field_a: \"OK\",\n"
2028b98f551SKrasimir Georgiev "msg_field: < field_b: 123 >,\n"
2038b98f551SKrasimir Georgiev "field_c: {}");
2048b98f551SKrasimir Georgiev
2058b98f551SKrasimir Georgiev verifyFormat("field_a < field_b: 1 >,\n"
2068b98f551SKrasimir Georgiev "msg_fid: < fiel_b: 123 >,\n"
2078b98f551SKrasimir Georgiev "field_c <>");
2088b98f551SKrasimir Georgiev
2098b98f551SKrasimir Georgiev verifyFormat("field_a < field_b: 1 >\n"
2108b98f551SKrasimir Georgiev "msg_fied: < field_b: 123 >\n"
2118b98f551SKrasimir Georgiev "field_c <>");
2128b98f551SKrasimir Georgiev
2138b98f551SKrasimir Georgiev verifyFormat("field <\n"
2148b98f551SKrasimir Georgiev " field < field: <> >,\n"
2158b98f551SKrasimir Georgiev " field <>\n"
2168b98f551SKrasimir Georgiev ">\n"
2178b98f551SKrasimir Georgiev "field: < field: 1 >");
2188b98f551SKrasimir Georgiev
2198b98f551SKrasimir Georgiev verifyFormat("msg_field <\n"
2208b98f551SKrasimir Georgiev " field_a: OK\n"
22126b144ccSKrasimir Georgiev " field_b: \"OK\"\n"
22226b144ccSKrasimir Georgiev " field_c: 1\n"
22326b144ccSKrasimir Georgiev " field_d: 12.5\n"
22426b144ccSKrasimir Georgiev " field_e: OK\n"
22526b144ccSKrasimir Georgiev ">");
22626b144ccSKrasimir Georgiev
22726b144ccSKrasimir Georgiev verifyFormat("msg_field: <>\n"
22826b144ccSKrasimir Georgiev "field_c: \"OK\",\n"
22926b144ccSKrasimir Georgiev "msg_field: < field_d: 123 >\n"
23026b144ccSKrasimir Georgiev "field_e: OK\n"
23126b144ccSKrasimir Georgiev "msg_field: < field_d: 12 >");
23226b144ccSKrasimir Georgiev
23326b144ccSKrasimir Georgiev verifyFormat("field_a: OK,\n"
23426b144ccSKrasimir Georgiev "field_b < field_c: OK >,\n"
23526b144ccSKrasimir Georgiev "field_d: < 12.5 >,\n"
23626b144ccSKrasimir Georgiev "field_e: OK");
23726b144ccSKrasimir Georgiev
23826b144ccSKrasimir Georgiev verifyFormat("field_a: OK\n"
23926b144ccSKrasimir Georgiev "field_b < field_c: OK >\n"
24026b144ccSKrasimir Georgiev "field_d: < 12.5 >\n"
24126b144ccSKrasimir Georgiev "field_e: OKOKOK");
24226b144ccSKrasimir Georgiev
24326b144ccSKrasimir Georgiev verifyFormat("msg_field <\n"
24426b144ccSKrasimir Georgiev " field_a: OK,\n"
24526b144ccSKrasimir Georgiev " field_b < field_c: OK >,\n"
24626b144ccSKrasimir Georgiev " field_d: < 12.5 >,\n"
24726b144ccSKrasimir Georgiev " field_e: OK\n"
24826b144ccSKrasimir Georgiev ">");
24926b144ccSKrasimir Georgiev
25026b144ccSKrasimir Georgiev verifyFormat("msg_field <\n"
25126b144ccSKrasimir Georgiev " field_a: < field: OK >,\n"
25226b144ccSKrasimir Georgiev " field_b < field_c: OK >,\n"
25326b144ccSKrasimir Georgiev " field_d: < 12.5 >,\n"
25426b144ccSKrasimir Georgiev " field_e: OK,\n"
25526b144ccSKrasimir Georgiev ">");
25626b144ccSKrasimir Georgiev
25726b144ccSKrasimir Georgiev verifyFormat("msg_field: <\n"
25826b144ccSKrasimir Georgiev " field_a: \"OK\"\n"
25926b144ccSKrasimir Georgiev " msg_field: { field_b: OK }\n"
26026b144ccSKrasimir Georgiev " field_g: OK\n"
26126b144ccSKrasimir Georgiev " field_g: OK\n"
26226b144ccSKrasimir Georgiev " field_g: OK\n"
26326b144ccSKrasimir Georgiev ">");
26426b144ccSKrasimir Georgiev
26526b144ccSKrasimir Georgiev verifyFormat("field_a {\n"
26626b144ccSKrasimir Georgiev " field_d: ok\n"
26726b144ccSKrasimir Georgiev " field_b: < field_c: 1 >\n"
26826b144ccSKrasimir Georgiev " field_d: ok\n"
26926b144ccSKrasimir Georgiev " field_d: ok\n"
27026b144ccSKrasimir Georgiev "}");
27126b144ccSKrasimir Georgiev
27226b144ccSKrasimir Georgiev verifyFormat("field_a: {\n"
27326b144ccSKrasimir Georgiev " field_d: ok\n"
27426b144ccSKrasimir Georgiev " field_b: < field_c: 1 >\n"
27526b144ccSKrasimir Georgiev " field_d: ok\n"
27626b144ccSKrasimir Georgiev " field_d: ok\n"
27726b144ccSKrasimir Georgiev "}");
27826b144ccSKrasimir Georgiev
2798b98f551SKrasimir Georgiev verifyFormat("field_a: <\n"
2808b98f551SKrasimir Georgiev " f1: 1,\n"
2818b98f551SKrasimir Georgiev " f2: <>\n"
2828b98f551SKrasimir Georgiev ">\n"
28326b144ccSKrasimir Georgiev "field_b <\n"
28426b144ccSKrasimir Georgiev " field_b1: <>\n"
28526b144ccSKrasimir Georgiev " field_b2: ok,\n"
28626b144ccSKrasimir Georgiev " field_b3: <\n"
28726b144ccSKrasimir Georgiev " field_x {} // Comment\n"
28826b144ccSKrasimir Georgiev " field_y: { field_z: 1 }\n"
28926b144ccSKrasimir Georgiev " field_w: ok\n"
29026b144ccSKrasimir Georgiev " >\n"
29126b144ccSKrasimir Georgiev " field {\n"
29226b144ccSKrasimir Georgiev " field_x <> // Comment\n"
29326b144ccSKrasimir Georgiev " field_y: < field_z: 1 >\n"
29426b144ccSKrasimir Georgiev " field_w: ok\n"
29526b144ccSKrasimir Georgiev " msg_field: <\n"
29626b144ccSKrasimir Georgiev " field: <>\n"
29726b144ccSKrasimir Georgiev " field: < field: 1 >\n"
29826b144ccSKrasimir Georgiev " field: < field: 2 >\n"
29926b144ccSKrasimir Georgiev " field: < field: 3 >\n"
30026b144ccSKrasimir Georgiev " field: < field: 4 >\n"
30126b144ccSKrasimir Georgiev " field: ok\n"
30226b144ccSKrasimir Georgiev " >\n"
30326b144ccSKrasimir Georgiev " }\n"
30426b144ccSKrasimir Georgiev ">\n"
30526b144ccSKrasimir Georgiev "field: OK,\n"
30626b144ccSKrasimir Georgiev "field_c < field < field <> > >");
307ddb19248SKrasimir Georgiev
308ddb19248SKrasimir Georgiev verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
309ddb19248SKrasimir Georgiev "head_id: 1\n"
310ddb19248SKrasimir Georgiev "data < key: value >");
311ddb19248SKrasimir Georgiev
312ddb19248SKrasimir Georgiev verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
313ddb19248SKrasimir Georgiev "head_id: 1\n"
314ddb19248SKrasimir Georgiev "data < key: value >\n"
315ddb19248SKrasimir Georgiev "tail_id: 2");
316ddb19248SKrasimir Georgiev
317ddb19248SKrasimir Georgiev verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
318ddb19248SKrasimir Georgiev "head_id: 1\n"
319ddb19248SKrasimir Georgiev "data < key: value >\n"
320ddb19248SKrasimir Georgiev "data { key: value }");
321ddb19248SKrasimir Georgiev
322ddb19248SKrasimir Georgiev verifyFormat("app {\n"
323ddb19248SKrasimir Georgiev " app_id: 'com.javax.swing.salsa.latino'\n"
324ddb19248SKrasimir Georgiev " head_id: 1\n"
325ddb19248SKrasimir Georgiev " data < key: value >\n"
326ddb19248SKrasimir Georgiev "}");
327ddb19248SKrasimir Georgiev
328ddb19248SKrasimir Georgiev verifyFormat("app: {\n"
329ddb19248SKrasimir Georgiev " app_id: 'com.javax.swing.salsa.latino'\n"
330ddb19248SKrasimir Georgiev " head_id: 1\n"
331ddb19248SKrasimir Georgiev " data < key: value >\n"
332ddb19248SKrasimir Georgiev "}");
333ddb19248SKrasimir Georgiev
334ddb19248SKrasimir Georgiev verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
335ddb19248SKrasimir Georgiev "headheadheadheadheadhead_id: 1\n"
336ddb19248SKrasimir Georgiev "product_data { product { 1 } }");
337ddb19248SKrasimir Georgiev
338ddb19248SKrasimir Georgiev verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
339ddb19248SKrasimir Georgiev "headheadheadheadheadhead_id: 1\n"
340ddb19248SKrasimir Georgiev "product_data < product { 1 } >");
341ddb19248SKrasimir Georgiev
342ddb19248SKrasimir Georgiev verifyFormat("app_id: 'com.javax.swing.salsa.latino'\n"
343ddb19248SKrasimir Georgiev "headheadheadheadheadhead_id: 1\n"
344ddb19248SKrasimir Georgiev "product_data < product < 1 > >");
345ddb19248SKrasimir Georgiev
346ddb19248SKrasimir Georgiev verifyFormat("app <\n"
347ddb19248SKrasimir Georgiev " app_id: 'com.javax.swing.salsa.latino'\n"
348ddb19248SKrasimir Georgiev " headheadheadheadheadhead_id: 1\n"
349ddb19248SKrasimir Georgiev " product_data < product { 1 } >\n"
350ddb19248SKrasimir Georgiev ">");
35191700e07SKrasimir Georgiev
35291700e07SKrasimir Georgiev verifyFormat("dcccwrnfioeruvginerurneitinfo {\n"
35391700e07SKrasimir Georgiev " exte3nsionrnfvui { key: value }\n"
35491700e07SKrasimir Georgiev "}");
35526b144ccSKrasimir Georgiev }
35655c23a10SKrasimir Georgiev
TEST_F(FormatTestTextProto,DiscardsUnbreakableTailIfCanBreakAfter)35755c23a10SKrasimir Georgiev TEST_F(FormatTestTextProto, DiscardsUnbreakableTailIfCanBreakAfter) {
35855c23a10SKrasimir Georgiev // The two closing braces count towards the string UnbreakableTailLength, but
35955c23a10SKrasimir Georgiev // since we have broken after the corresponding opening braces, we don't
36055c23a10SKrasimir Georgiev // consider that length for string breaking.
36155c23a10SKrasimir Georgiev verifyFormat(
36255c23a10SKrasimir Georgiev "foo: {\n"
36355c23a10SKrasimir Georgiev " bar: {\n"
36455c23a10SKrasimir Georgiev " text: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n"
36555c23a10SKrasimir Georgiev " }\n"
36655c23a10SKrasimir Georgiev "}");
36755c23a10SKrasimir Georgiev }
368374e6de8SKrasimir Georgiev
TEST_F(FormatTestTextProto,KeepsLongStringLiteralsOnSameLine)369374e6de8SKrasimir Georgiev TEST_F(FormatTestTextProto, KeepsLongStringLiteralsOnSameLine) {
370374e6de8SKrasimir Georgiev verifyFormat(
371374e6de8SKrasimir Georgiev "foo: {\n"
372374e6de8SKrasimir Georgiev " text: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaa\"\n"
373374e6de8SKrasimir Georgiev "}");
374374e6de8SKrasimir Georgiev }
375c8b461b3SKrasimir Georgiev
TEST_F(FormatTestTextProto,KeepsCommentsIndentedInList)376c8b461b3SKrasimir Georgiev TEST_F(FormatTestTextProto, KeepsCommentsIndentedInList) {
377c8b461b3SKrasimir Georgiev verifyFormat("aaaaaaaaaa: 100\n"
378c8b461b3SKrasimir Georgiev "bbbbbbbbbbbbbbbbbbbbbbbbbbb: 200\n"
379c8b461b3SKrasimir Georgiev "# Single line comment for stuff here.\n"
380c8b461b3SKrasimir Georgiev "cccccccccccccccccccccccc: 3849\n"
381c8b461b3SKrasimir Georgiev "# Multiline comment for stuff here.\n"
382c8b461b3SKrasimir Georgiev "# Multiline comment for stuff here.\n"
383c8b461b3SKrasimir Georgiev "# Multiline comment for stuff here.\n"
384c8b461b3SKrasimir Georgiev "cccccccccccccccccccccccc: 3849");
385c8b461b3SKrasimir Georgiev }
386c8b461b3SKrasimir Georgiev
TEST_F(FormatTestTextProto,UnderstandsHashComments)387374f1d81SBjörn Schäpers TEST_F(FormatTestTextProto, UnderstandsHashComments) {
38845dde418SKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
38945dde418SKrasimir Georgiev Style.ColumnLimit = 60; // To make writing tests easier.
39045dde418SKrasimir Georgiev EXPECT_EQ("aaa: 100\n"
39145dde418SKrasimir Georgiev "## this is a double-hash comment.\n"
39245dde418SKrasimir Georgiev "bb: 100\n"
39345dde418SKrasimir Georgiev "## another double-hash comment.\n"
39445dde418SKrasimir Georgiev "### a triple-hash comment\n"
39545dde418SKrasimir Georgiev "cc: 200\n"
396374f1d81SBjörn Schäpers "### another triple-hash comment\n"
39745dde418SKrasimir Georgiev "#### a quadriple-hash comment\n"
398374f1d81SBjörn Schäpers "dd: 100\n"
399374f1d81SBjörn Schäpers "#### another quadriple-hash comment\n",
40045dde418SKrasimir Georgiev format("aaa: 100\n"
40145dde418SKrasimir Georgiev "##this is a double-hash comment.\n"
40245dde418SKrasimir Georgiev "bb: 100\n"
40345dde418SKrasimir Georgiev "## another double-hash comment.\n"
40445dde418SKrasimir Georgiev "###a triple-hash comment\n"
40545dde418SKrasimir Georgiev "cc: 200\n"
406374f1d81SBjörn Schäpers "### another triple-hash comment\n"
40745dde418SKrasimir Georgiev "####a quadriple-hash comment\n"
408374f1d81SBjörn Schäpers "dd: 100\n"
409374f1d81SBjörn Schäpers "#### another quadriple-hash comment\n",
41045dde418SKrasimir Georgiev Style));
411*eb35e0ecSKrasimir Georgiev
412*eb35e0ecSKrasimir Georgiev // Ensure we support a common pattern for naming sections.
413*eb35e0ecSKrasimir Georgiev EXPECT_EQ("##############\n"
414*eb35e0ecSKrasimir Georgiev "# section name\n"
415*eb35e0ecSKrasimir Georgiev "##############",
416*eb35e0ecSKrasimir Georgiev format("##############\n"
417*eb35e0ecSKrasimir Georgiev "# section name\n"
418*eb35e0ecSKrasimir Georgiev "##############",
419*eb35e0ecSKrasimir Georgiev Style));
420*eb35e0ecSKrasimir Georgiev
421*eb35e0ecSKrasimir Georgiev EXPECT_EQ("///////////////\n"
422*eb35e0ecSKrasimir Georgiev "// section name\n"
423*eb35e0ecSKrasimir Georgiev "///////////////",
424*eb35e0ecSKrasimir Georgiev format("///////////////\n"
425*eb35e0ecSKrasimir Georgiev "// section name\n"
426*eb35e0ecSKrasimir Georgiev "///////////////",
427*eb35e0ecSKrasimir Georgiev Style));
42845dde418SKrasimir Georgiev }
42945dde418SKrasimir Georgiev
TEST_F(FormatTestTextProto,FormatsExtensions)4304e290648SKrasimir Georgiev TEST_F(FormatTestTextProto, FormatsExtensions) {
4314e290648SKrasimir Georgiev verifyFormat("[type] { key: value }");
4324e290648SKrasimir Georgiev verifyFormat("[type] {\n"
4334e290648SKrasimir Georgiev " keyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy: value\n"
4344e290648SKrasimir Georgiev "}");
4354e290648SKrasimir Georgiev verifyFormat("[type.type] { key: value }");
4364e290648SKrasimir Georgiev verifyFormat("[type.type] < key: value >");
4374e290648SKrasimir Georgiev verifyFormat("[type.type/type.type] { key: value }");
4384e290648SKrasimir Georgiev verifyFormat("msg {\n"
4394e290648SKrasimir Georgiev " [type.type] { key: value }\n"
4404e290648SKrasimir Georgiev "}");
4414e290648SKrasimir Georgiev verifyFormat("msg {\n"
4424e290648SKrasimir Georgiev " [type.type] {\n"
4434e290648SKrasimir Georgiev " keyyyyyyyyyyyyyy: valuuuuuuuuuuuuuuuuuuuuuuuuue\n"
4444e290648SKrasimir Georgiev " }\n"
4454e290648SKrasimir Georgiev "}");
4464e290648SKrasimir Georgiev verifyFormat("key: value\n"
4474e290648SKrasimir Georgiev "[a.b] { key: value }");
4484e290648SKrasimir Georgiev verifyFormat("msg: <\n"
4494e290648SKrasimir Georgiev " key: value\n"
4504e290648SKrasimir Georgiev " [a.b.c/d.e]: < key: value >\n"
4514e290648SKrasimir Georgiev " [f.g]: <\n"
4524e290648SKrasimir Georgiev " key: valueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n"
4534e290648SKrasimir Georgiev " key: {}\n"
4544e290648SKrasimir Georgiev " >\n"
4554e290648SKrasimir Georgiev " key {}\n"
4564e290648SKrasimir Georgiev " [h.i.j] < key: value >\n"
4574e290648SKrasimir Georgiev " [a]: {\n"
4584e290648SKrasimir Georgiev " [b.c]: {}\n"
4594e290648SKrasimir Georgiev " [d] <>\n"
4604e290648SKrasimir Georgiev " [e/f]: 1\n"
4614e290648SKrasimir Georgiev " }\n"
4624e290648SKrasimir Georgiev ">");
4634e290648SKrasimir Georgiev verifyFormat("[longg.long.long.long.long.long.long.long.long.long.long\n"
4644e290648SKrasimir Georgiev " .longg.longlong] { key: value }");
4654e290648SKrasimir Georgiev verifyFormat("[longg.long.long.long.long.long.long.long.long.long.long\n"
4664e290648SKrasimir Georgiev " .longg.longlong] {\n"
4674e290648SKrasimir Georgiev " key: value\n"
4684e290648SKrasimir Georgiev " key: value\n"
4694e290648SKrasimir Georgiev " key: value\n"
4704e290648SKrasimir Georgiev " key: value\n"
4714e290648SKrasimir Georgiev "}");
4724e290648SKrasimir Georgiev verifyFormat("[longg.long.long.long.long.long.long.long.long.long\n"
4734e290648SKrasimir Georgiev " .long/longg.longlong] { key: value }");
4744e290648SKrasimir Georgiev verifyFormat("[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/\n"
4754e290648SKrasimir Georgiev " bbbbbbbbbbbbbb] { key: value }");
476abbd54ceSKrasimir Georgiev // These go over the column limit intentionally, since the alternative
477abbd54ceSKrasimir Georgiev // [aa..a\n] is worse.
478ece7e95fSmydeveloperday verifyFormat(
479ece7e95fSmydeveloperday "[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] {\n"
480abbd54ceSKrasimir Georgiev " key: value\n"
481abbd54ceSKrasimir Georgiev "}");
482ece7e95fSmydeveloperday verifyFormat(
483ece7e95fSmydeveloperday "[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] {\n"
4844e290648SKrasimir Georgiev " [type.type] {\n"
4854e290648SKrasimir Georgiev " keyyyyyyyyyyyyyy: valuuuuuuuuuuuuuuuuuuuuuuuuue\n"
4864e290648SKrasimir Georgiev " }\n"
4874e290648SKrasimir Georgiev "}");
4884e290648SKrasimir Georgiev verifyFormat("[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/\n"
4894e290648SKrasimir Georgiev " bbbbbbb] {\n"
4904e290648SKrasimir Georgiev " [type.type] {\n"
4914e290648SKrasimir Georgiev " keyyyyyyyyyyyyyy: valuuuuuuuuuuuuuuuuuuuuuuuuue\n"
4924e290648SKrasimir Georgiev " }\n"
4934e290648SKrasimir Georgiev "}");
4949c5ac637SKrasimir Georgiev verifyFormat(
4959c5ac637SKrasimir Georgiev "aaaaaaaaaaaaaaa {\n"
4969c5ac637SKrasimir Georgiev " bbbbbb {\n"
4979c5ac637SKrasimir Georgiev " [a.b/cy] {\n"
4989c5ac637SKrasimir Georgiev " eeeeeeeeeeeee: \"The lazy coo cat jumps over the lazy hot dog\"\n"
4999c5ac637SKrasimir Georgiev " }\n"
5009c5ac637SKrasimir Georgiev " }\n"
5019c5ac637SKrasimir Georgiev "}");
5024e290648SKrasimir Georgiev }
50376064a4bSKrasimir Georgiev
TEST_F(FormatTestTextProto,SpacesAroundPercents)50444e2e9f1SKrasimir Georgiev TEST_F(FormatTestTextProto, SpacesAroundPercents) {
50576064a4bSKrasimir Georgiev verifyFormat("key: %d");
50644e2e9f1SKrasimir Georgiev verifyFormat("key: 0x%04x");
50744e2e9f1SKrasimir Georgiev verifyFormat("key: \"%d %d\"");
50876064a4bSKrasimir Georgiev }
509b79987a9SKrasimir Georgiev
TEST_F(FormatTestTextProto,FormatsRepeatedListInitializers)510b79987a9SKrasimir Georgiev TEST_F(FormatTestTextProto, FormatsRepeatedListInitializers) {
511b79987a9SKrasimir Georgiev verifyFormat("keys: []");
512b79987a9SKrasimir Georgiev verifyFormat("keys: [ 1 ]");
513b79987a9SKrasimir Georgiev verifyFormat("keys: [ 'ala', 'bala' ]");
51470a9e47fSKrasimir Georgiev verifyFormat("keys: [\n"
51570a9e47fSKrasimir Georgiev " 'ala',\n"
51670a9e47fSKrasimir Georgiev " 'bala',\n"
51770a9e47fSKrasimir Georgiev " 'porto',\n"
51870a9e47fSKrasimir Georgiev " 'kala',\n"
51970a9e47fSKrasimir Georgiev " 'too',\n"
52070a9e47fSKrasimir Georgiev " 'long',\n"
52170a9e47fSKrasimir Georgiev " 'ng'\n"
52270a9e47fSKrasimir Georgiev "]");
523b79987a9SKrasimir Georgiev verifyFormat("key: item\n"
524b79987a9SKrasimir Georgiev "keys: [\n"
525b79987a9SKrasimir Georgiev " 'ala',\n"
526b79987a9SKrasimir Georgiev " 'bala',\n"
527b79987a9SKrasimir Georgiev " 'porto',\n"
528b79987a9SKrasimir Georgiev " 'kala',\n"
529b79987a9SKrasimir Georgiev " 'too',\n"
530b79987a9SKrasimir Georgiev " 'long',\n"
531b79987a9SKrasimir Georgiev " 'long',\n"
532b79987a9SKrasimir Georgiev " 'long'\n"
533b79987a9SKrasimir Georgiev "]\n"
534b79987a9SKrasimir Georgiev "key: item\n"
535b79987a9SKrasimir Georgiev "msg {\n"
536b79987a9SKrasimir Georgiev " key: item\n"
537b79987a9SKrasimir Georgiev " keys: [\n"
538b79987a9SKrasimir Georgiev " 'ala',\n"
539b79987a9SKrasimir Georgiev " 'bala',\n"
540b79987a9SKrasimir Georgiev " 'porto',\n"
541b79987a9SKrasimir Georgiev " 'kala',\n"
542b79987a9SKrasimir Georgiev " 'too',\n"
543b79987a9SKrasimir Georgiev " 'long',\n"
544b79987a9SKrasimir Georgiev " 'long'\n"
545b79987a9SKrasimir Georgiev " ]\n"
546b79987a9SKrasimir Georgiev "}\n"
547ece7e95fSmydeveloperday "key: value");
548b79987a9SKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
549b79987a9SKrasimir Georgiev Style.ColumnLimit = 60; // To make writing tests easier.
550b79987a9SKrasimir Georgiev Style.Cpp11BracedListStyle = true;
551b79987a9SKrasimir Georgiev verifyFormat("keys: [1]", Style);
552b79987a9SKrasimir Georgiev }
5530aa4b4cbSKrasimir Georgiev
TEST_F(FormatTestTextProto,AcceptsOperatorAsKey)5540aa4b4cbSKrasimir Georgiev TEST_F(FormatTestTextProto, AcceptsOperatorAsKey) {
5550aa4b4cbSKrasimir Georgiev verifyFormat("aaaaaaaaaaa: <\n"
5560aa4b4cbSKrasimir Georgiev " bbbbbbbbb: <\n"
5570aa4b4cbSKrasimir Georgiev " ccccccccccccccccccccccc: <\n"
5580aa4b4cbSKrasimir Georgiev " operator: 1\n"
5590aa4b4cbSKrasimir Georgiev " operator: 2\n"
5608b4bc76aSKrasimir Georgiev " operator: 3\n"
5610aa4b4cbSKrasimir Georgiev " operator { key: value }\n"
5620aa4b4cbSKrasimir Georgiev " >\n"
5630aa4b4cbSKrasimir Georgiev " >\n"
5640aa4b4cbSKrasimir Georgiev ">");
5650aa4b4cbSKrasimir Georgiev }
5669ad7af64SKrasimir Georgiev
TEST_F(FormatTestTextProto,BreaksConsecutiveStringLiterals)5679ad7af64SKrasimir Georgiev TEST_F(FormatTestTextProto, BreaksConsecutiveStringLiterals) {
5689ad7af64SKrasimir Georgiev verifyFormat("ala: \"str1\"\n"
5699ad7af64SKrasimir Georgiev " \"str2\"\n");
5709ad7af64SKrasimir Georgiev }
5719ad7af64SKrasimir Georgiev
TEST_F(FormatTestTextProto,PutsMultipleEntriesInExtensionsOnNewlines)572abbd54ceSKrasimir Georgiev TEST_F(FormatTestTextProto, PutsMultipleEntriesInExtensionsOnNewlines) {
573abbd54ceSKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
574abbd54ceSKrasimir Georgiev verifyFormat("pppppppppp: {\n"
575abbd54ceSKrasimir Georgiev " ssssss: \"http://example.com/blahblahblah\"\n"
576abbd54ceSKrasimir Georgiev " ppppppp: \"sssss/MMMMMMMMMMMM\"\n"
577abbd54ceSKrasimir Georgiev " [ns.sssss.eeeeeeeee.eeeeeeeeeeeeeee] { begin: 24 end: 252 }\n"
578abbd54ceSKrasimir Georgiev " [ns.sssss.eeeeeeeee.eeeeeeeeeeeeeee] {\n"
579abbd54ceSKrasimir Georgiev " begin: 24\n"
580abbd54ceSKrasimir Georgiev " end: 252\n"
581abbd54ceSKrasimir Georgiev " key: value\n"
582abbd54ceSKrasimir Georgiev " key: value\n"
583abbd54ceSKrasimir Georgiev " }\n"
584ece7e95fSmydeveloperday "}",
585ece7e95fSmydeveloperday Style);
586abbd54ceSKrasimir Georgiev }
587abbd54ceSKrasimir Georgiev
TEST_F(FormatTestTextProto,BreaksAfterBraceFollowedByClosingBraceOnNextLine)5888b4bc76aSKrasimir Georgiev TEST_F(FormatTestTextProto, BreaksAfterBraceFollowedByClosingBraceOnNextLine) {
5898b4bc76aSKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
5908b4bc76aSKrasimir Georgiev Style.ColumnLimit = 60;
5918b4bc76aSKrasimir Georgiev verifyFormat("keys: [\n"
5928b4bc76aSKrasimir Georgiev " data: { item: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' }\n"
5938b4bc76aSKrasimir Georgiev "]");
5948b4bc76aSKrasimir Georgiev verifyFormat("keys: <\n"
5958b4bc76aSKrasimir Georgiev " data: { item: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' }\n"
5968b4bc76aSKrasimir Georgiev ">");
5978b4bc76aSKrasimir Georgiev }
5988b4bc76aSKrasimir Georgiev
TEST_F(FormatTestTextProto,BreaksEntriesOfSubmessagesContainingSubmessages)5998b98f551SKrasimir Georgiev TEST_F(FormatTestTextProto, BreaksEntriesOfSubmessagesContainingSubmessages) {
6008b98f551SKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_TextProto);
6018b98f551SKrasimir Georgiev Style.ColumnLimit = 60;
6028b98f551SKrasimir Georgiev // The column limit allows for the keys submessage to be put on 1 line, but we
6038b98f551SKrasimir Georgiev // break it since it contains a submessage an another entry.
6048b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6058b98f551SKrasimir Georgiev "keys: {\n"
6068b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6078b98f551SKrasimir Georgiev " sub <>\n"
6088b98f551SKrasimir Georgiev "}");
6098b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6108b98f551SKrasimir Georgiev "keys: {\n"
6118b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6128b98f551SKrasimir Georgiev " sub {}\n"
6138b98f551SKrasimir Georgiev "}");
6148b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6158b98f551SKrasimir Georgiev "keys: {\n"
6168b98f551SKrasimir Georgiev " sub {}\n"
6178b98f551SKrasimir Georgiev " sub: <>\n"
6188b98f551SKrasimir Georgiev " sub: []\n"
6198b98f551SKrasimir Georgiev "}");
6208b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6218b98f551SKrasimir Georgiev "keys: {\n"
6228b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaa'\n"
6238b98f551SKrasimir Georgiev " sub { msg: 1 }\n"
6248b98f551SKrasimir Georgiev "}");
6258b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6268b98f551SKrasimir Georgiev "keys: {\n"
6278b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaa'\n"
6288b98f551SKrasimir Georgiev " sub: { msg: 1 }\n"
6298b98f551SKrasimir Georgiev "}");
6308b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6318b98f551SKrasimir Georgiev "keys: {\n"
6328b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaa'\n"
6338b98f551SKrasimir Georgiev " sub < msg: 1 >\n"
6348b98f551SKrasimir Georgiev "}");
6358b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6368b98f551SKrasimir Georgiev "keys: {\n"
6378b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaa'\n"
6388b98f551SKrasimir Georgiev " sub: [ msg: 1 ]\n"
6398b98f551SKrasimir Georgiev "}");
6408b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6418b98f551SKrasimir Georgiev "keys: <\n"
6428b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaa'\n"
6438b98f551SKrasimir Georgiev " sub: [ 1, 2 ]\n"
6448b98f551SKrasimir Georgiev ">");
6458b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6468b98f551SKrasimir Georgiev "keys: {\n"
6478b98f551SKrasimir Georgiev " sub {}\n"
6488b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6498b98f551SKrasimir Georgiev "}");
6508b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6518b98f551SKrasimir Georgiev "keys: {\n"
6528b98f551SKrasimir Georgiev " sub: []\n"
6538b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6548b98f551SKrasimir Georgiev "}");
6558b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6568b98f551SKrasimir Georgiev "keys: {\n"
6578b98f551SKrasimir Georgiev " sub <>\n"
6588b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6598b98f551SKrasimir Georgiev "}");
6608b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6618b98f551SKrasimir Georgiev "keys: {\n"
6628b98f551SKrasimir Georgiev " sub { key: value }\n"
6638b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6648b98f551SKrasimir Georgiev "}");
6658b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6668b98f551SKrasimir Georgiev "keys: {\n"
6678b98f551SKrasimir Georgiev " sub: [ 1, 2 ]\n"
6688b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6698b98f551SKrasimir Georgiev "}");
6708b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6718b98f551SKrasimir Georgiev "keys: {\n"
6728b98f551SKrasimir Georgiev " sub < sub_2: {} >\n"
6738b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6748b98f551SKrasimir Georgiev "}");
6758b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6768b98f551SKrasimir Georgiev "keys: {\n"
6778b98f551SKrasimir Georgiev " item: data\n"
6788b98f551SKrasimir Georgiev " sub: [ 1, 2 ]\n"
6798b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6808b98f551SKrasimir Georgiev "}");
6818b98f551SKrasimir Georgiev verifyFormat("key: valueeeeeeee\n"
6828b98f551SKrasimir Georgiev "keys: {\n"
6838b98f551SKrasimir Georgiev " item: data\n"
6848b98f551SKrasimir Georgiev " sub < sub_2: {} >\n"
6858b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6868b98f551SKrasimir Georgiev "}");
6878b98f551SKrasimir Georgiev verifyFormat("sub: {\n"
6888b98f551SKrasimir Georgiev " key: valueeeeeeee\n"
6898b98f551SKrasimir Georgiev " keys: {\n"
6908b98f551SKrasimir Georgiev " sub: [ 1, 2 ]\n"
6918b98f551SKrasimir Georgiev " item: 'aaaaaaaaaaaaaaaa'\n"
6928b98f551SKrasimir Georgiev " }\n"
6938b98f551SKrasimir Georgiev "}");
6948b98f551SKrasimir Georgiev verifyFormat("sub: {\n"
6958b98f551SKrasimir Georgiev " key: 1\n"
6968b98f551SKrasimir Georgiev " sub: {}\n"
6978b98f551SKrasimir Georgiev "}\n"
6988b98f551SKrasimir Georgiev "# comment\n");
6998b98f551SKrasimir Georgiev verifyFormat("sub: {\n"
7008b98f551SKrasimir Georgiev " key: 1\n"
7018b98f551SKrasimir Georgiev " # comment\n"
7028b98f551SKrasimir Georgiev " sub: {}\n"
7038b98f551SKrasimir Georgiev "}");
7048b98f551SKrasimir Georgiev }
7058b98f551SKrasimir Georgiev
TEST_F(FormatTestTextProto,PreventBreaksBetweenKeyAndSubmessages)70670a9e47fSKrasimir Georgiev TEST_F(FormatTestTextProto, PreventBreaksBetweenKeyAndSubmessages) {
70770a9e47fSKrasimir Georgiev verifyFormat("submessage: {\n"
70870a9e47fSKrasimir Georgiev " key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
70970a9e47fSKrasimir Georgiev "}");
71070a9e47fSKrasimir Georgiev verifyFormat("submessage {\n"
71170a9e47fSKrasimir Georgiev " key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
71270a9e47fSKrasimir Georgiev "}");
71370a9e47fSKrasimir Georgiev verifyFormat("submessage: <\n"
71470a9e47fSKrasimir Georgiev " key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
71570a9e47fSKrasimir Georgiev ">");
71670a9e47fSKrasimir Georgiev verifyFormat("submessage <\n"
71770a9e47fSKrasimir Georgiev " key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
71870a9e47fSKrasimir Georgiev ">");
71970a9e47fSKrasimir Georgiev verifyFormat("repeatedd: [\n"
72070a9e47fSKrasimir Georgiev " 'eyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
72170a9e47fSKrasimir Georgiev "]");
72270a9e47fSKrasimir Georgiev // "{" is going over the column limit.
72370a9e47fSKrasimir Georgiev verifyFormat(
72470a9e47fSKrasimir Georgiev "submessageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee: {\n"
72570a9e47fSKrasimir Georgiev " key: 'aaaaa'\n"
72670a9e47fSKrasimir Georgiev "}");
72770a9e47fSKrasimir Georgiev }
72870a9e47fSKrasimir Georgiev
TEST_F(FormatTestTextProto,FormatsCommentsAtEndOfFile)7290895f5e8SKrasimir Georgiev TEST_F(FormatTestTextProto, FormatsCommentsAtEndOfFile) {
7300895f5e8SKrasimir Georgiev verifyFormat("key: value\n"
7310895f5e8SKrasimir Georgiev "# endfile comment");
7320895f5e8SKrasimir Georgiev verifyFormat("key: value\n"
7330895f5e8SKrasimir Georgiev "// endfile comment");
7340895f5e8SKrasimir Georgiev verifyFormat("key: value\n"
7350895f5e8SKrasimir Georgiev "// endfile comment 1\n"
7360895f5e8SKrasimir Georgiev "// endfile comment 2");
7370895f5e8SKrasimir Georgiev verifyFormat("submessage { key: value }\n"
7380895f5e8SKrasimir Georgiev "# endfile comment");
7390895f5e8SKrasimir Georgiev verifyFormat("submessage <\n"
7400895f5e8SKrasimir Georgiev " key: value\n"
7410895f5e8SKrasimir Georgiev " item {}\n"
7420895f5e8SKrasimir Georgiev ">\n"
7430895f5e8SKrasimir Georgiev "# endfile comment");
7440895f5e8SKrasimir Georgiev }
7450895f5e8SKrasimir Georgiev
TEST_F(FormatTestTextProto,KeepsAmpersandsNextToKeys)746da5cca4fSKrasimir Georgiev TEST_F(FormatTestTextProto, KeepsAmpersandsNextToKeys) {
747da5cca4fSKrasimir Georgiev verifyFormat("@tmpl { field: 1 }");
748da5cca4fSKrasimir Georgiev verifyFormat("@placeholder: 1");
749da5cca4fSKrasimir Georgiev verifyFormat("@name <>");
750da5cca4fSKrasimir Georgiev verifyFormat("submessage: @base { key: value }");
751da5cca4fSKrasimir Georgiev verifyFormat("submessage: @base {\n"
752da5cca4fSKrasimir Georgiev " key: value\n"
753da5cca4fSKrasimir Georgiev " item: {}\n"
754da5cca4fSKrasimir Georgiev "}");
755da5cca4fSKrasimir Georgiev verifyFormat("submessage: {\n"
756da5cca4fSKrasimir Georgiev " msg: @base {\n"
757da5cca4fSKrasimir Georgiev " yolo: {}\n"
758da5cca4fSKrasimir Georgiev " key: value\n"
759da5cca4fSKrasimir Georgiev " }\n"
760da5cca4fSKrasimir Georgiev " key: value\n"
761da5cca4fSKrasimir Georgiev "}");
762da5cca4fSKrasimir Georgiev }
763da5cca4fSKrasimir Georgiev
764ece7e95fSmydeveloperday } // namespace format
76526b144ccSKrasimir Georgiev } // end namespace clang
766