New GetArg features: allow --, and booleans can be -foo or -nofoo
This commit is contained in:
parent
3ae0735553
commit
3ad9f8a70f
2 changed files with 100 additions and 0 deletions
|
@ -47,6 +47,44 @@ BOOST_AUTO_TEST_CASE(boolarg)
|
||||||
BOOST_CHECK(GetBoolArg("-foo"));
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
BOOST_CHECK(GetBoolArg("-foo", false));
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
BOOST_CHECK(GetBoolArg("-foo", true));
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
// New 0.6 feature: auto-map -nosomething to !-something:
|
||||||
|
ResetArgs("-nofoo");
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
ResetArgs("-nofoo=1");
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
ResetArgs("-foo -nofoo"); // -foo should win
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
ResetArgs("-foo=1 -nofoo=1"); // -foo should win
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
ResetArgs("-foo=0 -nofoo=0"); // -foo should win
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
// New 0.6 feature: treat -- same as -:
|
||||||
|
ResetArgs("--foo=1");
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
ResetArgs("--nofoo=1");
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(stringarg)
|
BOOST_AUTO_TEST_CASE(stringarg)
|
||||||
|
@ -92,4 +130,38 @@ BOOST_AUTO_TEST_CASE(intarg)
|
||||||
BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0);
|
BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(doubledash)
|
||||||
|
{
|
||||||
|
ResetArgs("--foo");
|
||||||
|
BOOST_CHECK_EQUAL(GetBoolArg("-foo"), true);
|
||||||
|
|
||||||
|
ResetArgs("--foo=verbose --bar=1");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", ""), "verbose");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-bar", 0), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(boolargno)
|
||||||
|
{
|
||||||
|
ResetArgs("-nofoo");
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
|
||||||
|
ResetArgs("-nofoo=1");
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
|
||||||
|
ResetArgs("-nofoo=0");
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
|
|
||||||
|
ResetArgs("-foo --nofoo");
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
|
||||||
|
ResetArgs("-nofoo -foo"); // foo always wins:
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
28
src/util.cpp
28
src/util.cpp
|
@ -475,9 +475,37 @@ void ParseParameters(int argc, const char*const argv[])
|
||||||
#endif
|
#endif
|
||||||
if (psz[0] != '-')
|
if (psz[0] != '-')
|
||||||
break;
|
break;
|
||||||
|
|
||||||
mapArgs[psz] = pszValue;
|
mapArgs[psz] = pszValue;
|
||||||
mapMultiArgs[psz].push_back(pszValue);
|
mapMultiArgs[psz].push_back(pszValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New 0.6 features:
|
||||||
|
BOOST_FOREACH(const PAIRTYPE(string,string)& entry, mapArgs)
|
||||||
|
{
|
||||||
|
string name = entry.first;
|
||||||
|
|
||||||
|
// interpret --foo as -foo (as long as both are not set)
|
||||||
|
if (name.find("--") == 0)
|
||||||
|
{
|
||||||
|
std::string singleDash(name.begin()+1, name.end());
|
||||||
|
if (mapArgs.count(singleDash) == 0)
|
||||||
|
mapArgs[singleDash] = entry.second;
|
||||||
|
name = singleDash;
|
||||||
|
}
|
||||||
|
|
||||||
|
// interpret -nofoo as -foo=0 (and -nofoo=0 as -foo=1, as long as -foo not set)
|
||||||
|
if (name.find("-no") == 0)
|
||||||
|
{
|
||||||
|
std::string positive("-");
|
||||||
|
positive.append(name.begin()+3, name.end());
|
||||||
|
if (mapArgs.count(positive) == 0)
|
||||||
|
{
|
||||||
|
bool value = !GetBoolArg(name);
|
||||||
|
mapArgs[positive] = (value ? "1" : "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetArg(const std::string& strArg, const std::string& strDefault)
|
std::string GetArg(const std::string& strArg, const std::string& strDefault)
|
||||||
|
|
Loading…
Reference in a new issue