196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===- unittest/Support/OptionParsingTest.cpp - OptTable tests ------------===// 296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// The LLVM Compiler Infrastructure 496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// This file is distributed under the University of Illinois Open Source 696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// License. See LICENSE.TXT for details. 796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer// 896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer//===----------------------------------------------------------------------===// 996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1075b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner#include "llvm/ADT/STLExtras.h" 1196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/Arg.h" 1296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/ArgList.h" 1396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "llvm/Option/Option.h" 1496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "gtest/gtest.h" 1596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerusing namespace llvm; 1796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerusing namespace llvm::opt; 1896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 1996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerenum ID { 2096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer OPT_INVALID = 0, // This is not an option ID. 219dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ 222957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama HELPTEXT, METAVAR) OPT_##ID, 2396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "Opts.inc" 2496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer LastOption 2596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#undef OPTION 2696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}; 2796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 2896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#define PREFIX(NAME, VALUE) const char *const NAME[] = VALUE; 2996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "Opts.inc" 3096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#undef PREFIX 3196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 3275b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Klecknerenum OptionFlags { 3375b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner OptFlag1 = (1 << 4), 3475b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner OptFlag2 = (1 << 5), 3575b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner OptFlag3 = (1 << 6) 3675b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner}; 3775b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner 3896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerstatic const OptTable::Info InfoTable[] = { 399dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ 4096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer HELPTEXT, METAVAR) \ 4196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer { PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, PARAM, \ 429dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg FLAGS, OPT_##GROUP, OPT_##ALIAS, ALIASARGS }, 4396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#include "Opts.inc" 4496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer#undef OPTION 4596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}; 4696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 4796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencernamespace { 4896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerclass TestOptTable : public OptTable { 4996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerpublic: 502957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama TestOptTable(bool IgnoreCase = false) 512957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama : OptTable(InfoTable, array_lengthof(InfoTable), IgnoreCase) {} 5296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer}; 5396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 5496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 5596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencerconst char *Args[] = { 5696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-A", 5796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-Bhi", 5896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "--C=desu", 5996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-C", "bye", 6096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-D,adena", 6196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-E", "apple", "bloom", 6296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-Fblarg", 6396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-F", "42", 6496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer "-Gchuu", "2" 6596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer }; 6696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 6775b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid KlecknerTEST(Option, OptionParsing) { 6896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer TestOptTable T; 6996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer unsigned MAI, MAC; 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 71dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(Args), std::end(Args), MAI, MAC)); 723fe36d0fddd38e05daeb6f967fd0044a373a8f09NAKAMURA Takumi 7396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Check they all exist. 7496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_A)); 7596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_B)); 7696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_C)); 7796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_D)); 7896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_E)); 7996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_F)); 8096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_TRUE(AL->hasArg(OPT_G)); 8196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 8296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Check the values. 8396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(AL->getLastArgValue(OPT_B), "hi"); 8496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(AL->getLastArgValue(OPT_C), "bye"); 8596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(AL->getLastArgValue(OPT_D), "adena"); 8696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer std::vector<std::string> Es = AL->getAllArgValues(OPT_E); 8796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(Es[0], "apple"); 8896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(Es[1], "bloom"); 8996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(AL->getLastArgValue(OPT_F), "42"); 9096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer std::vector<std::string> Gs = AL->getAllArgValues(OPT_G); 9196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(Gs[0], "chuu"); 9296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(Gs[1], "2"); 9396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 9496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Check the help text. 9596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer std::string Help; 9696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer raw_string_ostream RSO(Help); 9796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer T.PrintHelp(RSO, "test", "title!"); 9896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_NE(Help.find("-A"), std::string::npos); 9996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer 10096a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer // Test aliases. 10196a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer arg_iterator Cs = AL->filtered_begin(OPT_C); 10296a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer ASSERT_NE(Cs, AL->filtered_end()); 10396a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(StringRef((*Cs)->getValue()), "desu"); 10496a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer ArgStringList ASL; 10596a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer (*Cs)->render(*AL, ASL); 10696a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer ASSERT_EQ(ASL.size(), 2u); 10796a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(StringRef(ASL[0]), "-C"); 10896a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer EXPECT_EQ(StringRef(ASL[1]), "desu"); 10996a564f2beec8c1930f0640844eec433e03bbce8Michael J. Spencer} 11075b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner 11175b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid KlecknerTEST(Option, ParseWithFlagExclusions) { 11275b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner TestOptTable T; 11375b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner unsigned MAI, MAC; 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL; 11575b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner 11675b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner // Exclude flag3 to avoid parsing as OPT_SLASH_C. 117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AL.reset(T.ParseArgs(std::begin(Args), std::end(Args), MAI, MAC, 11875b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner /*FlagsToInclude=*/0, 11975b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner /*FlagsToExclude=*/OptFlag3)); 12075b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_TRUE(AL->hasArg(OPT_A)); 12175b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_TRUE(AL->hasArg(OPT_C)); 12275b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_FALSE(AL->hasArg(OPT_SLASH_C)); 12375b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner 12475b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner // Exclude flag1 to avoid parsing as OPT_C. 125dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AL.reset(T.ParseArgs(std::begin(Args), std::end(Args), MAI, MAC, 12675b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner /*FlagsToInclude=*/0, 12775b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner /*FlagsToExclude=*/OptFlag1)); 12875b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_TRUE(AL->hasArg(OPT_B)); 12975b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_FALSE(AL->hasArg(OPT_C)); 13075b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_TRUE(AL->hasArg(OPT_SLASH_C)); 13175b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner 13275b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner const char *NewArgs[] = { "/C", "foo", "--C=bar" }; 133dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines AL.reset(T.ParseArgs(std::begin(NewArgs), std::end(NewArgs), MAI, MAC)); 13475b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_TRUE(AL->hasArg(OPT_SLASH_C)); 13575b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_TRUE(AL->hasArg(OPT_C)); 13675b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_EQ(AL->getLastArgValue(OPT_SLASH_C), "foo"); 13775b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner EXPECT_EQ(AL->getLastArgValue(OPT_C), "bar"); 13875b1783b2bf18572e9c286eaaa7f95ee82e7c514Reid Kleckner} 1396c7e78746e059916892f1df279b681d962a70954Hans Wennborg 1406c7e78746e059916892f1df279b681d962a70954Hans WennborgTEST(Option, ParseAliasInGroup) { 1416c7e78746e059916892f1df279b681d962a70954Hans Wennborg TestOptTable T; 1426c7e78746e059916892f1df279b681d962a70954Hans Wennborg unsigned MAI, MAC; 1436c7e78746e059916892f1df279b681d962a70954Hans Wennborg 1446c7e78746e059916892f1df279b681d962a70954Hans Wennborg const char *MyArgs[] = { "-I" }; 14536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 146dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(MyArgs), std::end(MyArgs), MAI, MAC)); 1476c7e78746e059916892f1df279b681d962a70954Hans Wennborg EXPECT_TRUE(AL->hasArg(OPT_H)); 1486c7e78746e059916892f1df279b681d962a70954Hans Wennborg} 1499dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg 1509dd8c0cffe7de82900823c05159bba765120f1e3Hans WennborgTEST(Option, AliasArgs) { 1519dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg TestOptTable T; 1529dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg unsigned MAI, MAC; 1539dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg 1549dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg const char *MyArgs[] = { "-J", "-Joo" }; 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 156dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(MyArgs), std::end(MyArgs), MAI, MAC)); 1579dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg EXPECT_TRUE(AL->hasArg(OPT_B)); 1589dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_B)[0], "foo"); 1599dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_B)[1], "bar"); 1609dd8c0cffe7de82900823c05159bba765120f1e3Hans Wennborg} 1616bf104b165cec9c14dacf10bf3380eeb32c278d7Hans Wennborg 1622957273b888dabe8be8e2fa5ac691e39879685c4Rui UeyamaTEST(Option, IgnoreCase) { 1632957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama TestOptTable T(true); 1642957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama unsigned MAI, MAC; 1652957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama 1662957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama const char *MyArgs[] = { "-a", "-joo" }; 16736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 168dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(MyArgs), std::end(MyArgs), MAI, MAC)); 1692957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama EXPECT_TRUE(AL->hasArg(OPT_A)); 1702957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama EXPECT_TRUE(AL->hasArg(OPT_B)); 1712957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama} 1722957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama 1732957273b888dabe8be8e2fa5ac691e39879685c4Rui UeyamaTEST(Option, DoNotIgnoreCase) { 1742957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama TestOptTable T; 1752957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama unsigned MAI, MAC; 1762957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama 1772957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama const char *MyArgs[] = { "-a", "-joo" }; 17836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 179dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(MyArgs), std::end(MyArgs), MAI, MAC)); 1802957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama EXPECT_FALSE(AL->hasArg(OPT_A)); 1812957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama EXPECT_FALSE(AL->hasArg(OPT_B)); 1822957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama} 1832957273b888dabe8be8e2fa5ac691e39879685c4Rui Ueyama 184af9e3557552c341615052a05d4eeb36d7fd5c33fHans WennborgTEST(Option, SlurpEmpty) { 185af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg TestOptTable T; 186af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg unsigned MAI, MAC; 187af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg 188af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg const char *MyArgs[] = { "-A", "-slurp" }; 18936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 190dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(MyArgs), std::end(MyArgs), MAI, MAC)); 191af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_TRUE(AL->hasArg(OPT_A)); 192af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_TRUE(AL->hasArg(OPT_Slurp)); 193b06ccefc910a32564cb55aaf6fe265182293bfaaHans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_Slurp).size(), 0U); 194af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg} 195af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg 196af9e3557552c341615052a05d4eeb36d7fd5c33fHans WennborgTEST(Option, Slurp) { 197af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg TestOptTable T; 198af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg unsigned MAI, MAC; 199af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg 200af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg const char *MyArgs[] = { "-A", "-slurp", "-B", "--", "foo" }; 20136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines std::unique_ptr<InputArgList> AL( 202dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines T.ParseArgs(std::begin(MyArgs), std::end(MyArgs), MAI, MAC)); 203af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_EQ(AL->size(), 2U); 204af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_TRUE(AL->hasArg(OPT_A)); 205af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_FALSE(AL->hasArg(OPT_B)); 206af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_TRUE(AL->hasArg(OPT_Slurp)); 207af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_Slurp).size(), 3U); 208af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_Slurp)[0], "-B"); 209af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_Slurp)[1], "--"); 210af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg EXPECT_EQ(AL->getAllArgValues(OPT_Slurp)[2], "foo"); 211af9e3557552c341615052a05d4eeb36d7fd5c33fHans Wennborg} 212