xref: /llvm-project/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp (revision 38818b60c58c76ba89b990978cdfd2d7b6799260)
178c92d2eSFrancis Visoiu Mistrih //===- unittest/Support/YAMLRemarksSerializerTest.cpp --------------------===//
278c92d2eSFrancis Visoiu Mistrih //
378c92d2eSFrancis Visoiu Mistrih // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
478c92d2eSFrancis Visoiu Mistrih // See https://llvm.org/LICENSE.txt for license information.
578c92d2eSFrancis Visoiu Mistrih // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
678c92d2eSFrancis Visoiu Mistrih //
778c92d2eSFrancis Visoiu Mistrih //===----------------------------------------------------------------------===//
878c92d2eSFrancis Visoiu Mistrih 
978c92d2eSFrancis Visoiu Mistrih #include "llvm/Remarks/Remark.h"
10d38f63e5SFrancis Visoiu Mistrih #include "llvm/Remarks/RemarkParser.h"
11cbbdc418SFrancis Visoiu Mistrih #include "llvm/Remarks/YAMLRemarkSerializer.h"
12c5cc9efaSFrancis Visoiu Mistrih #include "llvm/Support/Error.h"
1378c92d2eSFrancis Visoiu Mistrih #include "gtest/gtest.h"
1478c92d2eSFrancis Visoiu Mistrih 
152d8fdcaeSFrancis Visoiu Mistrih // We need to supprt Windows paths as well. In order to have paths with the same
162d8fdcaeSFrancis Visoiu Mistrih // length, use a different path according to the platform.
172d8fdcaeSFrancis Visoiu Mistrih #ifdef _WIN32
182d8fdcaeSFrancis Visoiu Mistrih #define EXTERNALFILETESTPATH "C:/externalfi"
192d8fdcaeSFrancis Visoiu Mistrih #else
202d8fdcaeSFrancis Visoiu Mistrih #define EXTERNALFILETESTPATH "/externalfile"
212d8fdcaeSFrancis Visoiu Mistrih #endif
222d8fdcaeSFrancis Visoiu Mistrih 
2378c92d2eSFrancis Visoiu Mistrih using namespace llvm;
2478c92d2eSFrancis Visoiu Mistrih 
check(remarks::Format SerializerFormat,remarks::SerializerMode Mode,ArrayRef<remarks::Remark> Rs,StringRef ExpectedR,std::optional<StringRef> ExpectedMeta,std::optional<remarks::StringTable> StrTab=std::nullopt)2577383d83SFrancis Visoiu Mistrih static void check(remarks::Format SerializerFormat,
2677383d83SFrancis Visoiu Mistrih                   remarks::SerializerMode Mode, ArrayRef<remarks::Remark> Rs,
2777c90c8cSKazu Hirata                   StringRef ExpectedR, std::optional<StringRef> ExpectedMeta,
2877c90c8cSKazu Hirata                   std::optional<remarks::StringTable> StrTab = std::nullopt) {
2978c92d2eSFrancis Visoiu Mistrih   std::string Buf;
3078c92d2eSFrancis Visoiu Mistrih   raw_string_ostream OS(Buf);
31ff4b515aSFrancis Visoiu Mistrih   Expected<std::unique_ptr<remarks::RemarkSerializer>> MaybeS = [&] {
32c5cc9efaSFrancis Visoiu Mistrih     if (StrTab)
3377383d83SFrancis Visoiu Mistrih       return createRemarkSerializer(SerializerFormat, Mode, OS,
34c5cc9efaSFrancis Visoiu Mistrih                                     std::move(*StrTab));
35c5cc9efaSFrancis Visoiu Mistrih     else
3677383d83SFrancis Visoiu Mistrih       return createRemarkSerializer(SerializerFormat, Mode, OS);
37c5cc9efaSFrancis Visoiu Mistrih   }();
38c5cc9efaSFrancis Visoiu Mistrih   EXPECT_FALSE(errorToBool(MaybeS.takeError()));
39ff4b515aSFrancis Visoiu Mistrih   std::unique_ptr<remarks::RemarkSerializer> S = std::move(*MaybeS);
40c5b5cc45SFrancis Visoiu Mistrih 
4107f967d9SFrancis Visoiu Mistrih   for (const remarks::Remark &R : Rs)
42c5b5cc45SFrancis Visoiu Mistrih     S->emit(R);
43c5cc9efaSFrancis Visoiu Mistrih   EXPECT_EQ(OS.str(), ExpectedR);
442d8fdcaeSFrancis Visoiu Mistrih 
455ed3d146SFrancis Visoiu Mistrih   if (ExpectedMeta) {
4678c92d2eSFrancis Visoiu Mistrih     Buf.clear();
472d8fdcaeSFrancis Visoiu Mistrih     std::unique_ptr<remarks::MetaSerializer> MS =
482d8fdcaeSFrancis Visoiu Mistrih         S->metaSerializer(OS, StringRef(EXTERNALFILETESTPATH));
492d8fdcaeSFrancis Visoiu Mistrih     MS->emit();
505ed3d146SFrancis Visoiu Mistrih     EXPECT_EQ(OS.str(), *ExpectedMeta);
515ed3d146SFrancis Visoiu Mistrih   }
525ed3d146SFrancis Visoiu Mistrih }
535ed3d146SFrancis Visoiu Mistrih 
check(remarks::Format SerializerFormat,const remarks::Remark & R,StringRef ExpectedR,StringRef ExpectedMeta,std::optional<remarks::StringTable> StrTab=std::nullopt)5477383d83SFrancis Visoiu Mistrih static void check(remarks::Format SerializerFormat, const remarks::Remark &R,
5577383d83SFrancis Visoiu Mistrih                   StringRef ExpectedR, StringRef ExpectedMeta,
5677c90c8cSKazu Hirata                   std::optional<remarks::StringTable> StrTab = std::nullopt) {
5777383d83SFrancis Visoiu Mistrih   return check(SerializerFormat, remarks::SerializerMode::Separate,
58*38818b60Sserge-sans-paille                ArrayRef(&R, &R + 1), ExpectedR, ExpectedMeta,
5977383d83SFrancis Visoiu Mistrih                std::move(StrTab));
605ed3d146SFrancis Visoiu Mistrih }
615ed3d146SFrancis Visoiu Mistrih 
62b6a01caaSKazu Hirata static void
checkStandalone(remarks::Format SerializerFormat,const remarks::Remark & R,StringRef ExpectedR,std::optional<remarks::StringTable> StrTab=std::nullopt)63b6a01caaSKazu Hirata checkStandalone(remarks::Format SerializerFormat, const remarks::Remark &R,
64b6a01caaSKazu Hirata                 StringRef ExpectedR,
6577c90c8cSKazu Hirata                 std::optional<remarks::StringTable> StrTab = std::nullopt) {
6677383d83SFrancis Visoiu Mistrih   return check(SerializerFormat, remarks::SerializerMode::Standalone,
67*38818b60Sserge-sans-paille                ArrayRef(&R, &R + 1), ExpectedR,
68b6a01caaSKazu Hirata                /*ExpectedMeta=*/std::nullopt, std::move(StrTab));
6978c92d2eSFrancis Visoiu Mistrih }
7078c92d2eSFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemark)7178c92d2eSFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemark) {
7278c92d2eSFrancis Visoiu Mistrih   remarks::Remark R;
7378c92d2eSFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
7478c92d2eSFrancis Visoiu Mistrih   R.PassName = "pass";
7578c92d2eSFrancis Visoiu Mistrih   R.RemarkName = "name";
7678c92d2eSFrancis Visoiu Mistrih   R.FunctionName = "func";
7778c92d2eSFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
7878c92d2eSFrancis Visoiu Mistrih   R.Hotness = 5;
7978c92d2eSFrancis Visoiu Mistrih   R.Args.emplace_back();
8078c92d2eSFrancis Visoiu Mistrih   R.Args.back().Key = "key";
8178c92d2eSFrancis Visoiu Mistrih   R.Args.back().Val = "value";
8278c92d2eSFrancis Visoiu Mistrih   R.Args.emplace_back();
8378c92d2eSFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
8478c92d2eSFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
8578c92d2eSFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
8677383d83SFrancis Visoiu Mistrih   check(remarks::Format::YAML, R,
872d8fdcaeSFrancis Visoiu Mistrih         "--- !Missed\n"
8878c92d2eSFrancis Visoiu Mistrih         "Pass:            pass\n"
8978c92d2eSFrancis Visoiu Mistrih         "Name:            name\n"
9078c92d2eSFrancis Visoiu Mistrih         "DebugLoc:        { File: path, Line: 3, Column: 4 }\n"
9178c92d2eSFrancis Visoiu Mistrih         "Function:        func\n"
9278c92d2eSFrancis Visoiu Mistrih         "Hotness:         5\n"
9378c92d2eSFrancis Visoiu Mistrih         "Args:\n"
9478c92d2eSFrancis Visoiu Mistrih         "  - key:             value\n"
9578c92d2eSFrancis Visoiu Mistrih         "  - keydebug:        valuedebug\n"
9678c92d2eSFrancis Visoiu Mistrih         "    DebugLoc:        { File: argpath, Line: 6, Column: 7 }\n"
972d8fdcaeSFrancis Visoiu Mistrih         "...\n",
982d8fdcaeSFrancis Visoiu Mistrih         StringRef("REMARKS\0"
992d8fdcaeSFrancis Visoiu Mistrih                   "\0\0\0\0\0\0\0\0"
10077383d83SFrancis Visoiu Mistrih                   "\0\0\0\0\0\0\0\0" EXTERNALFILETESTPATH "\0",
1012d8fdcaeSFrancis Visoiu Mistrih                   38));
10278c92d2eSFrancis Visoiu Mistrih }
10378c92d2eSFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemarkStandalone)1045ed3d146SFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemarkStandalone) {
1055ed3d146SFrancis Visoiu Mistrih   remarks::Remark R;
1065ed3d146SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
1075ed3d146SFrancis Visoiu Mistrih   R.PassName = "pass";
1085ed3d146SFrancis Visoiu Mistrih   R.RemarkName = "name";
1095ed3d146SFrancis Visoiu Mistrih   R.FunctionName = "func";
1105ed3d146SFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
1115ed3d146SFrancis Visoiu Mistrih   R.Hotness = 5;
1125ed3d146SFrancis Visoiu Mistrih   R.Args.emplace_back();
1135ed3d146SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
1145ed3d146SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
1155ed3d146SFrancis Visoiu Mistrih   R.Args.emplace_back();
1165ed3d146SFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
1175ed3d146SFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
1185ed3d146SFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
1195ed3d146SFrancis Visoiu Mistrih   checkStandalone(
12077383d83SFrancis Visoiu Mistrih       remarks::Format::YAML, R,
12107f967d9SFrancis Visoiu Mistrih       StringRef("--- !Missed\n"
1225ed3d146SFrancis Visoiu Mistrih                 "Pass:            pass\n"
1235ed3d146SFrancis Visoiu Mistrih                 "Name:            name\n"
1245ed3d146SFrancis Visoiu Mistrih                 "DebugLoc:        { File: path, Line: 3, Column: 4 }\n"
1255ed3d146SFrancis Visoiu Mistrih                 "Function:        func\n"
1265ed3d146SFrancis Visoiu Mistrih                 "Hotness:         5\n"
1275ed3d146SFrancis Visoiu Mistrih                 "Args:\n"
1285ed3d146SFrancis Visoiu Mistrih                 "  - key:             value\n"
1295ed3d146SFrancis Visoiu Mistrih                 "  - keydebug:        valuedebug\n"
1305ed3d146SFrancis Visoiu Mistrih                 "    DebugLoc:        { File: argpath, Line: 6, Column: 7 }\n"
13107f967d9SFrancis Visoiu Mistrih                 "...\n"));
1325ed3d146SFrancis Visoiu Mistrih }
1335ed3d146SFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemarkStrTab)13478c92d2eSFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemarkStrTab) {
13578c92d2eSFrancis Visoiu Mistrih   remarks::Remark R;
13678c92d2eSFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
13778c92d2eSFrancis Visoiu Mistrih   R.PassName = "pass";
13878c92d2eSFrancis Visoiu Mistrih   R.RemarkName = "name";
13978c92d2eSFrancis Visoiu Mistrih   R.FunctionName = "func";
14078c92d2eSFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
14178c92d2eSFrancis Visoiu Mistrih   R.Hotness = 5;
14278c92d2eSFrancis Visoiu Mistrih   R.Args.emplace_back();
14378c92d2eSFrancis Visoiu Mistrih   R.Args.back().Key = "key";
14478c92d2eSFrancis Visoiu Mistrih   R.Args.back().Val = "value";
14578c92d2eSFrancis Visoiu Mistrih   R.Args.emplace_back();
14678c92d2eSFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
14778c92d2eSFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
14878c92d2eSFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
14977383d83SFrancis Visoiu Mistrih   check(remarks::Format::YAMLStrTab, R,
15078c92d2eSFrancis Visoiu Mistrih         "--- !Missed\n"
15178c92d2eSFrancis Visoiu Mistrih         "Pass:            0\n"
15278c92d2eSFrancis Visoiu Mistrih         "Name:            1\n"
15378c92d2eSFrancis Visoiu Mistrih         "DebugLoc:        { File: 3, Line: 3, Column: 4 }\n"
15478c92d2eSFrancis Visoiu Mistrih         "Function:        2\n"
15578c92d2eSFrancis Visoiu Mistrih         "Hotness:         5\n"
15678c92d2eSFrancis Visoiu Mistrih         "Args:\n"
15778c92d2eSFrancis Visoiu Mistrih         "  - key:             4\n"
15878c92d2eSFrancis Visoiu Mistrih         "  - keydebug:        5\n"
15978c92d2eSFrancis Visoiu Mistrih         "    DebugLoc:        { File: 6, Line: 6, Column: 7 }\n"
16078c92d2eSFrancis Visoiu Mistrih         "...\n",
1612d8fdcaeSFrancis Visoiu Mistrih         StringRef("REMARKS\0"
1622d8fdcaeSFrancis Visoiu Mistrih                   "\0\0\0\0\0\0\0\0"
1632d8fdcaeSFrancis Visoiu Mistrih                   "\x2d\0\0\0\0\0\0\0"
16477383d83SFrancis Visoiu Mistrih                   "pass\0name\0func\0path\0value\0valuedebug\0argpath"
16577383d83SFrancis Visoiu Mistrih                   "\0" EXTERNALFILETESTPATH "\0",
16677383d83SFrancis Visoiu Mistrih                   83));
16778c92d2eSFrancis Visoiu Mistrih }
168c5cc9efaSFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemarkParsedStrTab)169c5cc9efaSFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemarkParsedStrTab) {
170c5cc9efaSFrancis Visoiu Mistrih   StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45);
171c5cc9efaSFrancis Visoiu Mistrih   remarks::Remark R;
172c5cc9efaSFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
173c5cc9efaSFrancis Visoiu Mistrih   R.PassName = "pass";
174c5cc9efaSFrancis Visoiu Mistrih   R.RemarkName = "name";
175c5cc9efaSFrancis Visoiu Mistrih   R.FunctionName = "func";
176c5cc9efaSFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
177c5cc9efaSFrancis Visoiu Mistrih   R.Hotness = 5;
178c5cc9efaSFrancis Visoiu Mistrih   R.Args.emplace_back();
179c5cc9efaSFrancis Visoiu Mistrih   R.Args.back().Key = "key";
180c5cc9efaSFrancis Visoiu Mistrih   R.Args.back().Val = "value";
181c5cc9efaSFrancis Visoiu Mistrih   R.Args.emplace_back();
182c5cc9efaSFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
183c5cc9efaSFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
184c5cc9efaSFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
18577383d83SFrancis Visoiu Mistrih   check(remarks::Format::YAMLStrTab, R,
186c5cc9efaSFrancis Visoiu Mistrih         "--- !Missed\n"
187c5cc9efaSFrancis Visoiu Mistrih         "Pass:            0\n"
188c5cc9efaSFrancis Visoiu Mistrih         "Name:            1\n"
189c5cc9efaSFrancis Visoiu Mistrih         "DebugLoc:        { File: 3, Line: 3, Column: 4 }\n"
190c5cc9efaSFrancis Visoiu Mistrih         "Function:        2\n"
191c5cc9efaSFrancis Visoiu Mistrih         "Hotness:         5\n"
192c5cc9efaSFrancis Visoiu Mistrih         "Args:\n"
193c5cc9efaSFrancis Visoiu Mistrih         "  - key:             4\n"
194c5cc9efaSFrancis Visoiu Mistrih         "  - keydebug:        5\n"
195c5cc9efaSFrancis Visoiu Mistrih         "    DebugLoc:        { File: 6, Line: 6, Column: 7 }\n"
196c5cc9efaSFrancis Visoiu Mistrih         "...\n",
1972d8fdcaeSFrancis Visoiu Mistrih         StringRef("REMARKS\0"
1982d8fdcaeSFrancis Visoiu Mistrih                   "\0\0\0\0\0\0\0\0"
1992d8fdcaeSFrancis Visoiu Mistrih                   "\x2d\0\0\0\0\0\0\0"
20077383d83SFrancis Visoiu Mistrih                   "pass\0name\0func\0path\0value\0valuedebug\0argpath"
20177383d83SFrancis Visoiu Mistrih                   "\0" EXTERNALFILETESTPATH "\0",
2022d8fdcaeSFrancis Visoiu Mistrih                   83),
2032d8fdcaeSFrancis Visoiu Mistrih         remarks::StringTable(remarks::ParsedStringTable(StrTab)));
204c5cc9efaSFrancis Visoiu Mistrih }
2055ed3d146SFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemarkParsedStrTabStandaloneNoStrTab)20677383d83SFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemarkParsedStrTabStandaloneNoStrTab) {
20777383d83SFrancis Visoiu Mistrih   // Check that we don't use the string table even if it was provided.
20877383d83SFrancis Visoiu Mistrih   StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45);
20977383d83SFrancis Visoiu Mistrih   remarks::ParsedStringTable ParsedStrTab(StrTab);
21077383d83SFrancis Visoiu Mistrih   remarks::StringTable PreFilledStrTab(ParsedStrTab);
21177383d83SFrancis Visoiu Mistrih   remarks::Remark R;
21277383d83SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
21377383d83SFrancis Visoiu Mistrih   R.PassName = "pass";
21477383d83SFrancis Visoiu Mistrih   R.RemarkName = "name";
21577383d83SFrancis Visoiu Mistrih   R.FunctionName = "func";
21677383d83SFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
21777383d83SFrancis Visoiu Mistrih   R.Hotness = 5;
21877383d83SFrancis Visoiu Mistrih   R.Args.emplace_back();
21977383d83SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
22077383d83SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
22177383d83SFrancis Visoiu Mistrih   R.Args.emplace_back();
22277383d83SFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
22377383d83SFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
22477383d83SFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
22577383d83SFrancis Visoiu Mistrih   checkStandalone(
22677383d83SFrancis Visoiu Mistrih       remarks::Format::YAML, R,
22777383d83SFrancis Visoiu Mistrih       StringRef("--- !Missed\n"
22877383d83SFrancis Visoiu Mistrih                 "Pass:            pass\n"
22977383d83SFrancis Visoiu Mistrih                 "Name:            name\n"
23077383d83SFrancis Visoiu Mistrih                 "DebugLoc:        { File: path, Line: 3, Column: 4 }\n"
23177383d83SFrancis Visoiu Mistrih                 "Function:        func\n"
23277383d83SFrancis Visoiu Mistrih                 "Hotness:         5\n"
23377383d83SFrancis Visoiu Mistrih                 "Args:\n"
23477383d83SFrancis Visoiu Mistrih                 "  - key:             value\n"
23577383d83SFrancis Visoiu Mistrih                 "  - keydebug:        valuedebug\n"
23677383d83SFrancis Visoiu Mistrih                 "    DebugLoc:        { File: argpath, Line: 6, Column: 7 }\n"
23777383d83SFrancis Visoiu Mistrih                 "...\n"),
23877383d83SFrancis Visoiu Mistrih       std::move(PreFilledStrTab));
23977383d83SFrancis Visoiu Mistrih }
24077383d83SFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemarkParsedStrTabStandalone)2415ed3d146SFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemarkParsedStrTabStandalone) {
2425ed3d146SFrancis Visoiu Mistrih   StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45);
2435ed3d146SFrancis Visoiu Mistrih   remarks::ParsedStringTable ParsedStrTab(StrTab);
2445ed3d146SFrancis Visoiu Mistrih   remarks::StringTable PreFilledStrTab(ParsedStrTab);
2455ed3d146SFrancis Visoiu Mistrih   remarks::Remark R;
2465ed3d146SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
2475ed3d146SFrancis Visoiu Mistrih   R.PassName = "pass";
2485ed3d146SFrancis Visoiu Mistrih   R.RemarkName = "name";
2495ed3d146SFrancis Visoiu Mistrih   R.FunctionName = "func";
2505ed3d146SFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
2515ed3d146SFrancis Visoiu Mistrih   R.Hotness = 5;
2525ed3d146SFrancis Visoiu Mistrih   R.Args.emplace_back();
2535ed3d146SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
2545ed3d146SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
2555ed3d146SFrancis Visoiu Mistrih   R.Args.emplace_back();
2565ed3d146SFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
2575ed3d146SFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
2585ed3d146SFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
2595ed3d146SFrancis Visoiu Mistrih   checkStandalone(
26077383d83SFrancis Visoiu Mistrih       remarks::Format::YAMLStrTab, R,
2615ed3d146SFrancis Visoiu Mistrih       StringRef("REMARKS\0"
2625ed3d146SFrancis Visoiu Mistrih                 "\0\0\0\0\0\0\0\0"
2635ed3d146SFrancis Visoiu Mistrih                 "\x2d\0\0\0\0\0\0\0"
2645ed3d146SFrancis Visoiu Mistrih                 "pass\0name\0func\0path\0value\0valuedebug\0argpath\0"
2655ed3d146SFrancis Visoiu Mistrih                 "--- !Missed\n"
2665ed3d146SFrancis Visoiu Mistrih                 "Pass:            0\n"
2675ed3d146SFrancis Visoiu Mistrih                 "Name:            1\n"
2685ed3d146SFrancis Visoiu Mistrih                 "DebugLoc:        { File: 3, Line: 3, Column: 4 }\n"
2695ed3d146SFrancis Visoiu Mistrih                 "Function:        2\n"
2705ed3d146SFrancis Visoiu Mistrih                 "Hotness:         5\n"
2715ed3d146SFrancis Visoiu Mistrih                 "Args:\n"
2725ed3d146SFrancis Visoiu Mistrih                 "  - key:             4\n"
2735ed3d146SFrancis Visoiu Mistrih                 "  - keydebug:        5\n"
2745ed3d146SFrancis Visoiu Mistrih                 "    DebugLoc:        { File: 6, Line: 6, Column: 7 }\n"
2755ed3d146SFrancis Visoiu Mistrih                 "...\n",
2765ed3d146SFrancis Visoiu Mistrih                 315),
2775ed3d146SFrancis Visoiu Mistrih       std::move(PreFilledStrTab));
2785ed3d146SFrancis Visoiu Mistrih }
27907f967d9SFrancis Visoiu Mistrih 
TEST(YAMLRemarks,SerializerRemarkParsedStrTabStandaloneMultipleRemarks)28007f967d9SFrancis Visoiu Mistrih TEST(YAMLRemarks, SerializerRemarkParsedStrTabStandaloneMultipleRemarks) {
28107f967d9SFrancis Visoiu Mistrih   StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45);
28207f967d9SFrancis Visoiu Mistrih   remarks::ParsedStringTable ParsedStrTab(StrTab);
28307f967d9SFrancis Visoiu Mistrih   remarks::StringTable PreFilledStrTab(ParsedStrTab);
28407f967d9SFrancis Visoiu Mistrih   SmallVector<remarks::Remark, 2> Rs;
28507f967d9SFrancis Visoiu Mistrih   remarks::Remark R;
28607f967d9SFrancis Visoiu Mistrih   R.RemarkType = remarks::Type::Missed;
28707f967d9SFrancis Visoiu Mistrih   R.PassName = "pass";
28807f967d9SFrancis Visoiu Mistrih   R.RemarkName = "name";
28907f967d9SFrancis Visoiu Mistrih   R.FunctionName = "func";
29007f967d9SFrancis Visoiu Mistrih   R.Loc = remarks::RemarkLocation{"path", 3, 4};
29107f967d9SFrancis Visoiu Mistrih   R.Hotness = 5;
29207f967d9SFrancis Visoiu Mistrih   R.Args.emplace_back();
29307f967d9SFrancis Visoiu Mistrih   R.Args.back().Key = "key";
29407f967d9SFrancis Visoiu Mistrih   R.Args.back().Val = "value";
29507f967d9SFrancis Visoiu Mistrih   R.Args.emplace_back();
29607f967d9SFrancis Visoiu Mistrih   R.Args.back().Key = "keydebug";
29707f967d9SFrancis Visoiu Mistrih   R.Args.back().Val = "valuedebug";
29807f967d9SFrancis Visoiu Mistrih   R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
29907f967d9SFrancis Visoiu Mistrih   Rs.emplace_back(R.clone());
30007f967d9SFrancis Visoiu Mistrih   Rs.emplace_back(std::move(R));
30177383d83SFrancis Visoiu Mistrih   check(remarks::Format::YAMLStrTab, remarks::SerializerMode::Standalone, Rs,
30207f967d9SFrancis Visoiu Mistrih         StringRef("REMARKS\0"
30307f967d9SFrancis Visoiu Mistrih                   "\0\0\0\0\0\0\0\0"
30407f967d9SFrancis Visoiu Mistrih                   "\x2d\0\0\0\0\0\0\0"
30507f967d9SFrancis Visoiu Mistrih                   "pass\0name\0func\0path\0value\0valuedebug\0argpath\0"
30607f967d9SFrancis Visoiu Mistrih                   "--- !Missed\n"
30707f967d9SFrancis Visoiu Mistrih                   "Pass:            0\n"
30807f967d9SFrancis Visoiu Mistrih                   "Name:            1\n"
30907f967d9SFrancis Visoiu Mistrih                   "DebugLoc:        { File: 3, Line: 3, Column: 4 }\n"
31007f967d9SFrancis Visoiu Mistrih                   "Function:        2\n"
31107f967d9SFrancis Visoiu Mistrih                   "Hotness:         5\n"
31207f967d9SFrancis Visoiu Mistrih                   "Args:\n"
31307f967d9SFrancis Visoiu Mistrih                   "  - key:             4\n"
31407f967d9SFrancis Visoiu Mistrih                   "  - keydebug:        5\n"
31507f967d9SFrancis Visoiu Mistrih                   "    DebugLoc:        { File: 6, Line: 6, Column: 7 }\n"
31607f967d9SFrancis Visoiu Mistrih                   "...\n"
31707f967d9SFrancis Visoiu Mistrih                   "--- !Missed\n"
31807f967d9SFrancis Visoiu Mistrih                   "Pass:            0\n"
31907f967d9SFrancis Visoiu Mistrih                   "Name:            1\n"
32007f967d9SFrancis Visoiu Mistrih                   "DebugLoc:        { File: 3, Line: 3, Column: 4 }\n"
32107f967d9SFrancis Visoiu Mistrih                   "Function:        2\n"
32207f967d9SFrancis Visoiu Mistrih                   "Hotness:         5\n"
32307f967d9SFrancis Visoiu Mistrih                   "Args:\n"
32407f967d9SFrancis Visoiu Mistrih                   "  - key:             4\n"
32507f967d9SFrancis Visoiu Mistrih                   "  - keydebug:        5\n"
32607f967d9SFrancis Visoiu Mistrih                   "    DebugLoc:        { File: 6, Line: 6, Column: 7 }\n"
32707f967d9SFrancis Visoiu Mistrih                   "...\n",
32807f967d9SFrancis Visoiu Mistrih                   561),
329b6a01caaSKazu Hirata         /*ExpectedMeta=*/std::nullopt, std::move(PreFilledStrTab));
33007f967d9SFrancis Visoiu Mistrih }
331