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. 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. 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. 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. 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. 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. 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. 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. 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