diff options
author | Evgeny Mankov <evgeny.mankov@gmail.com> | 2017-08-28 13:39:43 +0000 |
---|---|---|
committer | Evgeny Mankov <evgeny.mankov@gmail.com> | 2017-08-28 13:39:43 +0000 |
commit | 1587086f88b1dd10b8e35841b20235b7ca49ccb9 (patch) | |
tree | f303e00750f06655344856919ecf6095e829bf7f /llvm/unittests/Support/CommandLineTest.cpp | |
parent | 595c644f8467583d23922114f32faefa513febaa (diff) | |
download | llvm-1587086f88b1dd10b8e35841b20235b7ca49ccb9.zip llvm-1587086f88b1dd10b8e35841b20235b7ca49ccb9.tar.gz llvm-1587086f88b1dd10b8e35841b20235b7ca49ccb9.tar.bz2 |
[Support][CommandLine] Add cl::Option::setDefault()
Add abstract virtual method setDefault() to class Option and implement it in its inheritors in order to be able to set all the options to its default values in user's code without actually knowing all these options. For instance:
for (auto &OM : cl::getRegisteredOptions(*cl::TopLevelSubCommand)) {
cl::Option *O = OM.second;
O->setDefault();
}
Reviewed by: rampitec, Eugene.Zelenko, kasaurov
Differential Revision: http://reviews.llvm.org/D36877
llvm-svn: 311887
Diffstat (limited to 'llvm/unittests/Support/CommandLineTest.cpp')
-rw-r--r-- | llvm/unittests/Support/CommandLineTest.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp index 660df11..1fb0213 100644 --- a/llvm/unittests/Support/CommandLineTest.cpp +++ b/llvm/unittests/Support/CommandLineTest.cpp @@ -613,4 +613,39 @@ TEST(CommandLineTest, ResponseFiles) { llvm::sys::fs::remove(TestDir); } +TEST(CommandLineTest, SetDefautValue) { + cl::ResetCommandLineParser(); + + StackOption<std::string> Opt1("opt1", cl::init("true")); + StackOption<bool> Opt2("opt2", cl::init(true)); + cl::alias Alias("alias", llvm::cl::aliasopt(Opt2)); + StackOption<int> Opt3("opt3", cl::init(3)); + + const char *args[] = {"prog", "-opt1=false", "-opt2", "-opt3"}; + + EXPECT_TRUE( + cl::ParseCommandLineOptions(2, args, StringRef(), &llvm::nulls())); + + EXPECT_TRUE(Opt1 == "false"); + EXPECT_TRUE(Opt2); + EXPECT_TRUE(Opt3 == 3); + + Opt2 = false; + Opt3 = 1; + + cl::ResetAllOptionOccurrences(); + + for (auto &OM : cl::getRegisteredOptions(*cl::TopLevelSubCommand)) { + cl::Option *O = OM.second; + if (O->ArgStr == "opt2") { + continue; + } + O->setDefault(); + } + + EXPECT_TRUE(Opt1 == "true"); + EXPECT_TRUE(Opt2); + EXPECT_TRUE(Opt3 == 3); +} + } // anonymous namespace |