xref: /llvm-project/llvm/unittests/DebugInfo/LogicalView/CommandLineOptionsTest.cpp (revision c28a977b87defd2f37fd0808d7ba6173133744ce)
1 //===- llvm/unittest/DebugInfo/LogicalView/CommandLineOptionsTest.cpp -----===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/DebugInfo/LogicalView/Core/LVOptions.h"
10 
11 #include "gtest/gtest.h"
12 
13 using namespace llvm;
14 using namespace llvm::logicalview;
15 
16 namespace {
17 
18 // '--attribute' options.
TEST(CommandLineOptionsTest,attributeOptions)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);
34   };
35 
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);
55   };
56 
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'.
61 
62   // Set standard and extended attributes.
63   LVOptions OptionsOne;
64   OptionsOne.setAttributeStandard();
65   OptionsOne.setAttributeExtended();
66   OptionsOne.resolveDependencies();
67   CheckStandardAttributes(OptionsOne, false);
68   CheckExtendedAttributes(OptionsOne, false);
69 
70   // Set standard and extended attributes; enable location attributes.
71   LVOptions OptionsTwo;
72   OptionsTwo.setAttributeStandard();
73   OptionsTwo.setAttributeExtended();
74   OptionsTwo.setPrintSymbols();
75   OptionsTwo.resolveDependencies();
76   CheckStandardAttributes(OptionsTwo, true);
77   CheckExtendedAttributes(OptionsTwo, true);
78 
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);
85 
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);
92 
93   // Set pathname attribute.
94   OptionsFour.setAttributePathname();
95   OptionsFour.resolveDependencies();
96   EXPECT_EQ(OptionsFour.getAttributeFilename(), 0);
97   EXPECT_EQ(OptionsFour.getAttributePathname(), 1);
98 
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);
105 
106   OptionsFive.resetAttributeLocation();
107   OptionsFive.setAttributeCoverage();
108   OptionsFive.resolveDependencies();
109   EXPECT_EQ(OptionsFive.getAttributeLocation(), 1);
110 
111   OptionsFive.resetAttributeLocation();
112   OptionsFive.setAttributeGaps();
113   OptionsFive.resolveDependencies();
114   EXPECT_EQ(OptionsFive.getAttributeLocation(), 1);
115 
116   OptionsFive.resetAttributeLocation();
117   OptionsFive.setAttributeRegister();
118   OptionsFive.resolveDependencies();
119   EXPECT_EQ(OptionsFive.getAttributeLocation(), 1);
120 }
121 
122 // '--compare' options.
TEST(CommandLineOptionsTest,compareOptions)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);
131 
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);
137 
138   OptionsTwo.resetCompareScopes();
139   OptionsTwo.setCompareLines();
140   OptionsTwo.resolveDependencies();
141   EXPECT_EQ(OptionsTwo.getCompareScopes(), 1);
142 
143   OptionsTwo.resetCompareScopes();
144   OptionsTwo.setCompareSymbols();
145   OptionsTwo.resolveDependencies();
146   EXPECT_EQ(OptionsTwo.getCompareScopes(), 1);
147 
148   OptionsTwo.resetCompareScopes();
149   OptionsTwo.setCompareTypes();
150   OptionsTwo.resolveDependencies();
151   EXPECT_EQ(OptionsTwo.getCompareScopes(), 1);
152 
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);
162 }
163 
164 // '--internal' options.
TEST(CommandLineOptionsTest,internalOptions)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);
174 }
175 
176 // '--output' options.
TEST(CommandLineOptionsTest,outputOptions)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);
184 
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);
191 
192   // Setting an output folder, it sets split option.
193   LVOptions OptionsThree;
194   OptionsThree.resolveDependencies();
195   EXPECT_EQ(OptionsThree.getOutputSplit(), 0);
196 
197   OptionsThree.setOutputFolder("folder-name");
198   OptionsThree.resolveDependencies();
199   EXPECT_EQ(OptionsThree.getOutputSplit(), 1);
200   EXPECT_STREQ(OptionsThree.getOutputFolder().c_str(), "folder-name");
201 
202   // Assume '--output=text' as default.
203   LVOptions OptionsFour;
204   OptionsFour.resolveDependencies();
205   EXPECT_EQ(OptionsFour.getOutputText(), 1);
206 }
207 
208 // '--print' options.
TEST(CommandLineOptionsTest,printOptions)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);
221 
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);
235 }
236 
237 // '--report' options.
TEST(CommandLineOptionsTest,reportOptions)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);
246 
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);
253 }
254 
255 // '--select' options.
TEST(CommandLineOptionsTest,selectOptions)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);
263 }
264 
265 // '--warning' options.
TEST(CommandLineOptionsTest,warningOptions)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);
274 }
275 
276 } // namespace
277