278 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/DebugInfo/LogicalView/Core/LVOptions.h"10 11#include "gtest/gtest.h"12 13using namespace llvm;14using namespace llvm::logicalview;15 16namespace {17 18// '--attribute' options.19TEST(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.getAttributeSize(), 1);53 EXPECT_EQ(Options.getAttributeSubrange(), 1);54 EXPECT_EQ(Options.getAttributeSystem(), 1);55 EXPECT_EQ(Options.getAttributeTypename(), 1);56 };57 58 // Location information is only relevant when printing symbols.59 // It means the following attributes are dependent on --print=symbols:60 // Coverage, gaps, location and register attributes.61 // '--attribute=pathname' supersedes '--attribute=filename'.62 63 // Set standard and extended attributes.64 LVOptions OptionsOne;65 OptionsOne.setAttributeStandard();66 OptionsOne.setAttributeExtended();67 OptionsOne.resolveDependencies();68 CheckStandardAttributes(OptionsOne, false);69 CheckExtendedAttributes(OptionsOne, false);70 71 // Set standard and extended attributes; enable location attributes.72 LVOptions OptionsTwo;73 OptionsTwo.setAttributeStandard();74 OptionsTwo.setAttributeExtended();75 OptionsTwo.setPrintSymbols();76 OptionsTwo.resolveDependencies();77 CheckStandardAttributes(OptionsTwo, true);78 CheckExtendedAttributes(OptionsTwo, true);79 80 // Set all attributes.81 LVOptions OptionsThree;82 OptionsThree.setAttributeAll();83 OptionsThree.resolveDependencies();84 EXPECT_EQ(OptionsThree.getAttributeExtended(), 1);85 EXPECT_EQ(OptionsThree.getAttributeStandard(), 1);86 87 // Set filename attribute.88 LVOptions OptionsFour;89 OptionsFour.setAttributeFilename();90 OptionsFour.resolveDependencies();91 EXPECT_EQ(OptionsFour.getAttributeFilename(), 1);92 EXPECT_EQ(OptionsFour.getAttributePathname(), 0);93 94 // Set pathname attribute.95 OptionsFour.setAttributePathname();96 OptionsFour.resolveDependencies();97 EXPECT_EQ(OptionsFour.getAttributeFilename(), 0);98 EXPECT_EQ(OptionsFour.getAttributePathname(), 1);99 100 // The location attribute depends on: coverage, gaps or register.101 LVOptions OptionsFive;102 OptionsFive.setPrintSymbols();103 OptionsFive.resetAttributeLocation();104 OptionsFive.resolveDependencies();105 EXPECT_EQ(OptionsFive.getAttributeLocation(), 0);106 107 OptionsFive.resetAttributeLocation();108 OptionsFive.setAttributeCoverage();109 OptionsFive.resolveDependencies();110 EXPECT_EQ(OptionsFive.getAttributeLocation(), 1);111 112 OptionsFive.resetAttributeLocation();113 OptionsFive.setAttributeGaps();114 OptionsFive.resolveDependencies();115 EXPECT_EQ(OptionsFive.getAttributeLocation(), 1);116 117 OptionsFive.resetAttributeLocation();118 OptionsFive.setAttributeRegister();119 OptionsFive.resolveDependencies();120 EXPECT_EQ(OptionsFive.getAttributeLocation(), 1);121}122 123// '--compare' options.124TEST(CommandLineOptionsTest, compareOptions) {125 LVOptions OptionsOne;126 OptionsOne.setCompareAll();127 OptionsOne.resolveDependencies();128 EXPECT_EQ(OptionsOne.getCompareLines(), 1);129 EXPECT_EQ(OptionsOne.getCompareScopes(), 1);130 EXPECT_EQ(OptionsOne.getCompareSymbols(), 1);131 EXPECT_EQ(OptionsOne.getCompareTypes(), 1);132 133 // The compare scopes attribute depends on: symbols, types or lines.134 LVOptions OptionsTwo;135 OptionsTwo.resetCompareScopes();136 OptionsTwo.resolveDependencies();137 EXPECT_EQ(OptionsTwo.getCompareScopes(), 0);138 139 OptionsTwo.resetCompareScopes();140 OptionsTwo.setCompareLines();141 OptionsTwo.resolveDependencies();142 EXPECT_EQ(OptionsTwo.getCompareScopes(), 1);143 144 OptionsTwo.resetCompareScopes();145 OptionsTwo.setCompareSymbols();146 OptionsTwo.resolveDependencies();147 EXPECT_EQ(OptionsTwo.getCompareScopes(), 1);148 149 OptionsTwo.resetCompareScopes();150 OptionsTwo.setCompareTypes();151 OptionsTwo.resolveDependencies();152 EXPECT_EQ(OptionsTwo.getCompareScopes(), 1);153 154 // The compare option, set/reset other attributes.155 LVOptions OptionsThree;156 OptionsThree.setCompareAll();157 OptionsThree.resolveDependencies();158 EXPECT_EQ(OptionsThree.getAttributeArgument(), 1);159 EXPECT_EQ(OptionsThree.getAttributeEncoded(), 1);160 EXPECT_EQ(OptionsThree.getAttributeInserted(), 1);161 EXPECT_EQ(OptionsThree.getAttributeMissing(), 1);162 EXPECT_EQ(OptionsThree.getAttributeQualified(), 1);163}164 165// '--internal' options.166TEST(CommandLineOptionsTest, internalOptions) {167 LVOptions OptionsOne;168 OptionsOne.setInternalAll();169 OptionsOne.resolveDependencies();170 EXPECT_EQ(OptionsOne.getInternalCmdline(), 1);171 EXPECT_EQ(OptionsOne.getInternalID(), 1);172 EXPECT_EQ(OptionsOne.getInternalIntegrity(), 1);173 EXPECT_EQ(OptionsOne.getInternalNone(), 1);174 EXPECT_EQ(OptionsOne.getInternalTag(), 1);175}176 177// '--output' options.178TEST(CommandLineOptionsTest, outputOptions) {179 LVOptions OptionsOne;180 OptionsOne.setOutputAll();181 OptionsOne.resolveDependencies();182 EXPECT_EQ(OptionsOne.getOutputJson(), 1);183 EXPECT_EQ(OptionsOne.getOutputSplit(), 1);184 EXPECT_EQ(OptionsOne.getOutputText(), 1);185 186 // The pathname attribute is set with split output.187 LVOptions OptionsTwo;188 OptionsTwo.resetAttributePathname();189 OptionsTwo.setOutputSplit();190 OptionsTwo.resolveDependencies();191 EXPECT_EQ(OptionsTwo.getAttributePathname(), 1);192 193 // Setting an output folder, it sets split option.194 LVOptions OptionsThree;195 OptionsThree.resolveDependencies();196 EXPECT_EQ(OptionsThree.getOutputSplit(), 0);197 198 OptionsThree.setOutputFolder("folder-name");199 OptionsThree.resolveDependencies();200 EXPECT_EQ(OptionsThree.getOutputSplit(), 1);201 EXPECT_STREQ(OptionsThree.getOutputFolder().c_str(), "folder-name");202 203 // Assume '--output=text' as default.204 LVOptions OptionsFour;205 OptionsFour.resolveDependencies();206 EXPECT_EQ(OptionsFour.getOutputText(), 1);207}208 209// '--print' options.210TEST(CommandLineOptionsTest, printOptions) {211 LVOptions OptionsOne;212 OptionsOne.setPrintAll();213 OptionsOne.resolveDependencies();214 EXPECT_EQ(OptionsOne.getPrintInstructions(), 1);215 EXPECT_EQ(OptionsOne.getPrintLines(), 1);216 EXPECT_EQ(OptionsOne.getPrintScopes(), 1);217 EXPECT_EQ(OptionsOne.getPrintSizes(), 1);218 EXPECT_EQ(OptionsOne.getPrintSymbols(), 1);219 EXPECT_EQ(OptionsOne.getPrintSummary(), 1);220 EXPECT_EQ(OptionsOne.getPrintTypes(), 1);221 EXPECT_EQ(OptionsOne.getPrintWarnings(), 1);222 223 // '--print=elements' is a shortcut for:224 // '--print=instructions,lines,scopes,symbols,types'.225 LVOptions OptionsTwo;226 OptionsTwo.setPrintElements();227 OptionsTwo.resolveDependencies();228 EXPECT_EQ(OptionsTwo.getPrintInstructions(), 1);229 EXPECT_EQ(OptionsTwo.getPrintLines(), 1);230 EXPECT_EQ(OptionsTwo.getPrintScopes(), 1);231 EXPECT_EQ(OptionsTwo.getPrintSizes(), 0);232 EXPECT_EQ(OptionsTwo.getPrintSymbols(), 1);233 EXPECT_EQ(OptionsTwo.getPrintSummary(), 0);234 EXPECT_EQ(OptionsTwo.getPrintTypes(), 1);235 EXPECT_EQ(OptionsTwo.getPrintWarnings(), 0);236}237 238// '--report' options.239TEST(CommandLineOptionsTest, reportOptions) {240 LVOptions OptionsOne;241 OptionsOne.setReportAll();242 OptionsOne.resolveDependencies();243 EXPECT_EQ(OptionsOne.getReportChildren(), 1);244 EXPECT_EQ(OptionsOne.getReportList(), 1);245 EXPECT_EQ(OptionsOne.getReportParents(), 1);246 EXPECT_EQ(OptionsOne.getReportView(), 1);247 248 // '--report=view' is a shortcut for '--report=parents,children'.249 LVOptions OptionsTwo;250 OptionsTwo.setReportView();251 OptionsTwo.resolveDependencies();252 EXPECT_EQ(OptionsTwo.getReportChildren(), 1);253 EXPECT_EQ(OptionsTwo.getReportParents(), 1);254}255 256// '--select' options.257TEST(CommandLineOptionsTest, selectOptions) {258 LVOptions OptionsOne;259 OptionsOne.setSelectIgnoreCase();260 OptionsOne.setSelectUseRegex();261 OptionsOne.resolveDependencies();262 EXPECT_EQ(OptionsOne.getSelectIgnoreCase(), 1);263 EXPECT_EQ(OptionsOne.getSelectUseRegex(), 1);264}265 266// '--warning' options.267TEST(CommandLineOptionsTest, warningOptions) {268 LVOptions OptionsOne;269 OptionsOne.setWarningAll();270 OptionsOne.resolveDependencies();271 EXPECT_EQ(OptionsOne.getWarningCoverages(), 1);272 EXPECT_EQ(OptionsOne.getWarningLines(), 1);273 EXPECT_EQ(OptionsOne.getWarningLocations(), 1);274 EXPECT_EQ(OptionsOne.getWarningRanges(), 1);275}276 277} // namespace278