brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · c21111c Raw
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