mirror of
https://github.com/cuberite/TCLAP.git
synced 2025-08-04 02:06:29 -04:00
Added more unit tests and clarified difference to UnlabeledMultiArg.
This commit is contained in:
parent
634cbb01f5
commit
a910939b9a
@ -708,8 +708,13 @@ By default, if <span class="emphasis"><em>TCLAP</em></span> sees an argument tha
|
||||
match a specified <code class="classname">Arg</code>, it will produce an exception.
|
||||
This strict handling provides some assurance that all input to a program
|
||||
is controlled. However, there are times when
|
||||
this strict handling of arguments might not be desirable. The alternative
|
||||
that <span class="emphasis"><em>TCLAP</em></span> provides is to simply ignore any unmatched
|
||||
this strict handling of arguments might not be desirable.
|
||||
<span class="emphasis"><em>TCLAP</em></span> provides two alternatives. The first is to
|
||||
add an <code class="classname">UnlabeledMultiArg</code> to the command line. If
|
||||
this is done, all unmatched arguments will get added to this arg.
|
||||
|
||||
The second option is that
|
||||
that <span class="emphasis"><em>TCLAP</em></span> can simply ignore any unmatched
|
||||
arguments on the command line. This is accomplished by calling the
|
||||
<code class="methodname">ignoreUnmatched</code> method with
|
||||
<em class="parameter"><code>true</code></em> on the
|
||||
@ -744,6 +749,11 @@ The program would succeed and the name <code class="classname">ValueArg</code>
|
||||
would be populated with "Mike" but
|
||||
the strings "something", "to", and "ignore" would simply be ignored by the
|
||||
parser.
|
||||
</p><p>
|
||||
<span class="emphasis"><em>NOTE:</em></span> If both <code class="methodname">ignoreUnmatched</code>
|
||||
is set to true and an <code class="classname">UnlabeledMultiArg</code> is added to
|
||||
the command line, then the <code class="classname">UnlabeledMultiArg</code> will
|
||||
"win" and all extra arguments will be added to it rather than be ignored.
|
||||
</p></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="READING_HEX_INTEGERS"></a>I want to read hex integers as arguments...</h2></div></div></div><p>
|
||||
Sometimes it's desirable to read integers formatted in decimal, hexadecimal,
|
||||
and octal format. This is now possible by #defining the <em class="parameter"><code>TCLAP_SETBASE_ZERO</code></em>
|
||||
|
@ -910,8 +910,13 @@ By default, if <emphasis>TCLAP</emphasis> sees an argument that doesn't
|
||||
match a specified <classname>Arg</classname>, it will produce an exception.
|
||||
This strict handling provides some assurance that all input to a program
|
||||
is controlled. However, there are times when
|
||||
this strict handling of arguments might not be desirable. The alternative
|
||||
that <emphasis>TCLAP</emphasis> provides is to simply ignore any unmatched
|
||||
this strict handling of arguments might not be desirable.
|
||||
<emphasis>TCLAP</emphasis> provides two alternatives. The first is to
|
||||
add an <classname>UnlabeledMultiArg</classname> to the command line. If
|
||||
this is done, all unmatched arguments will get added to this arg.
|
||||
|
||||
The second option is that
|
||||
that <emphasis>TCLAP</emphasis> can simply ignore any unmatched
|
||||
arguments on the command line. This is accomplished by calling the
|
||||
<methodname>ignoreUnmatched</methodname> method with
|
||||
<parameter>true</parameter> on the
|
||||
@ -947,6 +952,12 @@ would be populated with "Mike" but
|
||||
the strings "something", "to", and "ignore" would simply be ignored by the
|
||||
parser.
|
||||
</para>
|
||||
<para>
|
||||
<emphasis>NOTE:</emphasis> If both <methodname>ignoreUnmatched</methodname>
|
||||
is set to true and an <classname>UnlabeledMultiArg</classname> is added to
|
||||
the command line, then the <classname>UnlabeledMultiArg</classname> will
|
||||
"win" and all extra arguments will be added to it rather than be ignored.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="READING_HEX_INTEGERS">
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
noinst_PROGRAMS = test1 test2 test3 test4 test5 test6 test7 test8 test9 \
|
||||
test10 test11 test12 test13 test14 test15 test16 \
|
||||
test17 test18 test19 test20 test21 test22
|
||||
test17 test18 test19 test20 test21 test22 test23
|
||||
|
||||
test1_SOURCES = test1.cpp
|
||||
test2_SOURCES = test2.cpp
|
||||
@ -25,6 +25,7 @@ test19_SOURCES = test19.cpp
|
||||
test20_SOURCES = test20.cpp
|
||||
test21_SOURCES = test21.cpp
|
||||
test22_SOURCES = test22.cpp
|
||||
test23_SOURCES = test23.cpp
|
||||
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
|
80
examples/test23.cpp
Normal file
80
examples/test23.cpp
Normal file
@ -0,0 +1,80 @@
|
||||
|
||||
|
||||
#include "tclap/CmdLine.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace TCLAP;
|
||||
using namespace std;
|
||||
|
||||
bool _boolTestB;
|
||||
string _stringTest;
|
||||
string _utest;
|
||||
string _ztest;
|
||||
|
||||
void parseOptions(int argc, char** argv);
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
|
||||
parseOptions(argc,argv);
|
||||
|
||||
cout << "for string we got : " << _stringTest<< endl
|
||||
<< "for bool B we got : " << _boolTestB << endl;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void parseOptions(int argc, char** argv)
|
||||
{
|
||||
try {
|
||||
|
||||
CmdLine cmd("this is a message", '=', "0.99" );
|
||||
cmd.ignoreUnmatched(true);
|
||||
|
||||
//
|
||||
// Define arguments
|
||||
//
|
||||
|
||||
SwitchArg btest("B","existTestB", "exist Test B", cmd, false);
|
||||
|
||||
ValueArg<string> stest("s", "stringTest", "string test", true, "homer",
|
||||
"string", cmd );
|
||||
|
||||
MultiArg<int> itest("i", "intTest", "multi int test", false,"int", cmd );
|
||||
|
||||
MultiArg<float> ftest("f", "floatTest", "multi float test", false,"float",
|
||||
cmd );
|
||||
|
||||
UnlabeledMultiArg<string> mtest("fileName","file names", false,
|
||||
"fileNameString", cmd);
|
||||
//
|
||||
// Parse the command line.
|
||||
//
|
||||
cmd.parse(argc,argv);
|
||||
|
||||
|
||||
//
|
||||
// Set variables
|
||||
//
|
||||
_stringTest = stest.getValue();
|
||||
_boolTestB = btest.getValue();
|
||||
|
||||
vector<int> vi = itest.getValue();
|
||||
for ( int i = 0; static_cast<unsigned int>(i) < vi.size(); i++ )
|
||||
cout << "[-i] " << i << " " << vi[i] << endl;
|
||||
|
||||
vector<float> vf = ftest.getValue();
|
||||
for ( int i = 0; static_cast<unsigned int>(i) < vf.size(); i++ )
|
||||
cout << "[-f] " << i << " " << vf[i] << endl;
|
||||
|
||||
vector<string> v = mtest.getValue();
|
||||
for ( int i = 0; static_cast<unsigned int>(i) < v.size(); i++ )
|
||||
cout << "[ ] " << i << " " << v[i] << endl;
|
||||
|
||||
} catch ( ArgException& e )
|
||||
{ cout << "ERROR: " << e.error() << " " << e.argId() << endl; }
|
||||
}
|
||||
|
||||
|
||||
|
@ -79,7 +79,9 @@ TESTS = test1.sh \
|
||||
test77.sh \
|
||||
test78.sh \
|
||||
test79.sh \
|
||||
test80.sh
|
||||
test80.sh \
|
||||
test81.sh \
|
||||
test82.sh
|
||||
|
||||
EXTRA_DIST = $(TESTS) \
|
||||
test1.out \
|
||||
@ -161,6 +163,8 @@ EXTRA_DIST = $(TESTS) \
|
||||
test77.out \
|
||||
test78.out \
|
||||
test79.out \
|
||||
test80.out
|
||||
test80.out \
|
||||
test81.out \
|
||||
test82.out
|
||||
|
||||
CLEANFILES = tmp.out
|
||||
|
9
tests/test81.out
Normal file
9
tests/test81.out
Normal file
@ -0,0 +1,9 @@
|
||||
PARSE ERROR:
|
||||
Required argument missing: name
|
||||
|
||||
Brief USAGE:
|
||||
../examples/test22 [-r] -n <string> [--] [--version] [-h]
|
||||
|
||||
For complete USAGE and HELP type:
|
||||
../examples/test22 --help
|
||||
|
11
tests/test81.sh
Executable file
11
tests/test81.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
# failure, still looking for -n
|
||||
../examples/test22 asdf asdf -r fds xxx > tmp.out 2>&1
|
||||
|
||||
if cmp -s tmp.out $srcdir/test81.out; then
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
9
tests/test82.out
Normal file
9
tests/test82.out
Normal file
@ -0,0 +1,9 @@
|
||||
[-i] 0 9
|
||||
[-i] 1 8
|
||||
[ ] 0 blah
|
||||
[ ] 1 --blah
|
||||
[ ] 2 homer
|
||||
[ ] 3 marge
|
||||
[ ] 4 bart
|
||||
for string we got : bill
|
||||
for bool B we got : 1
|
11
tests/test82.sh
Executable file
11
tests/test82.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
# success - all unmatched args get slurped up in the UnlabeledMultiArg
|
||||
../examples/test23 blah --blah -s=bill -i=9 -i=8 -B homer marge bart > tmp.out 2>&1
|
||||
|
||||
if cmp -s tmp.out $srcdir/test82.out; then
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user