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