From e6dfe28149dee4caa3d3e8423781b2e3a51a1d9c Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 23 Jun 2016 22:06:59 +0200 Subject: [PATCH] Skip empty args --- application/argumentparser.cpp | 5 +++++ tests/argumentparsertests.cpp | 11 ++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/application/argumentparser.cpp b/application/argumentparser.cpp index d27bfdd..217a97b 100644 --- a/application/argumentparser.cpp +++ b/application/argumentparser.cpp @@ -454,6 +454,11 @@ void ArgumentParser::readSpecifiedArgs(ArgumentVector &args, std::size_t &index, } else { // determine denotation type const char *argDenotation = *argv; + if(!*argDenotation && (!lastArg || values->size() >= lastArg->requiredValueCount())) { + // skip empty arguments + ++index, ++argv; + continue; + } bool abbreviationFound = false; unsigned char argDenotationType = Value; *argDenotation == '-' && (++argDenotation, ++argDenotationType) diff --git a/tests/argumentparsertests.cpp b/tests/argumentparsertests.cpp index bb36df2..f521c41 100644 --- a/tests/argumentparsertests.cpp +++ b/tests/argumentparsertests.cpp @@ -126,10 +126,10 @@ void ArgumentParserTests::testParsing() CPPUNIT_ASSERT_THROW(displayTagInfoArg.values().at(3), out_of_range); // 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 displayTagInfoArg.reset(), fieldsArg.reset(), filesArg.reset(); - parser.parseArgs(7, argv2); + parser.parseArgs(9, argv2); // check results again CPPUNIT_ASSERT(!qtConfigArgs.qtWidgetsGuiArg().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(1), "title")); 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(!strcmp(filesArg.values().at(0), "somefile")); @@ -259,7 +260,7 @@ void ArgumentParserTests::testParsing() qtConfigArgs.qtWidgetsGuiArg().reset(); fieldsArg.setRequiredValueCount(3); verboseArg.setRequired(false); - parser.parseArgs(7, argv2); + parser.parseArgs(9, argv2); // this should still work without complaints CPPUNIT_ASSERT(!qtConfigArgs.qtWidgetsGuiArg().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(1), "title")); 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(!strcmp(filesArg.values().at(0), "somefile"));