diff options
author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-07-24 16:36:35 +0000 |
---|---|---|
committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-07-24 16:36:35 +0000 |
commit | c5cc9efa075b6fcd8cfe16d59764dcbebc949b8c (patch) | |
tree | ebf1b2ea26344a71bcd96d7e7b19afb8b25d76d2 /llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp | |
parent | 419f1a4185d551594dc453b258bc4b8417edcfeb (diff) | |
download | bcm5719-llvm-c5cc9efa075b6fcd8cfe16d59764dcbebc949b8c.tar.gz bcm5719-llvm-c5cc9efa075b6fcd8cfe16d59764dcbebc949b8c.zip |
[Remarks] Simplify the creation of remark serializers
Introduce two new functions to create a serializer, and add support for
more combinations to the YAMLStrTabSerializer.
llvm-svn: 366919
Diffstat (limited to 'llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp')
-rw-r--r-- | llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp index 629811a8ba1..e1340b4f2e0 100644 --- a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp +++ b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp @@ -8,21 +8,32 @@ #include "llvm/Remarks/Remark.h" #include "llvm/Remarks/YAMLRemarkSerializer.h" +#include "llvm/Support/Error.h" #include "gtest/gtest.h" using namespace llvm; -static void check(const remarks::Remark &R, StringRef Expected, - Optional<StringRef> ExpectedStrTab = None) { +static void check(const remarks::Remark &R, StringRef ExpectedR, + Optional<StringRef> ExpectedStrTab = None, + Optional<remarks::StringTable> StrTab = None) { std::string Buf; raw_string_ostream OS(Buf); bool UseStrTab = ExpectedStrTab.hasValue(); - std::unique_ptr<remarks::Serializer> S = - UseStrTab ? llvm::make_unique<remarks::YAMLStrTabSerializer>(OS) - : llvm::make_unique<remarks::YAMLSerializer>(OS); + Expected<std::unique_ptr<remarks::Serializer>> MaybeS = [&] { + if (UseStrTab) { + if (StrTab) + return createRemarkSerializer(remarks::Format::YAMLStrTab, OS, + std::move(*StrTab)); + else + return createRemarkSerializer(remarks::Format::YAMLStrTab, OS); + } else + return createRemarkSerializer(remarks::Format::YAML, OS); + }(); + EXPECT_FALSE(errorToBool(MaybeS.takeError())); + std::unique_ptr<remarks::Serializer> S = std::move(*MaybeS); S->emit(R); - EXPECT_EQ(OS.str(), Expected); + EXPECT_EQ(OS.str(), ExpectedR); if (ExpectedStrTab) { Buf.clear(); EXPECT_TRUE(S->StrTab); @@ -88,3 +99,34 @@ TEST(YAMLRemarks, SerializerRemarkStrTab) { "...\n", StringRef("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45)); } + +TEST(YAMLRemarks, SerializerRemarkParsedStrTab) { + StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45); + remarks::Remark R; + R.RemarkType = remarks::Type::Missed; + R.PassName = "pass"; + R.RemarkName = "name"; + R.FunctionName = "func"; + R.Loc = remarks::RemarkLocation{"path", 3, 4}; + R.Hotness = 5; + R.Args.emplace_back(); + R.Args.back().Key = "key"; + R.Args.back().Val = "value"; + R.Args.emplace_back(); + R.Args.back().Key = "keydebug"; + R.Args.back().Val = "valuedebug"; + R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7}; + check(R, + "--- !Missed\n" + "Pass: 0\n" + "Name: 1\n" + "DebugLoc: { File: 3, Line: 3, Column: 4 }\n" + "Function: 2\n" + "Hotness: 5\n" + "Args:\n" + " - key: 4\n" + " - keydebug: 5\n" + " DebugLoc: { File: 6, Line: 6, Column: 7 }\n" + "...\n", + StrTab, remarks::StringTable(remarks::ParsedStringTable(StrTab))); +} |