1*e2039142SNeal (nealsid) //===-- FormatEntityTest.cpp ---------------------------------------------===//
2*e2039142SNeal (nealsid) //
3*e2039142SNeal (nealsid) // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e2039142SNeal (nealsid) // See https://llvm.org/LICENSE.txt for license information.
5*e2039142SNeal (nealsid) // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e2039142SNeal (nealsid) //
7*e2039142SNeal (nealsid) //===----------------------------------------------------------------------===//
8*e2039142SNeal (nealsid) 
9*e2039142SNeal (nealsid) #include "lldb/Core/FormatEntity.h"
10*e2039142SNeal (nealsid) #include "lldb/Utility/Status.h"
11*e2039142SNeal (nealsid) 
12*e2039142SNeal (nealsid) #include "llvm/ADT/StringRef.h"
13*e2039142SNeal (nealsid) #include "gtest/gtest.h"
14*e2039142SNeal (nealsid) 
15*e2039142SNeal (nealsid) using namespace lldb_private;
16*e2039142SNeal (nealsid) 
17*e2039142SNeal (nealsid) using Definition = FormatEntity::Entry::Definition;
18*e2039142SNeal (nealsid) using Entry = FormatEntity::Entry;
19*e2039142SNeal (nealsid) 
TEST(FormatEntityTest,DefinitionConstructionNameAndType)20*e2039142SNeal (nealsid) TEST(FormatEntityTest, DefinitionConstructionNameAndType) {
21*e2039142SNeal (nealsid)   Definition d("foo", FormatEntity::Entry::Type::Invalid);
22*e2039142SNeal (nealsid) 
23*e2039142SNeal (nealsid)   EXPECT_EQ(d.name, "foo");
24*e2039142SNeal (nealsid)   EXPECT_EQ(d.string, nullptr);
25*e2039142SNeal (nealsid)   EXPECT_EQ(d.type, FormatEntity::Entry::Type::Invalid);
26*e2039142SNeal (nealsid)   EXPECT_EQ(d.data, 0UL);
27*e2039142SNeal (nealsid)   EXPECT_EQ(d.num_children, 0UL);
28*e2039142SNeal (nealsid)   EXPECT_EQ(d.children, nullptr);
29*e2039142SNeal (nealsid)   EXPECT_FALSE(d.keep_separator);
30*e2039142SNeal (nealsid) }
31*e2039142SNeal (nealsid) 
TEST(FormatEntityTest,DefinitionConstructionNameAndString)32*e2039142SNeal (nealsid) TEST(FormatEntityTest, DefinitionConstructionNameAndString) {
33*e2039142SNeal (nealsid)   Definition d("foo", "string");
34*e2039142SNeal (nealsid) 
35*e2039142SNeal (nealsid)   EXPECT_EQ(d.name, "foo");
36*e2039142SNeal (nealsid)   EXPECT_EQ(d.string, "string");
37*e2039142SNeal (nealsid)   EXPECT_EQ(d.type, FormatEntity::Entry::Type::EscapeCode);
38*e2039142SNeal (nealsid)   EXPECT_EQ(d.data, 0UL);
39*e2039142SNeal (nealsid)   EXPECT_EQ(d.num_children, 0UL);
40*e2039142SNeal (nealsid)   EXPECT_EQ(d.children, nullptr);
41*e2039142SNeal (nealsid)   EXPECT_FALSE(d.keep_separator);
42*e2039142SNeal (nealsid) }
43*e2039142SNeal (nealsid) 
TEST(FormatEntityTest,DefinitionConstructionNameTypeData)44*e2039142SNeal (nealsid) TEST(FormatEntityTest, DefinitionConstructionNameTypeData) {
45*e2039142SNeal (nealsid)   Definition d("foo", FormatEntity::Entry::Type::Invalid, 33);
46*e2039142SNeal (nealsid) 
47*e2039142SNeal (nealsid)   EXPECT_EQ(d.name, "foo");
48*e2039142SNeal (nealsid)   EXPECT_EQ(d.string, nullptr);
49*e2039142SNeal (nealsid)   EXPECT_EQ(d.type, FormatEntity::Entry::Type::Invalid);
50*e2039142SNeal (nealsid)   EXPECT_EQ(d.data, 33UL);
51*e2039142SNeal (nealsid)   EXPECT_EQ(d.num_children, 0UL);
52*e2039142SNeal (nealsid)   EXPECT_EQ(d.children, nullptr);
53*e2039142SNeal (nealsid)   EXPECT_FALSE(d.keep_separator);
54*e2039142SNeal (nealsid) }
55*e2039142SNeal (nealsid) 
TEST(FormatEntityTest,DefinitionConstructionNameTypeChildren)56*e2039142SNeal (nealsid) TEST(FormatEntityTest, DefinitionConstructionNameTypeChildren) {
57*e2039142SNeal (nealsid)   Definition d("foo", FormatEntity::Entry::Type::Invalid, 33);
58*e2039142SNeal (nealsid)   Definition parent("parent", FormatEntity::Entry::Type::Invalid, 1, &d);
59*e2039142SNeal (nealsid)   EXPECT_EQ(parent.name, "parent");
60*e2039142SNeal (nealsid)   EXPECT_EQ(parent.string, nullptr);
61*e2039142SNeal (nealsid)   EXPECT_EQ(parent.type, FormatEntity::Entry::Type::Invalid);
62*e2039142SNeal (nealsid)   EXPECT_EQ(parent.num_children, 1UL);
63*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children, &d);
64*e2039142SNeal (nealsid)   EXPECT_FALSE(parent.keep_separator);
65*e2039142SNeal (nealsid) 
66*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children[0].name, "foo");
67*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children[0].string, nullptr);
68*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children[0].type, FormatEntity::Entry::Type::Invalid);
69*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children[0].data, 33UL);
70*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children[0].num_children, 0UL);
71*e2039142SNeal (nealsid)   EXPECT_EQ(parent.children[0].children, nullptr);
72*e2039142SNeal (nealsid)   EXPECT_FALSE(d.keep_separator);
73*e2039142SNeal (nealsid) }
74*e2039142SNeal (nealsid) 
75*e2039142SNeal (nealsid) constexpr llvm::StringRef lookupStrings[] = {
76*e2039142SNeal (nealsid)     "${addr.load}",
77*e2039142SNeal (nealsid)     "${addr.file}",
78*e2039142SNeal (nealsid)     "${ansi.fg.black}",
79*e2039142SNeal (nealsid)     "${ansi.fg.red}",
80*e2039142SNeal (nealsid)     "${ansi.fg.green}",
81*e2039142SNeal (nealsid)     "${ansi.fg.yellow}",
82*e2039142SNeal (nealsid)     "${ansi.fg.blue}",
83*e2039142SNeal (nealsid)     "${ansi.fg.purple}",
84*e2039142SNeal (nealsid)     "${ansi.fg.cyan}",
85*e2039142SNeal (nealsid)     "${ansi.fg.white}",
86*e2039142SNeal (nealsid)     "${ansi.bg.black}",
87*e2039142SNeal (nealsid)     "${ansi.bg.red}",
88*e2039142SNeal (nealsid)     "${ansi.bg.green}",
89*e2039142SNeal (nealsid)     "${ansi.bg.yellow}",
90*e2039142SNeal (nealsid)     "${ansi.bg.blue}",
91*e2039142SNeal (nealsid)     "${ansi.bg.purple}",
92*e2039142SNeal (nealsid)     "${ansi.bg.cyan}",
93*e2039142SNeal (nealsid)     "${ansi.bg.white}",
94*e2039142SNeal (nealsid)     "${file.basename}",
95*e2039142SNeal (nealsid)     "${file.dirname}",
96*e2039142SNeal (nealsid)     "${file.fullpath}",
97*e2039142SNeal (nealsid)     "${frame.index}",
98*e2039142SNeal (nealsid)     "${frame.pc}",
99*e2039142SNeal (nealsid)     "${frame.fp}",
100*e2039142SNeal (nealsid)     "${frame.sp}",
101*e2039142SNeal (nealsid)     "${frame.flags}",
102*e2039142SNeal (nealsid)     "${frame.no-debug}",
103*e2039142SNeal (nealsid)     "${frame.reg.*}",
104*e2039142SNeal (nealsid)     "${frame.is-artificial}",
105*e2039142SNeal (nealsid)     "${function.id}",
106*e2039142SNeal (nealsid)     "${function.name}",
107*e2039142SNeal (nealsid)     "${function.name-without-args}",
108*e2039142SNeal (nealsid)     "${function.name-with-args}",
109*e2039142SNeal (nealsid)     "${function.mangled-name}",
110*e2039142SNeal (nealsid)     "${function.addr-offset}",
111*e2039142SNeal (nealsid)     "${function.concrete-only-addr-offset-no-padding}",
112*e2039142SNeal (nealsid)     "${function.line-offset}",
113*e2039142SNeal (nealsid)     "${function.pc-offset}",
114*e2039142SNeal (nealsid)     "${function.initial-function}",
115*e2039142SNeal (nealsid)     "${function.changed}",
116*e2039142SNeal (nealsid)     "${function.is-optimized}",
117*e2039142SNeal (nealsid)     "${line.file.basename}",
118*e2039142SNeal (nealsid)     "${line.file.dirname}",
119*e2039142SNeal (nealsid)     "${line.file.fullpath}",
120*e2039142SNeal (nealsid)     "${line.number}",
121*e2039142SNeal (nealsid)     "${line.column}",
122*e2039142SNeal (nealsid)     "${line.start-addr}",
123*e2039142SNeal (nealsid)     "${line.end-addr}",
124*e2039142SNeal (nealsid)     "${module.file.basename}",
125*e2039142SNeal (nealsid)     "${module.file.dirname}",
126*e2039142SNeal (nealsid)     "${module.file.fullpath}",
127*e2039142SNeal (nealsid)     "${process.id}",
128*e2039142SNeal (nealsid)     "${process.name}",
129*e2039142SNeal (nealsid)     "${process.file.basename}",
130*e2039142SNeal (nealsid)     "${process.file.dirname}",
131*e2039142SNeal (nealsid)     "${process.file.fullpath}",
132*e2039142SNeal (nealsid)     "${script.frame}",
133*e2039142SNeal (nealsid)     "${script.process}",
134*e2039142SNeal (nealsid)     "${script.target}",
135*e2039142SNeal (nealsid)     "${script.thread}",
136*e2039142SNeal (nealsid)     "${script.var}",
137*e2039142SNeal (nealsid)     "${script.svar}",
138*e2039142SNeal (nealsid)     "${script.thread}",
139*e2039142SNeal (nealsid)     "${svar.dummy-svar-to-test-wildcard}",
140*e2039142SNeal (nealsid)     "${thread.id}",
141*e2039142SNeal (nealsid)     "${thread.protocol_id}",
142*e2039142SNeal (nealsid)     "${thread.index}",
143*e2039142SNeal (nealsid)     "${thread.info.*}",
144*e2039142SNeal (nealsid)     "${thread.queue}",
145*e2039142SNeal (nealsid)     "${thread.name}",
146*e2039142SNeal (nealsid)     "${thread.stop-reason}",
147*e2039142SNeal (nealsid)     "${thread.stop-reason-raw}",
148*e2039142SNeal (nealsid)     "${thread.return-value}",
149*e2039142SNeal (nealsid)     "${thread.completed-expression}",
150*e2039142SNeal (nealsid)     "${target.arch}",
151*e2039142SNeal (nealsid)     "${var.dummy-var-to-test-wildcard}"};
152*e2039142SNeal (nealsid) 
TEST(FormatEntity,LookupAllEntriesInTree)153*e2039142SNeal (nealsid) TEST(FormatEntity, LookupAllEntriesInTree) {
154*e2039142SNeal (nealsid)   for (const llvm::StringRef testString : lookupStrings) {
155*e2039142SNeal (nealsid)     Entry e;
156*e2039142SNeal (nealsid)     EXPECT_TRUE(FormatEntity::Parse(testString, e).Success())
157*e2039142SNeal (nealsid)         << "Formatting " << testString << " did not succeed";
158*e2039142SNeal (nealsid)   }
159*e2039142SNeal (nealsid) }
160