Skip empty args
This commit is contained in:
parent
8bcf8cd008
commit
e6dfe28149
|
@ -454,6 +454,11 @@ void ArgumentParser::readSpecifiedArgs(ArgumentVector &args, std::size_t &index,
|
||||||
} else {
|
} else {
|
||||||
// determine denotation type
|
// determine denotation type
|
||||||
const char *argDenotation = *argv;
|
const char *argDenotation = *argv;
|
||||||
|
if(!*argDenotation && (!lastArg || values->size() >= lastArg->requiredValueCount())) {
|
||||||
|
// skip empty arguments
|
||||||
|
++index, ++argv;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
bool abbreviationFound = false;
|
bool abbreviationFound = false;
|
||||||
unsigned char argDenotationType = Value;
|
unsigned char argDenotationType = Value;
|
||||||
*argDenotation == '-' && (++argDenotation, ++argDenotationType)
|
*argDenotation == '-' && (++argDenotation, ++argDenotationType)
|
||||||
|
|
|
@ -126,10 +126,10 @@ void ArgumentParserTests::testParsing()
|
||||||
CPPUNIT_ASSERT_THROW(displayTagInfoArg.values().at(3), out_of_range);
|
CPPUNIT_ASSERT_THROW(displayTagInfoArg.values().at(3), out_of_range);
|
||||||
|
|
||||||
// define the same arguments in a different way
|
// define the same arguments in a different way
|
||||||
const char *argv2[] = {"tageditor", "-p", "album", "title", "diskpos", "--file", "somefile"};
|
const char *argv2[] = {"tageditor", "", "-p", "album", "title", "diskpos", "", "--file", "somefile"};
|
||||||
// reparse the args
|
// reparse the args
|
||||||
displayTagInfoArg.reset(), fieldsArg.reset(), filesArg.reset();
|
displayTagInfoArg.reset(), fieldsArg.reset(), filesArg.reset();
|
||||||
parser.parseArgs(7, argv2);
|
parser.parseArgs(9, argv2);
|
||||||
// check results again
|
// check results again
|
||||||
CPPUNIT_ASSERT(!qtConfigArgs.qtWidgetsGuiArg().isPresent());
|
CPPUNIT_ASSERT(!qtConfigArgs.qtWidgetsGuiArg().isPresent());
|
||||||
CPPUNIT_ASSERT(!displayFileInfoArg.isPresent());
|
CPPUNIT_ASSERT(!displayFileInfoArg.isPresent());
|
||||||
|
@ -139,7 +139,8 @@ void ArgumentParserTests::testParsing()
|
||||||
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(0), "album"));
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(0), "album"));
|
||||||
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(1), "title"));
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(1), "title"));
|
||||||
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(2), "diskpos"));
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(2), "diskpos"));
|
||||||
CPPUNIT_ASSERT_THROW(displayTagInfoArg.values().at(3), out_of_range);
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(3), ""));
|
||||||
|
CPPUNIT_ASSERT_THROW(fieldsArg.values().at(4), out_of_range);
|
||||||
CPPUNIT_ASSERT(filesArg.isPresent());
|
CPPUNIT_ASSERT(filesArg.isPresent());
|
||||||
CPPUNIT_ASSERT(!strcmp(filesArg.values().at(0), "somefile"));
|
CPPUNIT_ASSERT(!strcmp(filesArg.values().at(0), "somefile"));
|
||||||
|
|
||||||
|
@ -259,7 +260,7 @@ void ArgumentParserTests::testParsing()
|
||||||
qtConfigArgs.qtWidgetsGuiArg().reset();
|
qtConfigArgs.qtWidgetsGuiArg().reset();
|
||||||
fieldsArg.setRequiredValueCount(3);
|
fieldsArg.setRequiredValueCount(3);
|
||||||
verboseArg.setRequired(false);
|
verboseArg.setRequired(false);
|
||||||
parser.parseArgs(7, argv2);
|
parser.parseArgs(9, argv2);
|
||||||
// this should still work without complaints
|
// this should still work without complaints
|
||||||
CPPUNIT_ASSERT(!qtConfigArgs.qtWidgetsGuiArg().isPresent());
|
CPPUNIT_ASSERT(!qtConfigArgs.qtWidgetsGuiArg().isPresent());
|
||||||
CPPUNIT_ASSERT(!displayFileInfoArg.isPresent());
|
CPPUNIT_ASSERT(!displayFileInfoArg.isPresent());
|
||||||
|
@ -269,7 +270,7 @@ void ArgumentParserTests::testParsing()
|
||||||
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(0), "album"));
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(0), "album"));
|
||||||
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(1), "title"));
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(1), "title"));
|
||||||
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(2), "diskpos"));
|
CPPUNIT_ASSERT(!strcmp(fieldsArg.values().at(2), "diskpos"));
|
||||||
CPPUNIT_ASSERT_THROW(displayTagInfoArg.values().at(3), out_of_range);
|
CPPUNIT_ASSERT_THROW(fieldsArg.values().at(3), out_of_range);
|
||||||
CPPUNIT_ASSERT(filesArg.isPresent());
|
CPPUNIT_ASSERT(filesArg.isPresent());
|
||||||
CPPUNIT_ASSERT(!strcmp(filesArg.values().at(0), "somefile"));
|
CPPUNIT_ASSERT(!strcmp(filesArg.values().at(0), "somefile"));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue