19ad83fe7SKrasimir Georgiev //===- unittest/Format/FormatTestRawStrings.cpp - Formatting unit tests ---===//
29ad83fe7SKrasimir 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
69ad83fe7SKrasimir Georgiev //
79ad83fe7SKrasimir Georgiev //===----------------------------------------------------------------------===//
89ad83fe7SKrasimir Georgiev
99ad83fe7SKrasimir Georgiev #include "clang/Format/Format.h"
109ad83fe7SKrasimir Georgiev
119ad83fe7SKrasimir Georgiev #include "../Tooling/ReplacementTest.h"
129ad83fe7SKrasimir Georgiev #include "FormatTestUtils.h"
139ad83fe7SKrasimir Georgiev
149ad83fe7SKrasimir Georgiev #include "llvm/Support/Debug.h"
159ad83fe7SKrasimir Georgiev #include "llvm/Support/MemoryBuffer.h"
169ad83fe7SKrasimir Georgiev #include "gtest/gtest.h"
179ad83fe7SKrasimir Georgiev
189ad83fe7SKrasimir Georgiev #define DEBUG_TYPE "format-test"
199ad83fe7SKrasimir Georgiev
209ad83fe7SKrasimir Georgiev namespace clang {
219ad83fe7SKrasimir Georgiev namespace format {
229ad83fe7SKrasimir Georgiev namespace {
239ad83fe7SKrasimir Georgiev
24*1c58208dSOwen Pan class FormatTestRawStrings : public testing::Test {
259ad83fe7SKrasimir Georgiev protected:
269ad83fe7SKrasimir Georgiev enum StatusCheck { SC_ExpectComplete, SC_ExpectIncomplete, SC_DoNotCheck };
279ad83fe7SKrasimir Georgiev
format(StringRef Code,const FormatStyle & Style=getLLVMStyle (),StatusCheck CheckComplete=SC_ExpectComplete)28*1c58208dSOwen Pan std::string format(StringRef Code, const FormatStyle &Style = getLLVMStyle(),
299ad83fe7SKrasimir Georgiev StatusCheck CheckComplete = SC_ExpectComplete) {
303538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << "---\n");
313538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << Code << "\n\n");
329ad83fe7SKrasimir Georgiev std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size()));
339ad83fe7SKrasimir Georgiev FormattingAttemptStatus Status;
349ad83fe7SKrasimir Georgiev tooling::Replacements Replaces =
359ad83fe7SKrasimir Georgiev reformat(Style, Code, Ranges, "<stdin>", &Status);
369ad83fe7SKrasimir Georgiev if (CheckComplete != SC_DoNotCheck) {
379ad83fe7SKrasimir Georgiev bool ExpectedCompleteFormat = CheckComplete == SC_ExpectComplete;
389ad83fe7SKrasimir Georgiev EXPECT_EQ(ExpectedCompleteFormat, Status.FormatComplete)
399ad83fe7SKrasimir Georgiev << Code << "\n\n";
409ad83fe7SKrasimir Georgiev }
419ad83fe7SKrasimir Georgiev ReplacementCount = Replaces.size();
429ad83fe7SKrasimir Georgiev auto Result = applyAllReplacements(Code, Replaces);
439ad83fe7SKrasimir Georgiev EXPECT_TRUE(static_cast<bool>(Result));
443538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
459ad83fe7SKrasimir Georgiev return *Result;
469ad83fe7SKrasimir Georgiev }
479ad83fe7SKrasimir Georgiev
getStyleWithColumns(FormatStyle Style,unsigned ColumnLimit)489ad83fe7SKrasimir Georgiev FormatStyle getStyleWithColumns(FormatStyle Style, unsigned ColumnLimit) {
499ad83fe7SKrasimir Georgiev Style.ColumnLimit = ColumnLimit;
509ad83fe7SKrasimir Georgiev return Style;
519ad83fe7SKrasimir Georgiev }
529ad83fe7SKrasimir Georgiev
getLLVMStyleWithColumns(unsigned ColumnLimit)539ad83fe7SKrasimir Georgiev FormatStyle getLLVMStyleWithColumns(unsigned ColumnLimit) {
549ad83fe7SKrasimir Georgiev return getStyleWithColumns(getLLVMStyle(), ColumnLimit);
559ad83fe7SKrasimir Georgiev }
569ad83fe7SKrasimir Georgiev
579ad83fe7SKrasimir Georgiev int ReplacementCount;
589ad83fe7SKrasimir Georgiev
getRawStringPbStyleWithColumns(unsigned ColumnLimit)599ad83fe7SKrasimir Georgiev FormatStyle getRawStringPbStyleWithColumns(unsigned ColumnLimit) {
609ad83fe7SKrasimir Georgiev FormatStyle Style = getLLVMStyle();
619ad83fe7SKrasimir Georgiev Style.ColumnLimit = ColumnLimit;
622537e220SKrasimir Georgiev Style.RawStringFormats = {
63412ed095SKrasimir Georgiev {
64412ed095SKrasimir Georgiev /*Language=*/FormatStyle::LK_TextProto,
654527f13aSKrasimir Georgiev /*Delimiters=*/{"pb"},
662537e220SKrasimir Georgiev /*EnclosingFunctions=*/{},
67412ed095SKrasimir Georgiev /*CanonicalDelimiter=*/"",
68412ed095SKrasimir Georgiev /*BasedOnStyle=*/"google",
69412ed095SKrasimir Georgiev },
702537e220SKrasimir Georgiev };
719ad83fe7SKrasimir Georgiev return Style;
729ad83fe7SKrasimir Georgiev }
739ad83fe7SKrasimir Georgiev
getRawStringLLVMCppStyleBasedOn(std::string BasedOnStyle)749ad83fe7SKrasimir Georgiev FormatStyle getRawStringLLVMCppStyleBasedOn(std::string BasedOnStyle) {
759ad83fe7SKrasimir Georgiev FormatStyle Style = getLLVMStyle();
762537e220SKrasimir Georgiev Style.RawStringFormats = {
77412ed095SKrasimir Georgiev {
78412ed095SKrasimir Georgiev /*Language=*/FormatStyle::LK_Cpp,
792537e220SKrasimir Georgiev /*Delimiters=*/{"cpp"},
80412ed095SKrasimir Georgiev /*EnclosingFunctions=*/{},
81412ed095SKrasimir Georgiev /*CanonicalDelimiter=*/"",
82412ed095SKrasimir Georgiev BasedOnStyle,
83412ed095SKrasimir Georgiev },
842537e220SKrasimir Georgiev };
859ad83fe7SKrasimir Georgiev return Style;
869ad83fe7SKrasimir Georgiev }
879ad83fe7SKrasimir Georgiev
getRawStringGoogleCppStyleBasedOn(std::string BasedOnStyle)889ad83fe7SKrasimir Georgiev FormatStyle getRawStringGoogleCppStyleBasedOn(std::string BasedOnStyle) {
899ad83fe7SKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_Cpp);
902537e220SKrasimir Georgiev Style.RawStringFormats = {
91412ed095SKrasimir Georgiev {
92412ed095SKrasimir Georgiev /*Language=*/FormatStyle::LK_Cpp,
932537e220SKrasimir Georgiev /*Delimiters=*/{"cpp"},
94412ed095SKrasimir Georgiev /*EnclosingFunctions=*/{},
95412ed095SKrasimir Georgiev /*CanonicalDelimiter=*/"",
96412ed095SKrasimir Georgiev BasedOnStyle,
97412ed095SKrasimir Georgiev },
982537e220SKrasimir Georgiev };
999ad83fe7SKrasimir Georgiev return Style;
1009ad83fe7SKrasimir Georgiev }
1019ad83fe7SKrasimir Georgiev
1029ad83fe7SKrasimir Georgiev // Gcc 4.8 doesn't support raw string literals in macros, which breaks some
1039ad83fe7SKrasimir Georgiev // build bots. We use this function instead.
expect_eq(const std::string Expected,const std::string Actual)1049ad83fe7SKrasimir Georgiev void expect_eq(const std::string Expected, const std::string Actual) {
1059ad83fe7SKrasimir Georgiev EXPECT_EQ(Expected, Actual);
1069ad83fe7SKrasimir Georgiev }
1079ad83fe7SKrasimir Georgiev };
1089ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,ReformatsAccordingToBaseStyle)1099ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, ReformatsAccordingToBaseStyle) {
1109ad83fe7SKrasimir Georgiev // llvm style puts '*' on the right.
1119ad83fe7SKrasimir Georgiev // google style puts '*' on the left.
1129ad83fe7SKrasimir Georgiev
1139ad83fe7SKrasimir Georgiev // Use the llvm style if the raw string style has no BasedOnStyle.
1149ad83fe7SKrasimir Georgiev expect_eq(R"test(int *i = R"cpp(int *p = nullptr;)cpp")test",
1159ad83fe7SKrasimir Georgiev format(R"test(int * i = R"cpp(int * p = nullptr;)cpp")test",
1169ad83fe7SKrasimir Georgiev getRawStringLLVMCppStyleBasedOn("")));
1179ad83fe7SKrasimir Georgiev
1189ad83fe7SKrasimir Georgiev // Use the google style if the raw string style has BasedOnStyle=google.
1199ad83fe7SKrasimir Georgiev expect_eq(R"test(int *i = R"cpp(int* p = nullptr;)cpp")test",
1209ad83fe7SKrasimir Georgiev format(R"test(int * i = R"cpp(int * p = nullptr;)cpp")test",
1219ad83fe7SKrasimir Georgiev getRawStringLLVMCppStyleBasedOn("google")));
1229ad83fe7SKrasimir Georgiev
1239ad83fe7SKrasimir Georgiev // Use the llvm style if the raw string style has no BasedOnStyle=llvm.
1249ad83fe7SKrasimir Georgiev expect_eq(R"test(int* i = R"cpp(int *p = nullptr;)cpp")test",
1259ad83fe7SKrasimir Georgiev format(R"test(int * i = R"cpp(int * p = nullptr;)cpp")test",
1269ad83fe7SKrasimir Georgiev getRawStringGoogleCppStyleBasedOn("llvm")));
1279ad83fe7SKrasimir Georgiev }
1289ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,UsesConfigurationOverBaseStyle)1294527f13aSKrasimir Georgiev TEST_F(FormatTestRawStrings, UsesConfigurationOverBaseStyle) {
1304527f13aSKrasimir Georgiev // llvm style puts '*' on the right.
1314527f13aSKrasimir Georgiev // google style puts '*' on the left.
1324527f13aSKrasimir Georgiev
1334527f13aSKrasimir Georgiev // Uses the configured google style inside raw strings even if BasedOnStyle in
1344527f13aSKrasimir Georgiev // the raw string format is llvm.
1354527f13aSKrasimir Georgiev FormatStyle Style = getGoogleStyle(FormatStyle::LK_Cpp);
1364527f13aSKrasimir Georgiev EXPECT_EQ(0, parseConfiguration("---\n"
1374527f13aSKrasimir Georgiev "Language: Cpp\n"
138ece7e95fSmydeveloperday "BasedOnStyle: Google",
139ece7e95fSmydeveloperday &Style)
140ece7e95fSmydeveloperday .value());
141412ed095SKrasimir Georgiev Style.RawStringFormats = {{
142412ed095SKrasimir Georgiev FormatStyle::LK_Cpp,
143412ed095SKrasimir Georgiev {"cpp"},
144412ed095SKrasimir Georgiev {},
145412ed095SKrasimir Georgiev /*CanonicalDelimiter=*/"",
146412ed095SKrasimir Georgiev /*BasedOnStyle=*/"llvm",
147412ed095SKrasimir Georgiev }};
1484527f13aSKrasimir Georgiev expect_eq(R"test(int* i = R"cpp(int* j = 0;)cpp";)test",
1494527f13aSKrasimir Georgiev format(R"test(int * i = R"cpp(int * j = 0;)cpp";)test", Style));
1504527f13aSKrasimir Georgiev }
1514527f13aSKrasimir Georgiev
TEST_F(FormatTestRawStrings,MatchesDelimitersCaseSensitively)1529ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, MatchesDelimitersCaseSensitively) {
1539ad83fe7SKrasimir Georgiev // Don't touch the 'PB' raw string, format the 'pb' raw string.
1549ad83fe7SKrasimir Georgiev expect_eq(R"test(
1559ad83fe7SKrasimir Georgiev s = R"PB(item:1)PB";
1569ad83fe7SKrasimir Georgiev t = R"pb(item: 1)pb";)test",
1579ad83fe7SKrasimir Georgiev format(R"test(
1589ad83fe7SKrasimir Georgiev s = R"PB(item:1)PB";
1599ad83fe7SKrasimir Georgiev t = R"pb(item:1)pb";)test",
1609ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
1619ad83fe7SKrasimir Georgiev }
1629ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,RespectsClangFormatOff)163dd0c4e1dSDaniel Jasper TEST_F(FormatTestRawStrings, RespectsClangFormatOff) {
164dd0c4e1dSDaniel Jasper expect_eq(R"test(
165dd0c4e1dSDaniel Jasper // clang-format off
166dd0c4e1dSDaniel Jasper s = R"pb(item: 1)pb";
167dd0c4e1dSDaniel Jasper // clang-format on
168dd0c4e1dSDaniel Jasper t = R"pb(item: 1)pb";)test",
169dd0c4e1dSDaniel Jasper format(R"test(
170dd0c4e1dSDaniel Jasper // clang-format off
171dd0c4e1dSDaniel Jasper s = R"pb(item: 1)pb";
172dd0c4e1dSDaniel Jasper // clang-format on
173dd0c4e1dSDaniel Jasper t = R"pb(item: 1)pb";)test",
174dd0c4e1dSDaniel Jasper getRawStringPbStyleWithColumns(40)));
175dd0c4e1dSDaniel Jasper }
176dd0c4e1dSDaniel Jasper
TEST_F(FormatTestRawStrings,ReformatsShortRawStringsOnSingleLine)1779ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, ReformatsShortRawStringsOnSingleLine) {
178ece7e95fSmydeveloperday expect_eq(R"test(P p = TP(R"pb()pb");)test",
179ece7e95fSmydeveloperday format(R"test(P p = TP(R"pb( )pb");)test",
1809ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
181ece7e95fSmydeveloperday expect_eq(R"test(P p = TP(R"pb(item_1: 1)pb");)test",
182ece7e95fSmydeveloperday format(R"test(P p = TP(R"pb(item_1:1)pb");)test",
1839ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
184ece7e95fSmydeveloperday expect_eq(R"test(P p = TP(R"pb(item_1: 1)pb");)test",
185ece7e95fSmydeveloperday format(R"test(P p = TP(R"pb( item_1 : 1 )pb");)test",
1869ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
187ece7e95fSmydeveloperday expect_eq(R"test(P p = TP(R"pb(item_1: 1 item_2: 2)pb");)test",
188ece7e95fSmydeveloperday format(R"test(P p = TP(R"pb(item_1:1 item_2:2)pb");)test",
1899ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
1909ad83fe7SKrasimir Georgiev // Merge two short lines into one.
1919ad83fe7SKrasimir Georgiev expect_eq(R"test(
1929ad83fe7SKrasimir Georgiev std::string s = R"pb(
1939ad83fe7SKrasimir Georgiev item_1: 1 item_2: 2
1949ad83fe7SKrasimir Georgiev )pb";
1959ad83fe7SKrasimir Georgiev )test",
1969ad83fe7SKrasimir Georgiev format(R"test(
1979ad83fe7SKrasimir Georgiev std::string s = R"pb(
1989ad83fe7SKrasimir Georgiev item_1:1
1999ad83fe7SKrasimir Georgiev item_2:2
2009ad83fe7SKrasimir Georgiev )pb";
2019ad83fe7SKrasimir Georgiev )test",
2029ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2039ad83fe7SKrasimir Georgiev }
2049ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,BreaksShortRawStringsWhenNeeded)2058b98f551SKrasimir Georgiev TEST_F(FormatTestRawStrings, BreaksShortRawStringsWhenNeeded) {
2068b98f551SKrasimir Georgiev // The raw string contains multiple submessage entries, so break for
2078b98f551SKrasimir Georgiev // readability.
2088b98f551SKrasimir Georgiev expect_eq(R"test(
2098b98f551SKrasimir Georgiev P p = TP(R"pb(item_1 < 1 >
2108b98f551SKrasimir Georgiev item_2: { 2 })pb");)test",
2118b98f551SKrasimir Georgiev format(
2128b98f551SKrasimir Georgiev R"test(
2138b98f551SKrasimir Georgiev P p = TP(R"pb(item_1<1> item_2:{2})pb");)test",
2148b98f551SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2158b98f551SKrasimir Georgiev }
2168b98f551SKrasimir Georgiev
TEST_F(FormatTestRawStrings,BreaksRawStringsExceedingColumnLimit)2179ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, BreaksRawStringsExceedingColumnLimit) {
2189ad83fe7SKrasimir Georgiev expect_eq(R"test(
2199ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPP(
2209ad83fe7SKrasimir Georgiev R"pb(item_1: 1, item_2: 2)pb");)test",
2219ad83fe7SKrasimir Georgiev format(R"test(
2229ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPP(R"pb(item_1: 1, item_2: 2)pb");)test",
2239ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2249ad83fe7SKrasimir Georgiev
2259ad83fe7SKrasimir Georgiev expect_eq(R"test(
2269ad83fe7SKrasimir Georgiev P p =
2279ad83fe7SKrasimir Georgiev TPPPPPPPPPPPPPPP(
2289ad83fe7SKrasimir Georgiev R"pb(item_1: 1,
2299ad83fe7SKrasimir Georgiev item_2: 2,
2309ad83fe7SKrasimir Georgiev item_3: 3)pb");)test",
2319ad83fe7SKrasimir Georgiev format(R"test(
2329ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPP(R"pb(item_1: 1, item_2: 2, item_3: 3)pb");)test",
2339ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2349ad83fe7SKrasimir Georgiev
2359ad83fe7SKrasimir Georgiev expect_eq(R"test(
2369ad83fe7SKrasimir Georgiev P p = TP(R"pb(item_1 < 1 >
2379ad83fe7SKrasimir Georgiev item_2: < 2 >
2389ad83fe7SKrasimir Georgiev item_3 {})pb");)test",
2399ad83fe7SKrasimir Georgiev format(R"test(
2409ad83fe7SKrasimir Georgiev P p = TP(R"pb(item_1<1> item_2:<2> item_3{ })pb");)test",
2419ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2429ad83fe7SKrasimir Georgiev
2439ad83fe7SKrasimir Georgiev expect_eq(
2449ad83fe7SKrasimir Georgiev R"test(
2459ad83fe7SKrasimir Georgiev P p = TP(R"pb(item_1: 1,
2469ad83fe7SKrasimir Georgiev item_2: 2,
2479ad83fe7SKrasimir Georgiev item_3: 3,
2489ad83fe7SKrasimir Georgiev item_4: 4)pb");)test",
2499ad83fe7SKrasimir Georgiev format(
2509ad83fe7SKrasimir Georgiev R"test(
2519ad83fe7SKrasimir Georgiev P p = TP(R"pb(item_1: 1, item_2: 2, item_3: 3, item_4: 4)pb");)test",
2529ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2539ad83fe7SKrasimir Georgiev
2549ad83fe7SKrasimir Georgiev expect_eq(R"test(
2559ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPP(
2569ad83fe7SKrasimir Georgiev R"pb(item_1 < 1 >,
2579ad83fe7SKrasimir Georgiev item_2: { 2 },
2589ad83fe7SKrasimir Georgiev item_3: < 3 >,
2599ad83fe7SKrasimir Georgiev item_4: { 4 })pb");)test",
2609ad83fe7SKrasimir Georgiev format(R"test(
2619ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPP(R"pb(item_1<1>, item_2: {2}, item_3: <3>, item_4:{4})pb");)test",
2629ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
2639ad83fe7SKrasimir Georgiev
2649ad83fe7SKrasimir Georgiev // Breaks before a short raw string exceeding the column limit.
2659ad83fe7SKrasimir Georgiev expect_eq(R"test(
2669ad83fe7SKrasimir Georgiev FFFFFFFFFFFFFFFFFFFFFFFFFFF(
2679ad83fe7SKrasimir Georgiev R"pb(key: 1)pb");
2689ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(
2699ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");
2709ad83fe7SKrasimir Georgiev auto TPPPPPPPPPPPPPPPPPPPP =
2719ad83fe7SKrasimir Georgiev R"pb(key: 3)pb";
2729ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(
2739ad83fe7SKrasimir Georgiev R"pb(i: 1, j: 2)pb");
2749ad83fe7SKrasimir Georgiev
2759ad83fe7SKrasimir Georgiev int f(string s) {
2769ad83fe7SKrasimir Georgiev FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF(
2779ad83fe7SKrasimir Georgiev R"pb(key: 1)pb");
2789ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(
2799ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");
2809ad83fe7SKrasimir Georgiev auto TPPPPPPPPPPPPPPPPPPPP =
2819ad83fe7SKrasimir Georgiev R"pb(key: 3)pb";
2829ad83fe7SKrasimir Georgiev if (s.empty())
2839ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(
2849ad83fe7SKrasimir Georgiev R"pb(i: 1, j: 2)pb");
2859ad83fe7SKrasimir Georgiev }
2869ad83fe7SKrasimir Georgiev )test",
2879ad83fe7SKrasimir Georgiev format(R"test(
2889ad83fe7SKrasimir Georgiev FFFFFFFFFFFFFFFFFFFFFFFFFFF(R"pb(key:1)pb");
2899ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(R"pb(key:2)pb");
2909ad83fe7SKrasimir Georgiev auto TPPPPPPPPPPPPPPPPPPPP = R"pb(key:3)pb";
2919ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(R"pb(i: 1, j:2)pb");
2929ad83fe7SKrasimir Georgiev
2939ad83fe7SKrasimir Georgiev int f(string s) {
2949ad83fe7SKrasimir Georgiev FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF(R"pb(key:1)pb");
2959ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(R"pb(key:2)pb");
2969ad83fe7SKrasimir Georgiev auto TPPPPPPPPPPPPPPPPPPPP = R"pb(key:3)pb";
2979ad83fe7SKrasimir Georgiev if (s.empty())
2989ad83fe7SKrasimir Georgiev P p = TPPPPPPPPPPPPPPPPPPPP(R"pb(i: 1, j:2)pb");
2999ad83fe7SKrasimir Georgiev }
3009ad83fe7SKrasimir Georgiev )test",
3019ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3029ad83fe7SKrasimir Georgiev }
3039ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,FormatsRawStringArguments)3049ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, FormatsRawStringArguments) {
3059ad83fe7SKrasimir Georgiev expect_eq(R"test(
3069ad83fe7SKrasimir Georgiev P p = TP(R"pb(key { 1 })pb", param_2);)test",
3079ad83fe7SKrasimir Georgiev format(R"test(
3089ad83fe7SKrasimir Georgiev P p = TP(R"pb(key{1})pb",param_2);)test",
3099ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3109ad83fe7SKrasimir Georgiev
3119ad83fe7SKrasimir Georgiev expect_eq(R"test(
3129ad83fe7SKrasimir Georgiev PPPPPPPPPPPPP(R"pb(keykeyk)pb",
3139ad83fe7SKrasimir Georgiev param_2);)test",
3149ad83fe7SKrasimir Georgiev format(R"test(
3159ad83fe7SKrasimir Georgiev PPPPPPPPPPPPP(R"pb(keykeyk)pb", param_2);)test",
3169ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3179ad83fe7SKrasimir Georgiev
3189ad83fe7SKrasimir Georgiev expect_eq(R"test(
319c2091808SKrasimir Georgiev P p = TP(
320c2091808SKrasimir Georgiev R"pb(item: { i: 1, s: 's' }
3219ad83fe7SKrasimir Georgiev item: { i: 2, s: 't' })pb");)test",
3229ad83fe7SKrasimir Georgiev format(R"test(
3239ad83fe7SKrasimir Georgiev P p = TP(R"pb(item: {i: 1, s: 's'} item: {i: 2, s: 't'})pb");)test",
3249ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3259ad83fe7SKrasimir Georgiev expect_eq(R"test(
3269ad83fe7SKrasimir Georgiev FFFFFFFFFFFFFFFFFFF(
3279ad83fe7SKrasimir Georgiev R"pb(key: "value")pb",
3289ad83fe7SKrasimir Georgiev R"pb(key2: "value")pb");)test",
3299ad83fe7SKrasimir Georgiev format(R"test(
3309ad83fe7SKrasimir Georgiev FFFFFFFFFFFFFFFFFFF(R"pb(key: "value")pb", R"pb(key2: "value")pb");)test",
3319ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3329ad83fe7SKrasimir Georgiev
3339ad83fe7SKrasimir Georgiev // Formats the first out of two arguments.
3349ad83fe7SKrasimir Georgiev expect_eq(R"test(
3359ad83fe7SKrasimir Georgiev FFFFFFFF(R"pb(key: 1)pb", argument2);
3369ad83fe7SKrasimir Georgiev struct S {
3379ad83fe7SKrasimir Georgiev const s =
3389ad83fe7SKrasimir Georgiev f(R"pb(key: 1)pb", argument2);
3399ad83fe7SKrasimir Georgiev void f() {
3409ad83fe7SKrasimir Georgiev if (gol)
3419ad83fe7SKrasimir Georgiev return g(R"pb(key: 1)pb",
3429ad83fe7SKrasimir Georgiev 132789237);
3439ad83fe7SKrasimir Georgiev return g(R"pb(key: 1)pb", "172893");
3449ad83fe7SKrasimir Georgiev }
3459ad83fe7SKrasimir Georgiev };)test",
3469ad83fe7SKrasimir Georgiev format(R"test(
3479ad83fe7SKrasimir Georgiev FFFFFFFF(R"pb(key:1)pb", argument2);
3489ad83fe7SKrasimir Georgiev struct S {
3499ad83fe7SKrasimir Georgiev const s = f(R"pb(key:1)pb", argument2);
3509ad83fe7SKrasimir Georgiev void f() {
3519ad83fe7SKrasimir Georgiev if (gol)
3529ad83fe7SKrasimir Georgiev return g(R"pb(key:1)pb", 132789237);
3539ad83fe7SKrasimir Georgiev return g(R"pb(key:1)pb", "172893");
3549ad83fe7SKrasimir Georgiev }
3559ad83fe7SKrasimir Georgiev };)test",
3569ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3579ad83fe7SKrasimir Georgiev
3589ad83fe7SKrasimir Georgiev // Formats the second out of two arguments.
3599ad83fe7SKrasimir Georgiev expect_eq(R"test(
3609ad83fe7SKrasimir Georgiev FFFFFFFF(argument1, R"pb(key: 2)pb");
3619ad83fe7SKrasimir Georgiev struct S {
3629ad83fe7SKrasimir Georgiev const s =
3639ad83fe7SKrasimir Georgiev f(argument1, R"pb(key: 2)pb");
3649ad83fe7SKrasimir Georgiev void f() {
3659ad83fe7SKrasimir Georgiev if (gol)
3669ad83fe7SKrasimir Georgiev return g(12784137,
3679ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");
3689ad83fe7SKrasimir Georgiev return g(17283122, R"pb(key: 2)pb");
3699ad83fe7SKrasimir Georgiev }
3709ad83fe7SKrasimir Georgiev };)test",
3719ad83fe7SKrasimir Georgiev format(R"test(
3729ad83fe7SKrasimir Georgiev FFFFFFFF(argument1, R"pb(key:2)pb");
3739ad83fe7SKrasimir Georgiev struct S {
3749ad83fe7SKrasimir Georgiev const s = f(argument1, R"pb(key:2)pb");
3759ad83fe7SKrasimir Georgiev void f() {
3769ad83fe7SKrasimir Georgiev if (gol)
3779ad83fe7SKrasimir Georgiev return g(12784137, R"pb(key:2)pb");
3789ad83fe7SKrasimir Georgiev return g(17283122, R"pb(key:2)pb");
3799ad83fe7SKrasimir Georgiev }
3809ad83fe7SKrasimir Georgiev };)test",
3819ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3829ad83fe7SKrasimir Georgiev
3839ad83fe7SKrasimir Georgiev // Formats two short raw string arguments.
3849ad83fe7SKrasimir Georgiev expect_eq(R"test(
3859ad83fe7SKrasimir Georgiev FFFFF(R"pb(key: 1)pb", R"pb(key: 2)pb");)test",
3869ad83fe7SKrasimir Georgiev format(R"test(
3879ad83fe7SKrasimir Georgiev FFFFF(R"pb(key:1)pb", R"pb(key:2)pb");)test",
3889ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
3899ad83fe7SKrasimir Georgiev // TODO(krasimir): The original source code fits on one line, so the
3909ad83fe7SKrasimir Georgiev // non-optimizing formatter is chosen. But after the formatting in protos is
3919ad83fe7SKrasimir Georgiev // made, the code doesn't fit on one line anymore and further formatting
3929ad83fe7SKrasimir Georgiev // splits it.
3939ad83fe7SKrasimir Georgiev //
3949ad83fe7SKrasimir Georgiev // Should we disable raw string formatting for the non-optimizing formatter?
3959ad83fe7SKrasimir Georgiev expect_eq(R"test(
3969ad83fe7SKrasimir Georgiev FFFFFFF(R"pb(key: 1)pb", R"pb(key: 2)pb");)test",
3979ad83fe7SKrasimir Georgiev format(R"test(
3989ad83fe7SKrasimir Georgiev FFFFFFF(R"pb(key:1)pb", R"pb(key:2)pb");)test",
3999ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4009ad83fe7SKrasimir Georgiev
4019ad83fe7SKrasimir Georgiev // Formats two short raw string arguments, puts second on newline.
4029ad83fe7SKrasimir Georgiev expect_eq(R"test(
4039ad83fe7SKrasimir Georgiev FFFFFFFF(R"pb(key: 1)pb",
4049ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");)test",
4059ad83fe7SKrasimir Georgiev format(R"test(
4069ad83fe7SKrasimir Georgiev FFFFFFFF(R"pb(key:1)pb", R"pb(key:2)pb");)test",
4079ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4089ad83fe7SKrasimir Georgiev
4099ad83fe7SKrasimir Georgiev // Formats both arguments.
4109ad83fe7SKrasimir Georgiev expect_eq(R"test(
4119ad83fe7SKrasimir Georgiev FFFFFFFF(R"pb(key: 1)pb",
4129ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");
4139ad83fe7SKrasimir Georgiev struct S {
4149ad83fe7SKrasimir Georgiev const s = f(R"pb(key: 1)pb",
4159ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");
4169ad83fe7SKrasimir Georgiev void f() {
4179ad83fe7SKrasimir Georgiev if (gol)
4189ad83fe7SKrasimir Georgiev return g(R"pb(key: 1)pb",
4199ad83fe7SKrasimir Georgiev R"pb(key: 2)pb");
4209ad83fe7SKrasimir Georgiev return g(R"pb(k1)pb", R"pb(k2)pb");
4219ad83fe7SKrasimir Georgiev }
4229ad83fe7SKrasimir Georgiev };)test",
4239ad83fe7SKrasimir Georgiev format(R"test(
4249ad83fe7SKrasimir Georgiev FFFFFFFF(R"pb(key:1)pb", R"pb(key:2)pb");
4259ad83fe7SKrasimir Georgiev struct S {
4269ad83fe7SKrasimir Georgiev const s = f(R"pb(key:1)pb", R"pb(key:2)pb");
4279ad83fe7SKrasimir Georgiev void f() {
4289ad83fe7SKrasimir Georgiev if (gol)
4299ad83fe7SKrasimir Georgiev return g(R"pb(key:1)pb", R"pb(key:2)pb");
4309ad83fe7SKrasimir Georgiev return g(R"pb( k1 )pb", R"pb( k2 )pb");
4319ad83fe7SKrasimir Georgiev }
4329ad83fe7SKrasimir Georgiev };)test",
4339ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4349ad83fe7SKrasimir Georgiev }
4359ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,RawStringStartingWithNewlines)4369ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, RawStringStartingWithNewlines) {
4379ad83fe7SKrasimir Georgiev expect_eq(R"test(
4389ad83fe7SKrasimir Georgiev std::string s = R"pb(
4399ad83fe7SKrasimir Georgiev item_1: 1
4409ad83fe7SKrasimir Georgiev )pb";
4419ad83fe7SKrasimir Georgiev )test",
4429ad83fe7SKrasimir Georgiev format(R"test(
4439ad83fe7SKrasimir Georgiev std::string s = R"pb(
4449ad83fe7SKrasimir Georgiev item_1:1
4459ad83fe7SKrasimir Georgiev )pb";
4469ad83fe7SKrasimir Georgiev )test",
4479ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4489ad83fe7SKrasimir Georgiev
4499ad83fe7SKrasimir Georgiev expect_eq(R"test(
4509ad83fe7SKrasimir Georgiev std::string s = R"pb(
4519ad83fe7SKrasimir Georgiev
4529ad83fe7SKrasimir Georgiev item_1: 1
4539ad83fe7SKrasimir Georgiev )pb";
4549ad83fe7SKrasimir Georgiev )test",
4559ad83fe7SKrasimir Georgiev format(R"test(
4569ad83fe7SKrasimir Georgiev std::string s = R"pb(
4579ad83fe7SKrasimir Georgiev
4589ad83fe7SKrasimir Georgiev item_1:1
4599ad83fe7SKrasimir Georgiev )pb";
4609ad83fe7SKrasimir Georgiev )test",
4619ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4629ad83fe7SKrasimir Georgiev
4639ad83fe7SKrasimir Georgiev expect_eq(R"test(
4649ad83fe7SKrasimir Georgiev std::string s = R"pb(
4659ad83fe7SKrasimir Georgiev item_1: 1
4669ad83fe7SKrasimir Georgiev )pb";
4679ad83fe7SKrasimir Georgiev )test",
4689ad83fe7SKrasimir Georgiev format(R"test(
4699ad83fe7SKrasimir Georgiev std::string s = R"pb(
4709ad83fe7SKrasimir Georgiev item_1:1
4719ad83fe7SKrasimir Georgiev
4729ad83fe7SKrasimir Georgiev )pb";
4739ad83fe7SKrasimir Georgiev )test",
4749ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4759ad83fe7SKrasimir Georgiev
4769ad83fe7SKrasimir Georgiev expect_eq(R"test(
4779ad83fe7SKrasimir Georgiev std::string s = R"pb(
4789ad83fe7SKrasimir Georgiev item_1: 1,
4799ad83fe7SKrasimir Georgiev item_2: 2
4809ad83fe7SKrasimir Georgiev )pb";
4819ad83fe7SKrasimir Georgiev )test",
4829ad83fe7SKrasimir Georgiev format(R"test(
4839ad83fe7SKrasimir Georgiev std::string s = R"pb(
4849ad83fe7SKrasimir Georgiev item_1:1, item_2:2
4859ad83fe7SKrasimir Georgiev )pb";
4869ad83fe7SKrasimir Georgiev )test",
4879ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
4889ad83fe7SKrasimir Georgiev
4899ad83fe7SKrasimir Georgiev expect_eq(R"test(
4909ad83fe7SKrasimir Georgiev std::string s = R"pb(
4919ad83fe7SKrasimir Georgiev book {
4929ad83fe7SKrasimir Georgiev title: "Alice's Adventures"
4939ad83fe7SKrasimir Georgiev author: "Lewis Caroll"
4949ad83fe7SKrasimir Georgiev }
4959ad83fe7SKrasimir Georgiev book {
4969ad83fe7SKrasimir Georgiev title: "Peter Pan"
4979ad83fe7SKrasimir Georgiev author: "J. M. Barrie"
4989ad83fe7SKrasimir Georgiev }
4999ad83fe7SKrasimir Georgiev )pb";
5009ad83fe7SKrasimir Georgiev )test",
5019ad83fe7SKrasimir Georgiev format(R"test(
5029ad83fe7SKrasimir Georgiev std::string s = R"pb(
5039ad83fe7SKrasimir Georgiev book { title: "Alice's Adventures" author: "Lewis Caroll" }
5049ad83fe7SKrasimir Georgiev book { title: "Peter Pan" author: "J. M. Barrie" }
5059ad83fe7SKrasimir Georgiev )pb";
5069ad83fe7SKrasimir Georgiev )test",
5079ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5089ad83fe7SKrasimir Georgiev }
5099ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,BreaksBeforeRawStrings)5109ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, BreaksBeforeRawStrings) {
5119ad83fe7SKrasimir Georgiev expect_eq(R"test(
5129ad83fe7SKrasimir Georgiev ASSERT_TRUE(
5139ad83fe7SKrasimir Georgiev ParseFromString(R"pb(item_1: 1)pb"),
5149ad83fe7SKrasimir Georgiev ptr);)test",
5159ad83fe7SKrasimir Georgiev format(R"test(
5169ad83fe7SKrasimir Georgiev ASSERT_TRUE(ParseFromString(R"pb(item_1: 1)pb"), ptr);)test",
5179ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5189ad83fe7SKrasimir Georgiev
5199ad83fe7SKrasimir Georgiev expect_eq(R"test(
5209ad83fe7SKrasimir Georgiev ASSERT_TRUE(toolong::ParseFromString(
5219ad83fe7SKrasimir Georgiev R"pb(item_1: 1)pb"),
5229ad83fe7SKrasimir Georgiev ptr);)test",
5239ad83fe7SKrasimir Georgiev format(R"test(
5249ad83fe7SKrasimir Georgiev ASSERT_TRUE(toolong::ParseFromString(R"pb(item_1: 1)pb"), ptr);)test",
5259ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5269ad83fe7SKrasimir Georgiev
5279ad83fe7SKrasimir Georgiev expect_eq(R"test(
5289ad83fe7SKrasimir Georgiev ASSERT_TRUE(ParseFromString(
5299ad83fe7SKrasimir Georgiev R"pb(item_1: 1,
5309ad83fe7SKrasimir Georgiev item_2: 2)pb"),
5319ad83fe7SKrasimir Georgiev ptr);)test",
5329ad83fe7SKrasimir Georgiev format(R"test(
5339ad83fe7SKrasimir Georgiev ASSERT_TRUE(ParseFromString(R"pb(item_1: 1, item_2: 2)pb"), ptr);)test",
5349ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5359ad83fe7SKrasimir Georgiev
5369ad83fe7SKrasimir Georgiev expect_eq(R"test(
5379ad83fe7SKrasimir Georgiev ASSERT_TRUE(
5389ad83fe7SKrasimir Georgiev ParseFromString(
5399ad83fe7SKrasimir Georgiev R"pb(item_1: 1 item_2: 2)pb"),
5409ad83fe7SKrasimir Georgiev ptr);)test",
5419ad83fe7SKrasimir Georgiev format(R"test(
5429ad83fe7SKrasimir Georgiev ASSERT_TRUE(ParseFromString(R"pb(item_1: 1 item_2: 2)pb"), ptr);)test",
5439ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5449ad83fe7SKrasimir Georgiev }
5459ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,RawStringsInOperands)5469ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, RawStringsInOperands) {
5479ad83fe7SKrasimir Georgiev // Formats the raw string first operand of a binary operator expression.
5489ad83fe7SKrasimir Georgiev expect_eq(R"test(auto S = R"pb(item_1: 1)pb" + rest;)test",
5499ad83fe7SKrasimir Georgiev format(R"test(auto S = R"pb(item_1:1)pb" + rest;)test",
5509ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5519ad83fe7SKrasimir Georgiev
5529ad83fe7SKrasimir Georgiev expect_eq(R"test(
5539ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1, item_2: 2)pb" +
5549ad83fe7SKrasimir Georgiev rest;)test",
5559ad83fe7SKrasimir Georgiev format(R"test(
5569ad83fe7SKrasimir Georgiev auto S = R"pb(item_1:1,item_2:2)pb"+rest;)test",
5579ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5589ad83fe7SKrasimir Georgiev
5599ad83fe7SKrasimir Georgiev expect_eq(R"test(
5609ad83fe7SKrasimir Georgiev auto S =
5619ad83fe7SKrasimir Georgiev R"pb(item_1: 1 item_2: 2)pb" + rest;)test",
5629ad83fe7SKrasimir Georgiev format(R"test(
5639ad83fe7SKrasimir Georgiev auto S = R"pb(item_1:1 item_2:2)pb"+rest;)test",
5649ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5659ad83fe7SKrasimir Georgiev
566128fcffbSKrasimir Georgiev // `rest` fits on the line after )pb", but forced on newline since the raw
567128fcffbSKrasimir Georgiev // string literal is multiline.
5689ad83fe7SKrasimir Georgiev expect_eq(R"test(
5699ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1,
5709ad83fe7SKrasimir Georgiev item_2: 2,
571128fcffbSKrasimir Georgiev item_3: 3)pb" +
572128fcffbSKrasimir Georgiev rest;)test",
5739ad83fe7SKrasimir Georgiev format(R"test(
5749ad83fe7SKrasimir Georgiev auto S = R"pb(item_1:1,item_2:2,item_3:3)pb"+rest;)test",
5759ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5769ad83fe7SKrasimir Georgiev
5779ad83fe7SKrasimir Georgiev expect_eq(R"test(
5789ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1,
5799ad83fe7SKrasimir Georgiev item_2: 2,
5809ad83fe7SKrasimir Georgiev item_3: 3)pb" +
5819ad83fe7SKrasimir Georgiev longlongrest;)test",
5829ad83fe7SKrasimir Georgiev format(R"test(
5839ad83fe7SKrasimir Georgiev auto S = R"pb(item_1:1,item_2:2,item_3:3)pb"+longlongrest;)test",
5849ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5859ad83fe7SKrasimir Georgiev
5869ad83fe7SKrasimir Georgiev // Formats the raw string second operand of a binary operator expression.
5879ad83fe7SKrasimir Georgiev expect_eq(R"test(auto S = first + R"pb(item_1: 1)pb";)test",
5889ad83fe7SKrasimir Georgiev format(R"test(auto S = first + R"pb(item_1:1)pb";)test",
5899ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5909ad83fe7SKrasimir Georgiev
5919ad83fe7SKrasimir Georgiev expect_eq(R"test(
5929ad83fe7SKrasimir Georgiev auto S = first + R"pb(item_1: 1,
5939ad83fe7SKrasimir Georgiev item_2: 2)pb";)test",
5949ad83fe7SKrasimir Georgiev format(R"test(
5959ad83fe7SKrasimir Georgiev auto S = first+R"pb(item_1:1,item_2:2)pb";)test",
5969ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
5979ad83fe7SKrasimir Georgiev
5989ad83fe7SKrasimir Georgiev expect_eq(R"test(
5999ad83fe7SKrasimir Georgiev auto S = first + R"pb(item_1: 1
6009ad83fe7SKrasimir Georgiev item_2: 2)pb";)test",
6019ad83fe7SKrasimir Georgiev format(R"test(
6029ad83fe7SKrasimir Georgiev auto S = first+R"pb(item_1:1 item_2:2)pb";)test",
6039ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6049ad83fe7SKrasimir Georgiev
6059ad83fe7SKrasimir Georgiev expect_eq(R"test(
6069ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1,
6079ad83fe7SKrasimir Georgiev item_2: 2,
608128fcffbSKrasimir Georgiev item_3: 3)pb" +
609128fcffbSKrasimir Georgiev rest;)test",
6109ad83fe7SKrasimir Georgiev format(R"test(
6119ad83fe7SKrasimir Georgiev auto S = R"pb(item_1:1,item_2:2,item_3:3)pb"+rest;)test",
6129ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6139ad83fe7SKrasimir Georgiev
6149ad83fe7SKrasimir Georgiev expect_eq(R"test(
6159ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1,
6169ad83fe7SKrasimir Georgiev item_2: 2,
6179ad83fe7SKrasimir Georgiev item_3: 3)pb" +
6189ad83fe7SKrasimir Georgiev longlongrest;)test",
6199ad83fe7SKrasimir Georgiev format(R"test(
6209ad83fe7SKrasimir Georgiev auto S = R"pb(item_1:1,item_2:2,item_3:3)pb"+longlongrest;)test",
6219ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6229ad83fe7SKrasimir Georgiev
6239ad83fe7SKrasimir Georgiev // Formats the raw string operands in expressions.
6249ad83fe7SKrasimir Georgiev expect_eq(R"test(
6259ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1)pb" +
6269ad83fe7SKrasimir Georgiev R"pb(item_2: 2)pb";
6279ad83fe7SKrasimir Georgiev )test",
6289ad83fe7SKrasimir Georgiev format(R"test(
6299ad83fe7SKrasimir Georgiev auto S=R"pb(item_1:1)pb"+R"pb(item_2:2)pb";
6309ad83fe7SKrasimir Georgiev )test",
6319ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6329ad83fe7SKrasimir Georgiev
6339ad83fe7SKrasimir Georgiev expect_eq(R"test(
6349ad83fe7SKrasimir Georgiev auto S = R"pb(item_1: 1)pb" +
6359ad83fe7SKrasimir Georgiev R"pb(item_2: 2)pb" +
6369ad83fe7SKrasimir Georgiev R"pb(item_3: 3)pb";
6379ad83fe7SKrasimir Georgiev )test",
6389ad83fe7SKrasimir Georgiev format(R"test(
6399ad83fe7SKrasimir Georgiev auto S=R"pb(item_1:1)pb"+R"pb(item_2:2)pb"+R"pb(item_3:3)pb";
6409ad83fe7SKrasimir Georgiev )test",
6419ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6429ad83fe7SKrasimir Georgiev
6439ad83fe7SKrasimir Georgiev expect_eq(R"test(
6449ad83fe7SKrasimir Georgiev auto S = (count < 3)
6459ad83fe7SKrasimir Georgiev ? R"pb(item_1: 1)pb"
6469ad83fe7SKrasimir Georgiev : R"pb(item_2: 2)pb";
6479ad83fe7SKrasimir Georgiev )test",
6489ad83fe7SKrasimir Georgiev format(R"test(
6499ad83fe7SKrasimir Georgiev auto S=(count<3)?R"pb(item_1:1)pb":R"pb(item_2:2)pb";
6509ad83fe7SKrasimir Georgiev )test",
6519ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6529ad83fe7SKrasimir Georgiev
6539ad83fe7SKrasimir Georgiev expect_eq(R"test(
6549ad83fe7SKrasimir Georgiev auto S =
6559ad83fe7SKrasimir Georgiev (count < 3)
6569ad83fe7SKrasimir Georgiev ? R"pb(item_1: 1, item_2: 2)pb"
6579ad83fe7SKrasimir Georgiev : R"pb(item_3: 3)pb";
6589ad83fe7SKrasimir Georgiev )test",
6599ad83fe7SKrasimir Georgiev format(R"test(
6609ad83fe7SKrasimir Georgiev auto S=(count<3)?R"pb(item_1:1,item_2:2)pb":R"pb(item_3:3)pb";
6619ad83fe7SKrasimir Georgiev )test",
6629ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6639ad83fe7SKrasimir Georgiev
6649ad83fe7SKrasimir Georgiev expect_eq(R"test(
6659ad83fe7SKrasimir Georgiev auto S =
6669ad83fe7SKrasimir Georgiev (count < 3)
6679ad83fe7SKrasimir Georgiev ? R"pb(item_1: 1)pb"
6689ad83fe7SKrasimir Georgiev : R"pb(item_2: 2, item_3: 3)pb";
6699ad83fe7SKrasimir Georgiev )test",
6709ad83fe7SKrasimir Georgiev format(R"test(
6719ad83fe7SKrasimir Georgiev auto S=(count<3)?R"pb(item_1:1)pb":R"pb(item_2:2,item_3:3)pb";
6729ad83fe7SKrasimir Georgiev )test",
6739ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(40)));
6749ad83fe7SKrasimir Georgiev }
6759ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,PrefixAndSuffixAlignment)6769ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, PrefixAndSuffixAlignment) {
6779ad83fe7SKrasimir Georgiev // Keep the suffix at the end of line if not on newline.
6789ad83fe7SKrasimir Georgiev expect_eq(R"test(
6799ad83fe7SKrasimir Georgiev int s() {
6809ad83fe7SKrasimir Georgiev auto S = PTP(
6819ad83fe7SKrasimir Georgiev R"pb(
6829ad83fe7SKrasimir Georgiev item_1: 1,
6839ad83fe7SKrasimir Georgiev item_2: 2)pb");
6849ad83fe7SKrasimir Georgiev })test",
6859ad83fe7SKrasimir Georgiev format(R"test(
6869ad83fe7SKrasimir Georgiev int s() {
6879ad83fe7SKrasimir Georgiev auto S = PTP(
6889ad83fe7SKrasimir Georgiev R"pb(
6899ad83fe7SKrasimir Georgiev item_1: 1,
6909ad83fe7SKrasimir Georgiev item_2: 2)pb");
6919ad83fe7SKrasimir Georgiev })test",
6929ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(20)));
6939ad83fe7SKrasimir Georgiev
694a71f626eSKrasimir Georgiev // Align the suffix with the surrounding indent if the prefix is not on
6959ad83fe7SKrasimir Georgiev // a line of its own.
6969ad83fe7SKrasimir Georgiev expect_eq(R"test(
6979ad83fe7SKrasimir Georgiev int s() {
698a71f626eSKrasimir Georgiev auto S = PTP(R"pb(
6999ad83fe7SKrasimir Georgiev item_1: 1,
7009ad83fe7SKrasimir Georgiev item_2: 2
7019ad83fe7SKrasimir Georgiev )pb");
7029ad83fe7SKrasimir Georgiev })test",
7039ad83fe7SKrasimir Georgiev format(R"test(
7049ad83fe7SKrasimir Georgiev int s() {
7059ad83fe7SKrasimir Georgiev auto S = PTP(R"pb(
7069ad83fe7SKrasimir Georgiev item_1: 1,
7079ad83fe7SKrasimir Georgiev item_2: 2
7089ad83fe7SKrasimir Georgiev )pb");
7099ad83fe7SKrasimir Georgiev })test",
7109ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(20)));
7119ad83fe7SKrasimir Georgiev
7129ad83fe7SKrasimir Georgiev // Align the prefix with the suffix if both the prefix and suffix are on a
7139ad83fe7SKrasimir Georgiev // line of their own.
7149ad83fe7SKrasimir Georgiev expect_eq(R"test(
7159ad83fe7SKrasimir Georgiev int s() {
7169ad83fe7SKrasimir Georgiev auto S = PTP(
7179ad83fe7SKrasimir Georgiev R"pb(
7189ad83fe7SKrasimir Georgiev item_1: 1,
7199ad83fe7SKrasimir Georgiev item_2: 2,
7209ad83fe7SKrasimir Georgiev )pb");
7219ad83fe7SKrasimir Georgiev })test",
7229ad83fe7SKrasimir Georgiev format(R"test(
7239ad83fe7SKrasimir Georgiev int s() {
7249ad83fe7SKrasimir Georgiev auto S = PTP(
7259ad83fe7SKrasimir Georgiev R"pb(
7269ad83fe7SKrasimir Georgiev item_1: 1,
7279ad83fe7SKrasimir Georgiev item_2: 2,
7289ad83fe7SKrasimir Georgiev )pb");
7299ad83fe7SKrasimir Georgiev })test",
7309ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(20)));
7319ad83fe7SKrasimir Georgiev }
7329ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,EstimatesPenalty)7339ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, EstimatesPenalty) {
7349ad83fe7SKrasimir Georgiev // The penalty for characters exceeding the column limit in the raw string
7359ad83fe7SKrasimir Georgiev // forces 'hh' to be put on a newline.
7369ad83fe7SKrasimir Georgiev expect_eq(R"test(
7379ad83fe7SKrasimir Georgiev ff(gggggg,
7389ad83fe7SKrasimir Georgiev hh(R"pb(key {
7399ad83fe7SKrasimir Georgiev i1: k1
7409ad83fe7SKrasimir Georgiev i2: k2
7419ad83fe7SKrasimir Georgiev })pb"));
7429ad83fe7SKrasimir Georgiev )test",
7439ad83fe7SKrasimir Georgiev format(R"test(
7449ad83fe7SKrasimir Georgiev ff(gggggg, hh(R"pb(key {
7459ad83fe7SKrasimir Georgiev i1: k1
7469ad83fe7SKrasimir Georgiev i2: k2
7479ad83fe7SKrasimir Georgiev })pb"));
7489ad83fe7SKrasimir Georgiev )test",
7499ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(20)));
7509ad83fe7SKrasimir Georgiev }
7519ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,DontFormatNonRawStrings)7529ad83fe7SKrasimir Georgiev TEST_F(FormatTestRawStrings, DontFormatNonRawStrings) {
7539ad83fe7SKrasimir Georgiev expect_eq(R"test(a = R"pb(key:value)";)test",
7549ad83fe7SKrasimir Georgiev format(R"test(a = R"pb(key:value)";)test",
7559ad83fe7SKrasimir Georgiev getRawStringPbStyleWithColumns(20)));
7569ad83fe7SKrasimir Georgiev }
7579ad83fe7SKrasimir Georgiev
TEST_F(FormatTestRawStrings,FormatsRawStringsWithEnclosingFunctionName)7582537e220SKrasimir Georgiev TEST_F(FormatTestRawStrings, FormatsRawStringsWithEnclosingFunctionName) {
7592537e220SKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(40);
760ece7e95fSmydeveloperday Style.RawStringFormats[0].EnclosingFunctions.push_back("PARSE_TEXT_PROTO");
7612537e220SKrasimir Georgiev Style.RawStringFormats[0].EnclosingFunctions.push_back("ParseTextProto");
7622537e220SKrasimir Georgiev expect_eq(R"test(a = PARSE_TEXT_PROTO(R"(key: value)");)test",
7632537e220SKrasimir Georgiev format(R"test(a = PARSE_TEXT_PROTO(R"(key:value)");)test", Style));
7642537e220SKrasimir Georgiev
7652537e220SKrasimir Georgiev expect_eq(R"test(
7662537e220SKrasimir Georgiev a = PARSE_TEXT_PROTO /**/ (
7672537e220SKrasimir Georgiev /**/ R"(key: value)");)test",
7682537e220SKrasimir Georgiev format(R"test(
7692537e220SKrasimir Georgiev a = PARSE_TEXT_PROTO/**/(/**/R"(key:value)");)test",
7702537e220SKrasimir Georgiev Style));
7712537e220SKrasimir Georgiev
7722537e220SKrasimir Georgiev expect_eq(R"test(
7732537e220SKrasimir Georgiev a = ParseTextProto<ProtoType>(
7742537e220SKrasimir Georgiev R"(key: value)");)test",
7752537e220SKrasimir Georgiev format(R"test(
7762537e220SKrasimir Georgiev a = ParseTextProto<ProtoType>(R"(key:value)");)test",
7772537e220SKrasimir Georgiev Style));
7782537e220SKrasimir Georgiev }
7792537e220SKrasimir Georgiev
TEST_F(FormatTestRawStrings,UpdatesToCanonicalDelimiters)780412ed095SKrasimir Georgiev TEST_F(FormatTestRawStrings, UpdatesToCanonicalDelimiters) {
781587859d9SKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(35);
782412ed095SKrasimir Georgiev Style.RawStringFormats[0].CanonicalDelimiter = "proto";
783587859d9SKrasimir Georgiev Style.RawStringFormats[0].EnclosingFunctions.push_back("PARSE_TEXT_PROTO");
784587859d9SKrasimir Georgiev
785412ed095SKrasimir Georgiev expect_eq(R"test(a = R"proto(key: value)proto";)test",
786412ed095SKrasimir Georgiev format(R"test(a = R"pb(key:value)pb";)test", Style));
787412ed095SKrasimir Georgiev
788587859d9SKrasimir Georgiev expect_eq(R"test(PARSE_TEXT_PROTO(R"proto(key: value)proto");)test",
789587859d9SKrasimir Georgiev format(R"test(PARSE_TEXT_PROTO(R"(key:value)");)test", Style));
790587859d9SKrasimir Georgiev
791412ed095SKrasimir Georgiev // Don't update to canonical delimiter if it occurs as a raw string suffix in
792412ed095SKrasimir Georgiev // the raw string content.
793412ed095SKrasimir Georgiev expect_eq(R"test(a = R"pb(key: ")proto")pb";)test",
794412ed095SKrasimir Georgiev format(R"test(a = R"pb(key:")proto")pb";)test", Style));
795412ed095SKrasimir Georgiev }
796412ed095SKrasimir Georgiev
TEST_F(FormatTestRawStrings,PenalizesPrefixExcessChars)797ce00978bSKrasimir Georgiev TEST_F(FormatTestRawStrings, PenalizesPrefixExcessChars) {
798ce00978bSKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(60);
799ce00978bSKrasimir Georgiev
800ce00978bSKrasimir Georgiev // The '(' in R"pb is at column 60, no break.
801ce00978bSKrasimir Georgiev expect_eq(R"test(
802ce00978bSKrasimir Georgiev xxxxxxxaaaaax wwwwwww = _Verxrrrrrrrr(PARSE_TEXT_PROTO(R"pb(
803ce00978bSKrasimir Georgiev Category: aaaaaaaaaaaaaaaaaaaaaaaaaa
804ce00978bSKrasimir Georgiev )pb"));
805ce00978bSKrasimir Georgiev )test",
806ce00978bSKrasimir Georgiev format(R"test(
807ce00978bSKrasimir Georgiev xxxxxxxaaaaax wwwwwww = _Verxrrrrrrrr(PARSE_TEXT_PROTO(R"pb(
808ce00978bSKrasimir Georgiev Category: aaaaaaaaaaaaaaaaaaaaaaaaaa
809ce00978bSKrasimir Georgiev )pb"));
810ece7e95fSmydeveloperday )test",
811ece7e95fSmydeveloperday Style));
812ce00978bSKrasimir Georgiev // The '(' in R"pb is at column 61, break.
813ce00978bSKrasimir Georgiev expect_eq(R"test(
814ce00978bSKrasimir Georgiev xxxxxxxaaaaax wwwwwww =
815ce00978bSKrasimir Georgiev _Verxrrrrrrrrr(PARSE_TEXT_PROTO(R"pb(
816ce00978bSKrasimir Georgiev Category: aaaaaaaaaaaaaaaaaaaaaaaaaa
817ce00978bSKrasimir Georgiev )pb"));
818ce00978bSKrasimir Georgiev )test",
819ce00978bSKrasimir Georgiev format(R"test(
820ce00978bSKrasimir Georgiev xxxxxxxaaaaax wwwwwww = _Verxrrrrrrrrr(PARSE_TEXT_PROTO(R"pb(
821ce00978bSKrasimir Georgiev Category: aaaaaaaaaaaaaaaaaaaaaaaaaa
822ce00978bSKrasimir Georgiev )pb"));
823ece7e95fSmydeveloperday )test",
824ece7e95fSmydeveloperday Style));
825ce00978bSKrasimir Georgiev }
826ce00978bSKrasimir Georgiev
TEST_F(FormatTestRawStrings,KeepsRBraceFolloedByMoreLBracesOnSameLine)8278b4bc76aSKrasimir Georgiev TEST_F(FormatTestRawStrings, KeepsRBraceFolloedByMoreLBracesOnSameLine) {
8288b4bc76aSKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(80);
8298b4bc76aSKrasimir Georgiev
8308b4bc76aSKrasimir Georgiev expect_eq(
8318b4bc76aSKrasimir Georgiev R"test(
8328b4bc76aSKrasimir Georgiev int f() {
8338b4bc76aSKrasimir Georgiev if (1) {
8348b4bc76aSKrasimir Georgiev TTTTTTTTTTTTTTTTTTTTT s = PARSE_TEXT_PROTO(R"pb(
8358b4bc76aSKrasimir Georgiev ttttttttt {
8368b4bc76aSKrasimir Georgiev ppppppppppppp {
8378b4bc76aSKrasimir Georgiev [cccccccccc.pppppppppppppp.TTTTTTTTTTTTTTTTTTTT] { field_1: "123_1" }
8388b4bc76aSKrasimir Georgiev [cccccccccc.pppppppppppppp.TTTTTTTTTTTTTTTTTTTT] { field_2: "123_2" }
8398b4bc76aSKrasimir Georgiev }
8408b4bc76aSKrasimir Georgiev }
8418b4bc76aSKrasimir Georgiev )pb");
8428b4bc76aSKrasimir Georgiev }
8438b4bc76aSKrasimir Georgiev }
8448b4bc76aSKrasimir Georgiev )test",
8458b4bc76aSKrasimir Georgiev format(
8468b4bc76aSKrasimir Georgiev R"test(
8478b4bc76aSKrasimir Georgiev int f() {
8488b4bc76aSKrasimir Georgiev if (1) {
8498b4bc76aSKrasimir Georgiev TTTTTTTTTTTTTTTTTTTTT s = PARSE_TEXT_PROTO(R"pb(
8508b4bc76aSKrasimir Georgiev ttttttttt {
8518b4bc76aSKrasimir Georgiev ppppppppppppp {
8528b4bc76aSKrasimir Georgiev [cccccccccc.pppppppppppppp.TTTTTTTTTTTTTTTTTTTT] { field_1: "123_1" }
8538b4bc76aSKrasimir Georgiev [cccccccccc.pppppppppppppp.TTTTTTTTTTTTTTTTTTTT] { field_2: "123_2" }}}
8548b4bc76aSKrasimir Georgiev )pb");
8558b4bc76aSKrasimir Georgiev }
8568b4bc76aSKrasimir Georgiev }
8578b4bc76aSKrasimir Georgiev )test",
8588b4bc76aSKrasimir Georgiev Style));
8598b4bc76aSKrasimir Georgiev }
8608b4bc76aSKrasimir Georgiev
TEST_F(FormatTestRawStrings,DoNotFormatUnrecognizedDelimitersInRecognizedFunctions)8612d69f5d8SKrasimir Georgiev TEST_F(FormatTestRawStrings,
8622d69f5d8SKrasimir Georgiev DoNotFormatUnrecognizedDelimitersInRecognizedFunctions) {
8632d69f5d8SKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(60);
864ece7e95fSmydeveloperday Style.RawStringFormats[0].EnclosingFunctions.push_back("EqualsProto");
8652d69f5d8SKrasimir Georgiev // EqualsProto is a recognized function, but the Raw delimiter is
8662d69f5d8SKrasimir Georgiev // unrecognized. Do not touch the string in this case, since it might be
8672d69f5d8SKrasimir Georgiev // special.
8682d69f5d8SKrasimir Georgiev expect_eq(R"test(
8692d69f5d8SKrasimir Georgiev void f() {
8702d69f5d8SKrasimir Georgiev aaaaaaaaa(bbbbbbbbb, EqualsProto(R"Raw(
8712d69f5d8SKrasimir Georgiev item {
8722d69f5d8SKrasimir Georgiev key: value
8732d69f5d8SKrasimir Georgiev }
8742d69f5d8SKrasimir Georgiev )Raw"));
8752d69f5d8SKrasimir Georgiev })test",
8762d69f5d8SKrasimir Georgiev format(R"test(
8772d69f5d8SKrasimir Georgiev void f() {
8782d69f5d8SKrasimir Georgiev aaaaaaaaa(bbbbbbbbb, EqualsProto(R"Raw(
8792d69f5d8SKrasimir Georgiev item {
8802d69f5d8SKrasimir Georgiev key: value
8812d69f5d8SKrasimir Georgiev }
8822d69f5d8SKrasimir Georgiev )Raw"));
8832d69f5d8SKrasimir Georgiev })test",
8842d69f5d8SKrasimir Georgiev Style));
8852d69f5d8SKrasimir Georgiev }
8868b4bc76aSKrasimir Georgiev
TEST_F(FormatTestRawStrings,BreaksBeforeNextParamAfterMultilineRawStringParam)887128fcffbSKrasimir Georgiev TEST_F(FormatTestRawStrings,
888128fcffbSKrasimir Georgiev BreaksBeforeNextParamAfterMultilineRawStringParam) {
889128fcffbSKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(60);
890128fcffbSKrasimir Georgiev expect_eq(R"test(
891128fcffbSKrasimir Georgiev int f() {
892128fcffbSKrasimir Georgiev int a = g(x, R"pb(
893128fcffbSKrasimir Georgiev key: 1 #
894128fcffbSKrasimir Georgiev key: 2
895128fcffbSKrasimir Georgiev )pb",
896128fcffbSKrasimir Georgiev 3, 4);
897128fcffbSKrasimir Georgiev }
898128fcffbSKrasimir Georgiev )test",
899128fcffbSKrasimir Georgiev format(R"test(
900128fcffbSKrasimir Georgiev int f() {
901128fcffbSKrasimir Georgiev int a = g(x, R"pb(
902128fcffbSKrasimir Georgiev key: 1 #
903128fcffbSKrasimir Georgiev key: 2
904128fcffbSKrasimir Georgiev )pb", 3, 4);
905128fcffbSKrasimir Georgiev }
906128fcffbSKrasimir Georgiev )test",
907128fcffbSKrasimir Georgiev Style));
908128fcffbSKrasimir Georgiev
909128fcffbSKrasimir Georgiev // Breaks after a parent of a multiline param.
910128fcffbSKrasimir Georgiev expect_eq(R"test(
911128fcffbSKrasimir Georgiev int f() {
912128fcffbSKrasimir Georgiev int a = g(x, h(R"pb(
913128fcffbSKrasimir Georgiev key: 1 #
914128fcffbSKrasimir Georgiev key: 2
915128fcffbSKrasimir Georgiev )pb"),
916128fcffbSKrasimir Georgiev 3, 4);
917128fcffbSKrasimir Georgiev }
918128fcffbSKrasimir Georgiev )test",
919128fcffbSKrasimir Georgiev format(R"test(
920128fcffbSKrasimir Georgiev int f() {
921128fcffbSKrasimir Georgiev int a = g(x, h(R"pb(
922128fcffbSKrasimir Georgiev key: 1 #
923128fcffbSKrasimir Georgiev key: 2
924128fcffbSKrasimir Georgiev )pb"), 3, 4);
925128fcffbSKrasimir Georgiev }
926128fcffbSKrasimir Georgiev )test",
927128fcffbSKrasimir Georgiev Style));
928128fcffbSKrasimir Georgiev
929128fcffbSKrasimir Georgiev expect_eq(R"test(
930128fcffbSKrasimir Georgiev int f() {
931128fcffbSKrasimir Georgiev int a = g(x,
932128fcffbSKrasimir Georgiev h(R"pb(
933128fcffbSKrasimir Georgiev key: 1 #
934128fcffbSKrasimir Georgiev key: 2
935128fcffbSKrasimir Georgiev )pb",
936128fcffbSKrasimir Georgiev 2),
937128fcffbSKrasimir Georgiev 3, 4);
938128fcffbSKrasimir Georgiev }
939128fcffbSKrasimir Georgiev )test",
940128fcffbSKrasimir Georgiev format(R"test(
941128fcffbSKrasimir Georgiev int f() {
942128fcffbSKrasimir Georgiev int a = g(x, h(R"pb(
943128fcffbSKrasimir Georgiev key: 1 #
944128fcffbSKrasimir Georgiev key: 2
945128fcffbSKrasimir Georgiev )pb", 2), 3, 4);
946128fcffbSKrasimir Georgiev }
947128fcffbSKrasimir Georgiev )test",
948128fcffbSKrasimir Georgiev Style));
949128fcffbSKrasimir Georgiev // Breaks if formatting introduces a multiline raw string.
950128fcffbSKrasimir Georgiev expect_eq(R"test(
951128fcffbSKrasimir Georgiev int f() {
952128fcffbSKrasimir Georgiev int a = g(x, R"pb(key1: value111111111
953128fcffbSKrasimir Georgiev key2: value2222222222)pb",
954128fcffbSKrasimir Georgiev 3, 4);
955128fcffbSKrasimir Georgiev }
956128fcffbSKrasimir Georgiev )test",
957128fcffbSKrasimir Georgiev format(R"test(
958128fcffbSKrasimir Georgiev int f() {
959128fcffbSKrasimir Georgiev int a = g(x, R"pb(key1: value111111111 key2: value2222222222)pb", 3, 4);
960128fcffbSKrasimir Georgiev }
961128fcffbSKrasimir Georgiev )test",
962128fcffbSKrasimir Georgiev Style));
963128fcffbSKrasimir Georgiev // Does not force a break after an original multiline param that is
964128fcffbSKrasimir Georgiev // reformatterd as on single line.
965128fcffbSKrasimir Georgiev expect_eq(R"test(
966128fcffbSKrasimir Georgiev int f() {
967128fcffbSKrasimir Georgiev int a = g(R"pb(key: 1)pb", 2);
968128fcffbSKrasimir Georgiev })test",
969128fcffbSKrasimir Georgiev format(R"test(
970128fcffbSKrasimir Georgiev int f() {
971128fcffbSKrasimir Georgiev int a = g(R"pb(key:
972128fcffbSKrasimir Georgiev 1)pb", 2);
973ece7e95fSmydeveloperday })test",
974ece7e95fSmydeveloperday Style));
975128fcffbSKrasimir Georgiev }
976128fcffbSKrasimir Georgiev
TEST_F(FormatTestRawStrings,IndentsLastParamAfterNewline)977bda8482aSKrasimir Georgiev TEST_F(FormatTestRawStrings, IndentsLastParamAfterNewline) {
978bda8482aSKrasimir Georgiev FormatStyle Style = getRawStringPbStyleWithColumns(60);
979bda8482aSKrasimir Georgiev expect_eq(R"test(
980bda8482aSKrasimir Georgiev fffffffffffffffffffff("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
981bda8482aSKrasimir Georgiev R"pb(
982bda8482aSKrasimir Georgiev b: c
983bda8482aSKrasimir Georgiev )pb");)test",
984bda8482aSKrasimir Georgiev format(R"test(
985bda8482aSKrasimir Georgiev fffffffffffffffffffff("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
986bda8482aSKrasimir Georgiev R"pb(
987bda8482aSKrasimir Georgiev b: c
988bda8482aSKrasimir Georgiev )pb");)test",
989bda8482aSKrasimir Georgiev Style));
990bda8482aSKrasimir Georgiev }
9919ad83fe7SKrasimir Georgiev } // end namespace
9929ad83fe7SKrasimir Georgiev } // end namespace format
9939ad83fe7SKrasimir Georgiev } // end namespace clang
994