1 //===-- BreakpadRecordsTest.cpp ---------------------------------*- C++ -*-===//
2 //
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10 
11 #include "Plugins/ObjectFile/Breakpad/BreakpadRecords.h"
12 #include "gtest/gtest.h"
13 
14 using namespace lldb_private;
15 using namespace lldb_private::breakpad;
16 
17 TEST(Record, classify) {
18   EXPECT_EQ(Record::Module, Record::classify("MODULE"));
19   EXPECT_EQ(Record::Info, Record::classify("INFO"));
20   EXPECT_EQ(Record::File, Record::classify("FILE"));
21   EXPECT_EQ(Record::Func, Record::classify("FUNC"));
22   EXPECT_EQ(Record::Public, Record::classify("PUBLIC"));
23   EXPECT_EQ(Record::Stack, Record::classify("STACK"));
24 
25   // Any line which does not start with a known keyword will be classified as a
26   // line record, as those are the only ones that start without a keyword.
27   EXPECT_EQ(Record::Line, Record::classify("deadbeef"));
28   EXPECT_EQ(Record::Line, Record::classify("12"));
29   EXPECT_EQ(Record::Line, Record::classify("CODE_ID"));
30 }
31 
32 TEST(ModuleRecord, parse) {
33   EXPECT_EQ(ModuleRecord(llvm::Triple::Linux, llvm::Triple::x86_64,
34                          UUID::fromData("@ABCDEFGHIJKLMNO", 16)),
35             ModuleRecord::parse(
36                 "MODULE Linux x86_64 434241404544474648494a4b4c4d4e4f0 a.out"));
37 
38   EXPECT_EQ(llvm::None, ModuleRecord::parse("MODULE"));
39   EXPECT_EQ(llvm::None, ModuleRecord::parse("MODULE Linux"));
40   EXPECT_EQ(llvm::None, ModuleRecord::parse("MODULE Linux x86_64"));
41   EXPECT_EQ(llvm::None,
42             ModuleRecord::parse("MODULE Linux x86_64 deadbeefbaadf00d"));
43 }
44 
45 TEST(InfoRecord, parse) {
46   EXPECT_EQ(InfoRecord(UUID::fromData("@ABCDEFGHIJKLMNO", 16)),
47             InfoRecord::parse("INFO CODE_ID 404142434445464748494a4b4c4d4e4f"));
48   EXPECT_EQ(InfoRecord(UUID()), InfoRecord::parse("INFO CODE_ID 47 a.exe"));
49 
50   EXPECT_EQ(llvm::None, InfoRecord::parse("INFO"));
51   EXPECT_EQ(llvm::None, InfoRecord::parse("INFO CODE_ID"));
52 }
53 
54 TEST(PublicRecord, parse) {
55   EXPECT_EQ(PublicRecord(true, 0x47, 0x8, "foo"),
56             PublicRecord::parse("PUBLIC m 47 8 foo"));
57   EXPECT_EQ(PublicRecord(false, 0x47, 0x8, "foo"),
58             PublicRecord::parse("PUBLIC 47 8 foo"));
59 
60   EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC 47 8"));
61   EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC 47"));
62   EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC m"));
63   EXPECT_EQ(llvm::None, PublicRecord::parse("PUBLIC"));
64 }
65