1 //===- llvm/unittest/DebugInfo/LogicalView/CommandLineOptionsTest.cpp -----===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/DebugInfo/LogicalView/Core/LVOptions.h"
11 #include "gtest/gtest.h"
14 using namespace llvm::logicalview
;
18 // '--attribute' options.
19 TEST(CommandLineOptionsTest
, attributeOptions
) {
20 auto CheckStandardAttributes
= [&](LVOptions
&Options
, bool Value
) {
21 EXPECT_EQ(Options
.getAttributeBase(), 1);
22 EXPECT_EQ(Options
.getAttributeCoverage(), Value
);
23 EXPECT_EQ(Options
.getAttributeDirectories(), 1);
24 EXPECT_EQ(Options
.getAttributeDiscriminator(), 1);
25 EXPECT_EQ(Options
.getAttributeFilename(), 0);
26 EXPECT_EQ(Options
.getAttributeFiles(), 1);
27 EXPECT_EQ(Options
.getAttributeFormat(), 1);
28 EXPECT_EQ(Options
.getAttributeLevel(), 1);
29 EXPECT_EQ(Options
.getAttributeProducer(), 1);
30 EXPECT_EQ(Options
.getAttributePublics(), 1);
31 EXPECT_EQ(Options
.getAttributeRange(), 1);
32 EXPECT_EQ(Options
.getAttributeReference(), 1);
33 EXPECT_EQ(Options
.getAttributeZero(), 1);
36 auto CheckExtendedAttributes
= [&](LVOptions
&Options
, bool Value
) {
37 EXPECT_EQ(Options
.getAttributeArgument(), 1);
38 EXPECT_EQ(Options
.getAttributeDiscarded(), 1);
39 EXPECT_EQ(Options
.getAttributeEncoded(), 1);
40 EXPECT_EQ(Options
.getAttributeGaps(), Value
);
41 EXPECT_EQ(Options
.getAttributeGenerated(), 1);
42 EXPECT_EQ(Options
.getAttributeGlobal(), 1);
43 EXPECT_EQ(Options
.getAttributeInserted(), 1);
44 EXPECT_EQ(Options
.getAttributeLinkage(), 1);
45 EXPECT_EQ(Options
.getAttributeLocal(), 1);
46 EXPECT_EQ(Options
.getAttributeLocation(), Value
);
47 EXPECT_EQ(Options
.getAttributeOffset(), 1);
48 EXPECT_EQ(Options
.getAttributePathname(), 1);
49 EXPECT_EQ(Options
.getAttributeQualified(), 1);
50 EXPECT_EQ(Options
.getAttributeQualifier(), 1);
51 EXPECT_EQ(Options
.getAttributeRegister(), Value
);
52 EXPECT_EQ(Options
.getAttributeSubrange(), 1);
53 EXPECT_EQ(Options
.getAttributeSystem(), 1);
54 EXPECT_EQ(Options
.getAttributeTypename(), 1);
57 // Location information is only relevant when printing symbols.
58 // It means the following attributes are dependent on --print=symbols:
59 // Coverage, gaps, location and register attributes.
60 // '--attribute=pathname' supersedes '--attribute=filename'.
62 // Set standard and extended attributes.
64 OptionsOne
.setAttributeStandard();
65 OptionsOne
.setAttributeExtended();
66 OptionsOne
.resolveDependencies();
67 CheckStandardAttributes(OptionsOne
, false);
68 CheckExtendedAttributes(OptionsOne
, false);
70 // Set standard and extended attributes; enable location attributes.
72 OptionsTwo
.setAttributeStandard();
73 OptionsTwo
.setAttributeExtended();
74 OptionsTwo
.setPrintSymbols();
75 OptionsTwo
.resolveDependencies();
76 CheckStandardAttributes(OptionsTwo
, true);
77 CheckExtendedAttributes(OptionsTwo
, true);
79 // Set all attributes.
80 LVOptions OptionsThree
;
81 OptionsThree
.setAttributeAll();
82 OptionsThree
.resolveDependencies();
83 EXPECT_EQ(OptionsThree
.getAttributeExtended(), 1);
84 EXPECT_EQ(OptionsThree
.getAttributeStandard(), 1);
86 // Set filename attribute.
87 LVOptions OptionsFour
;
88 OptionsFour
.setAttributeFilename();
89 OptionsFour
.resolveDependencies();
90 EXPECT_EQ(OptionsFour
.getAttributeFilename(), 1);
91 EXPECT_EQ(OptionsFour
.getAttributePathname(), 0);
93 // Set pathname attribute.
94 OptionsFour
.setAttributePathname();
95 OptionsFour
.resolveDependencies();
96 EXPECT_EQ(OptionsFour
.getAttributeFilename(), 0);
97 EXPECT_EQ(OptionsFour
.getAttributePathname(), 1);
99 // The location attribute depends on: coverage, gaps or register.
100 LVOptions OptionsFive
;
101 OptionsFive
.setPrintSymbols();
102 OptionsFive
.resetAttributeLocation();
103 OptionsFive
.resolveDependencies();
104 EXPECT_EQ(OptionsFive
.getAttributeLocation(), 0);
106 OptionsFive
.resetAttributeLocation();
107 OptionsFive
.setAttributeCoverage();
108 OptionsFive
.resolveDependencies();
109 EXPECT_EQ(OptionsFive
.getAttributeLocation(), 1);
111 OptionsFive
.resetAttributeLocation();
112 OptionsFive
.setAttributeGaps();
113 OptionsFive
.resolveDependencies();
114 EXPECT_EQ(OptionsFive
.getAttributeLocation(), 1);
116 OptionsFive
.resetAttributeLocation();
117 OptionsFive
.setAttributeRegister();
118 OptionsFive
.resolveDependencies();
119 EXPECT_EQ(OptionsFive
.getAttributeLocation(), 1);
122 // '--compare' options.
123 TEST(CommandLineOptionsTest
, compareOptions
) {
124 LVOptions OptionsOne
;
125 OptionsOne
.setCompareAll();
126 OptionsOne
.resolveDependencies();
127 EXPECT_EQ(OptionsOne
.getCompareLines(), 1);
128 EXPECT_EQ(OptionsOne
.getCompareScopes(), 1);
129 EXPECT_EQ(OptionsOne
.getCompareSymbols(), 1);
130 EXPECT_EQ(OptionsOne
.getCompareTypes(), 1);
132 // The compare scopes attribute depends on: symbols, types or lines.
133 LVOptions OptionsTwo
;
134 OptionsTwo
.resetCompareScopes();
135 OptionsTwo
.resolveDependencies();
136 EXPECT_EQ(OptionsTwo
.getCompareScopes(), 0);
138 OptionsTwo
.resetCompareScopes();
139 OptionsTwo
.setCompareLines();
140 OptionsTwo
.resolveDependencies();
141 EXPECT_EQ(OptionsTwo
.getCompareScopes(), 1);
143 OptionsTwo
.resetCompareScopes();
144 OptionsTwo
.setCompareSymbols();
145 OptionsTwo
.resolveDependencies();
146 EXPECT_EQ(OptionsTwo
.getCompareScopes(), 1);
148 OptionsTwo
.resetCompareScopes();
149 OptionsTwo
.setCompareTypes();
150 OptionsTwo
.resolveDependencies();
151 EXPECT_EQ(OptionsTwo
.getCompareScopes(), 1);
153 // The compare option, set/reset other attributes.
154 LVOptions OptionsThree
;
155 OptionsThree
.setCompareAll();
156 OptionsThree
.resolveDependencies();
157 EXPECT_EQ(OptionsThree
.getAttributeArgument(), 1);
158 EXPECT_EQ(OptionsThree
.getAttributeEncoded(), 1);
159 EXPECT_EQ(OptionsThree
.getAttributeInserted(), 1);
160 EXPECT_EQ(OptionsThree
.getAttributeMissing(), 1);
161 EXPECT_EQ(OptionsThree
.getAttributeQualified(), 1);
164 // '--internal' options.
165 TEST(CommandLineOptionsTest
, internalOptions
) {
166 LVOptions OptionsOne
;
167 OptionsOne
.setInternalAll();
168 OptionsOne
.resolveDependencies();
169 EXPECT_EQ(OptionsOne
.getInternalCmdline(), 1);
170 EXPECT_EQ(OptionsOne
.getInternalID(), 1);
171 EXPECT_EQ(OptionsOne
.getInternalIntegrity(), 1);
172 EXPECT_EQ(OptionsOne
.getInternalNone(), 1);
173 EXPECT_EQ(OptionsOne
.getInternalTag(), 1);
176 // '--output' options.
177 TEST(CommandLineOptionsTest
, outputOptions
) {
178 LVOptions OptionsOne
;
179 OptionsOne
.setOutputAll();
180 OptionsOne
.resolveDependencies();
181 EXPECT_EQ(OptionsOne
.getOutputJson(), 1);
182 EXPECT_EQ(OptionsOne
.getOutputSplit(), 1);
183 EXPECT_EQ(OptionsOne
.getOutputText(), 1);
185 // The pathname attribute is set with split output.
186 LVOptions OptionsTwo
;
187 OptionsTwo
.resetAttributePathname();
188 OptionsTwo
.setOutputSplit();
189 OptionsTwo
.resolveDependencies();
190 EXPECT_EQ(OptionsTwo
.getAttributePathname(), 1);
192 // Setting an output folder, it sets split option.
193 LVOptions OptionsThree
;
194 OptionsThree
.resolveDependencies();
195 EXPECT_EQ(OptionsThree
.getOutputSplit(), 0);
197 OptionsThree
.setOutputFolder("folder-name");
198 OptionsThree
.resolveDependencies();
199 EXPECT_EQ(OptionsThree
.getOutputSplit(), 1);
200 EXPECT_STREQ(OptionsThree
.getOutputFolder().c_str(), "folder-name");
202 // Assume '--output=text' as default.
203 LVOptions OptionsFour
;
204 OptionsFour
.resolveDependencies();
205 EXPECT_EQ(OptionsFour
.getOutputText(), 1);
208 // '--print' options.
209 TEST(CommandLineOptionsTest
, printOptions
) {
210 LVOptions OptionsOne
;
211 OptionsOne
.setPrintAll();
212 OptionsOne
.resolveDependencies();
213 EXPECT_EQ(OptionsOne
.getPrintInstructions(), 1);
214 EXPECT_EQ(OptionsOne
.getPrintLines(), 1);
215 EXPECT_EQ(OptionsOne
.getPrintScopes(), 1);
216 EXPECT_EQ(OptionsOne
.getPrintSizes(), 1);
217 EXPECT_EQ(OptionsOne
.getPrintSymbols(), 1);
218 EXPECT_EQ(OptionsOne
.getPrintSummary(), 1);
219 EXPECT_EQ(OptionsOne
.getPrintTypes(), 1);
220 EXPECT_EQ(OptionsOne
.getPrintWarnings(), 1);
222 // '--print=elements' is a shortcut for:
223 // '--print=instructions,lines,scopes,symbols,types'.
224 LVOptions OptionsTwo
;
225 OptionsTwo
.setPrintElements();
226 OptionsTwo
.resolveDependencies();
227 EXPECT_EQ(OptionsTwo
.getPrintInstructions(), 1);
228 EXPECT_EQ(OptionsTwo
.getPrintLines(), 1);
229 EXPECT_EQ(OptionsTwo
.getPrintScopes(), 1);
230 EXPECT_EQ(OptionsTwo
.getPrintSizes(), 0);
231 EXPECT_EQ(OptionsTwo
.getPrintSymbols(), 1);
232 EXPECT_EQ(OptionsTwo
.getPrintSummary(), 0);
233 EXPECT_EQ(OptionsTwo
.getPrintTypes(), 1);
234 EXPECT_EQ(OptionsTwo
.getPrintWarnings(), 0);
237 // '--report' options.
238 TEST(CommandLineOptionsTest
, reportOptions
) {
239 LVOptions OptionsOne
;
240 OptionsOne
.setReportAll();
241 OptionsOne
.resolveDependencies();
242 EXPECT_EQ(OptionsOne
.getReportChildren(), 1);
243 EXPECT_EQ(OptionsOne
.getReportList(), 1);
244 EXPECT_EQ(OptionsOne
.getReportParents(), 1);
245 EXPECT_EQ(OptionsOne
.getReportView(), 1);
247 // '--report=view' is a shortcut for '--report=parents,children'.
248 LVOptions OptionsTwo
;
249 OptionsTwo
.setReportView();
250 OptionsTwo
.resolveDependencies();
251 EXPECT_EQ(OptionsTwo
.getReportChildren(), 1);
252 EXPECT_EQ(OptionsTwo
.getReportParents(), 1);
255 // '--select' options.
256 TEST(CommandLineOptionsTest
, selectOptions
) {
257 LVOptions OptionsOne
;
258 OptionsOne
.setSelectIgnoreCase();
259 OptionsOne
.setSelectUseRegex();
260 OptionsOne
.resolveDependencies();
261 EXPECT_EQ(OptionsOne
.getSelectIgnoreCase(), 1);
262 EXPECT_EQ(OptionsOne
.getSelectUseRegex(), 1);
265 // '--warning' options.
266 TEST(CommandLineOptionsTest
, warningOptions
) {
267 LVOptions OptionsOne
;
268 OptionsOne
.setWarningAll();
269 OptionsOne
.resolveDependencies();
270 EXPECT_EQ(OptionsOne
.getWarningCoverages(), 1);
271 EXPECT_EQ(OptionsOne
.getWarningLines(), 1);
272 EXPECT_EQ(OptionsOne
.getWarningLocations(), 1);
273 EXPECT_EQ(OptionsOne
.getWarningRanges(), 1);