123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831 |
- /*=========================================================================
- Library: CTK
- Copyright (c) Kitware Inc.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0.txt
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- =========================================================================*/
- // Qt includes
- #include <QDebug>
- #include <QSettings>
- // CTK includes
- #include "ctkCommandLineParser.h"
- // STD includes
- #include <cstdlib>
- int ctkCommandLineParserTest1(int, char*[])
- {
- // Test1 - Check if unparsedArguments() worked as expected
- QStringList arguments1;
- arguments1 << "ctkCommandLineParserTest1";
- arguments1 << "--test-bool";
- arguments1 << "--test-string";
- arguments1 << "ctkrocks";
- ctkCommandLineParser parser1;
- bool ok = false;
- parser1.parseArguments(arguments1, &ok);
- if (!ok)
- {
- qCritical() << "Test1 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- QStringList expectedUnparsedArguments1;
- expectedUnparsedArguments1 << "--test-bool" << "--test-string" << "ctkrocks";
- if (parser1.unparsedArguments() != expectedUnparsedArguments1)
- {
- qCritical() << "unparsedArguments:" << parser1.unparsedArguments();
- qCritical() << "expectedUnparsedArguments1:" << expectedUnparsedArguments1;
- return EXIT_FAILURE;
- }
- // Test2 - Check if addArgument() for a boolean workes as expected
- QStringList arguments2;
- arguments2 << "ctkCommandLineParserTest1";
- arguments2 << "--test-bool";
- arguments2 << "--test-string";
- arguments2 << "ctkrocks";
- ctkCommandLineParser parser2;
- parser2.addArgument("--test-bool", "", QVariant::Bool, "This is a test bool", false);
- ok = false;
- QHash<QString, QVariant> parsedArgs = parser2.parseArguments(arguments2, &ok);
- if (!ok)
- {
- qCritical() << "Test2 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- QStringList expectedUnparsedArguments2;
- expectedUnparsedArguments2 << "--test-string" << "ctkrocks";
- if (parser2.unparsedArguments() != expectedUnparsedArguments2)
- {
- qCritical() << "Test2 - Failed - unparsedArguments:" << parser2.unparsedArguments()
- << ", expectedUnparsedArguments2:" << expectedUnparsedArguments2;
- return EXIT_FAILURE;
- }
- if (parsedArgs["--test-bool"].isNull() || !parsedArgs["--test-bool"].toBool())
- {
- qCritical() << "Test2 - Failed to parse --test-bool";
- return EXIT_FAILURE;
- }
- // Test3 - check if adding QString, int, double, and QStringList arguments works
- QStringList arguments3;
- arguments3 << "ctkCommandLineParserTest1";
- arguments3 << "--test-string" << "TestingIsGood";
- arguments3 << "--test-string2"<< "CTKSuperRocks";
- arguments3 << "--test-integer"<< "-3";
- // arguments3 << "--test-double"<< "-3.14";
- arguments3 << "--test-stringlist"<< "item1" << "item2" << "item3";
- ctkCommandLineParser parser3;
- parser3.addArgument("--test-string", "", QVariant::String, "This is a test string");
- parser3.addArgument("--test-string2", "", QVariant::String, "This is a test string2", "CTKGood");
- parser3.addArgument("--test-integer", "", QVariant::Int, "This is a test integer");
- // parser3.addArgument("--test-double", "", QVariant::Double, "This is a test double");
- parser3.addArgument("--test-stringlist", "", QVariant::StringList,
- "This is a test stringlist");
- ok = false;
- parsedArgs = parser3.parseArguments(arguments3, &ok);
- if (!ok)
- {
- qCritical() << "Test3 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- QString expectedTestString = "TestingIsGood";
- if (parsedArgs["--test-string"].toString() != expectedTestString)
- {
- qCritical() << "Test3 - Failed - testString" << parsedArgs["--test-string"].toString()
- << ", expectedTestString" << expectedTestString;
- return EXIT_FAILURE;
- }
- QString expectedTestString2 = "CTKSuperRocks";
- if (parsedArgs["--test-string2"].toString() != expectedTestString2)
- {
- qCritical() << "Test3 - Failed - testString2" << parsedArgs["--test-string2"].toString()
- << ", expectedTestString2" << expectedTestString2;
- return EXIT_FAILURE;
- }
- int expectedTestInteger = -3;
- if (parsedArgs["--test-integer"].toInt() != expectedTestInteger)
- {
- qCritical() << "Test3 - Failed - testInteger" << parsedArgs["--test-integer"].toInt()
- << ", expectedTestInteger" << expectedTestInteger;
- return EXIT_FAILURE;
- }
- //double expectedTestDouble = -3.14;
- //if (parsedArgs["--test-double"].toDouble() != expectedTestDouble)
- // {
- // qCritical() << "Test3 - Failed - testDouble" << parsedArgs["--test-double"].toDouble()
- // << ", expectedTestDouble" << expectedTestDouble;
- // return EXIT_FAILURE;
- // }
- QStringList expectedTestStringlist;
- expectedTestStringlist << "item1" << "item2" << "item3";
- if (parsedArgs["--test-stringlist"].toStringList() != expectedTestStringlist)
- {
- qCritical() << "Test3 - Failed - testStringlist" << parsedArgs["--test-stringlist"].toStringList()
- << ", expectedTestStringlist" << expectedTestStringlist;
- return EXIT_FAILURE;
- }
- // Test4 - check if helpText() works as expected
- ctkCommandLineParser parser4;
- parser4.addArgument("--help-string", "", QVariant::String, "This is an help string");
- parser4.addArgument("--help-string-med", "", QVariant::String, "");
- parser4.addArgument("--help-string-long", "-hs2", QVariant::String, "This is an help string too !");
- parser4.addArgument("", "-hs3", QVariant::String, "This is an help string too for sure !?");
- QString expectedHelpString;
- QTextStream streamExpectedHelpString(&expectedHelpString);
- streamExpectedHelpString << " --help-string..............This is an help string\n"
- << " --help-string-med\n"
- << " -hs2, --help-string-long...This is an help string too !\n"
- << " -hs3.......................This is an help string too for sure !?\n";
- if (expectedHelpString != parser4.helpText('.'))
- {
- qCritical() << "Test4 - Problem with helpText('.') - helpText:\n" << parser4.helpText('.')
- << ", expectedHelpString:\n" << expectedHelpString;
- return EXIT_FAILURE;
- }
- QString expectedHelpString2;
- QTextStream streamExpectedHelpString2(&expectedHelpString2);
- streamExpectedHelpString2 << " --help-string This is an help string\n"
- << " --help-string-med\n"
- << " -hs2, --help-string-long This is an help string too !\n"
- << " -hs3 This is an help string too for sure !?\n";
- if (expectedHelpString2 != parser4.helpText())
- {
- qCritical() << "Test4 - Problem with helpText() - helpText:\n" << parser4.helpText()
- << ", expectedHelpString2:\n" << expectedHelpString2;
- return EXIT_FAILURE;
- }
- // Test5 - check if setExactMatchRegularExpression() works as expected
- ctkCommandLineParser parser5;
- if (parser5.setExactMatchRegularExpression("--unknown",".*", "invalid"))
- {
- qCritical() << "Test5 - Problem with setExactMatchRegularExpression(shortOrLongArg) - "
- "The function should return false if an invalid argument is passed";
- return EXIT_FAILURE;
- }
- parser5.addArgument("--list", "", QVariant::StringList, "Test5 list");
- if (!parser5.setExactMatchRegularExpression("--list","item[0-9]",
- "Element of the form item[0-9] are expected."))
- {
- qCritical() << "Test5 - Problem with setExactMatchRegularExpression(StringListArg)";
- return EXIT_FAILURE;
- }
- parser5.addArgument("--string", "", QVariant::String, "Test5 string");
- if (!parser5.setExactMatchRegularExpression("--string","ctkStop|ctkStart",
- "ctkStop or ctkStart is expected."))
- {
- qCritical() << "Test5 - Problem with setExactMatchRegularExpression(StringArg)";
- return EXIT_FAILURE;
- }
- parser5.addArgument("--bool", "", QVariant::Bool, "Test5 bool");
- if (parser5.setExactMatchRegularExpression("--bool",".*", "invalid"))
- {
- qCritical() << "Test5 - Problem with setExactMatchRegularExpression(BooleanArg) - "
- "The function should return false if a boolean argument is passed";
- return EXIT_FAILURE;
- }
- parser5.addArgument("--int", "", QVariant::Int, "Test5 int");
- if (!parser5.setExactMatchRegularExpression("--int","[1-3]",
- "Value 1, 2 or 3 is expected."))
- {
- qCritical() << "Test5 - Problem with setExactMatchRegularExpression(IntegerArg)";
- return EXIT_FAILURE;
- }
- QStringList arguments5;
- arguments5 << "ctkCommandLineParserTest1";
- arguments5 << "--string"<< "ctkStop";
- arguments5 << "--int"<< "2";
- arguments5 << "--list"<< "item2" << "item3";
-
- ok = false;
- parser5.parseArguments(arguments5, &ok);
- if (!ok)
- {
- qCritical() << "Test5 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- arguments5.clear();
- arguments5 << "ctkCommandLineParserTest1";
- arguments5 << "--string"<< "ctkStopp";
- arguments5 << "--int"<< "2";
- arguments5 << "--list"<< "item2" << "item3";
- ok = false;
- parser5.parseArguments(arguments5, &ok);
- if (ok)
- {
- qCritical() << "Test5 - parseArguments() should return False - 'ctkStopp' isn't a valid string";
- return EXIT_FAILURE;
- }
- QString expectedErrorString =
- "Value(s) associated with argument --string are incorrect."
- " ctkStop or ctkStart is expected.";
- if(expectedErrorString != parser5.errorString())
- {
- qCritical() << "Test5 - Failed - expectedErrorString" << expectedErrorString
- << ", parser5.errorString()" << parser5.errorString();
- return EXIT_FAILURE;
- }
- arguments5.clear();
- arguments5 << "ctkCommandLineParserTest1";
- arguments5 << "--string"<< "ctkStop";
- arguments5 << "--int"<< "4";
- arguments5 << "--list"<< "item2" << "item3";
- ok = false;
- parser5.parseArguments(arguments5, &ok);
- if (ok)
- {
- qCritical() << "Test5 - parseArguments() should return False - '4' isn't a valid int";
- return EXIT_FAILURE;
- }
- QString expectedErrorString2 =
- "Value(s) associated with argument --int are incorrect."
- " Value 1, 2 or 3 is expected.";
- if(expectedErrorString2 != parser5.errorString())
- {
- qCritical() << "Test5 - Failed - expectedErrorString2" << expectedErrorString2
- << ", parser5.errorString()" << parser5.errorString();
- return EXIT_FAILURE;
- }
- arguments5.clear();
- arguments5 << "ctkCommandLineParserTest1";
- arguments5 << "--string"<< "ctkStop";
- arguments5 << "--int"<< "2";
- arguments5 << "--list"<< "item2" << "item10";
- ok = false;
- parser5.parseArguments(arguments5, &ok);
- if (ok)
- {
- qCritical() << "Test5 - parseArguments() should return False "
- "- 'item10' isn't a valid list element";
- return EXIT_FAILURE;
- }
- QString expectedErrorString3 =
- "Value(s) associated with argument --list are incorrect."
- " Element of the form item[0-9] are expected.";
- if(expectedErrorString3 != parser5.errorString())
- {
- qCritical() << "Test5 - Failed - expectedErrorString3" << expectedErrorString3
- << ", parser5.errorString()" << parser5.errorString();
- return EXIT_FAILURE;
- }
-
- // Test6 - Check if the parser handle the case when value of parameter is omitted
- ctkCommandLineParser parser6;
- parser6.addArgument("--string", "", QVariant::String, "This is a string");
- parser6.addArgument("--bool", "", QVariant::Bool, "This is a bool");
-
- QStringList arguments6;
- arguments6 << "ctkCommandLineParserTest1"
- << "--string";
-
- // since --string is missing a parameter, parseArgument is expected to fail
- ok = false;
- parser6.parseArguments(arguments6, &ok);
- if (ok)
- {
- qCritical() << "Test6 - Problem with parseArguments()";
- return EXIT_FAILURE;
- }
- // Expected ignore argument for Test7, 8. 9 and 10
- QStringList expectedUnparsedArguments;
- expectedUnparsedArguments << "--ignoreint"<< "2" << "--ignorelist"<< "item1" << "item2";
- // Test7 - Check if addBooleanArgument and ignore_rest=true works as expected
- ctkCommandLineParser parser7;
- bool test7Bool = false;
- parser7.addArgument("--bool", "", QVariant::Bool, "This is a boolean",
- false /*defaultValue*/, true /* ignoreRest*/);
- QStringList arguments7;
- arguments7 << "ctkCommandLineParserTest1";
- arguments7 << "--bool";
- arguments7 << expectedUnparsedArguments;
- ok = false;
- parsedArgs = parser7.parseArguments(arguments7, &ok);
- if (!ok)
- {
- qCritical() << "Test7 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- bool expectedTest7Bool = true;
- if (parsedArgs["--bool"].toBool() != expectedTest7Bool)
- {
- qCritical() << "Test7 - Failed - test7Bool" << test7Bool
- << ", expectedTest7Bool" << expectedTest7Bool;
- return EXIT_FAILURE;
- }
- if (parser7.unparsedArguments() != expectedUnparsedArguments)
- {
- qCritical() << "Test7 - Failed - expectedUnparsedArguments " << expectedUnparsedArguments
- << ", parser7.unparsedArguments" << parser7.unparsedArguments();
- return EXIT_FAILURE;
- }
- // Test7b - Same as Test7 using
- ctkCommandLineParser parser7b;
- parser7b.setArgumentPrefix("--", "-");
- parser7b.addArgument("--bool", "-", QVariant::Bool, "This is a boolean",
- false /*defaultValue*/, true /* ignoreRest*/);
- QStringList arguments7b;
- arguments7b << "ctkCommandLineParserTest1";
- arguments7b << "--";
- arguments7b << expectedUnparsedArguments;
- ok = false;
- parsedArgs = parser7b.parseArguments(arguments7b, &ok);
- if (!ok)
- {
- qCritical() << "Test7b - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- bool expectedTest7bBool = true;
- bool test7bBool = parsedArgs["--bool"].toBool();
- if (test7bBool != expectedTest7bBool)
- {
- qCritical() << "Test7b - Failed - test7bBool" << test7bBool
- << ", expectedTest7bBool" << expectedTest7bBool;
- return EXIT_FAILURE;
- }
- if (parser7b.unparsedArguments() != expectedUnparsedArguments)
- {
- qCritical() << "Test7b - Failed - expectedUnparsedArguments " << expectedUnparsedArguments
- << ", parser7b.unparsedArguments" << parser7b.unparsedArguments();
- return EXIT_FAILURE;
- }
- // Test8 - Check if addStringArgument and ignore_rest=true works as expected
- ctkCommandLineParser parser8;
- parser8.addArgument("--string", "", QVariant::String, "This is a string",
- QString() /*defaultValue*/, true /* ignoreRest*/);
- QStringList arguments8;
- arguments8 << "ctkCommandLineParserTest1";
- arguments8 << "--string" << "ctk";
- arguments8 << expectedUnparsedArguments;
- ok = false;
- parsedArgs = parser8.parseArguments(arguments8, &ok);
- if (!ok)
- {
- qCritical() << "Test8 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- QString expectedTest8String = "ctk";
- if (parsedArgs["--string"].toString() != expectedTest8String)
- {
- qCritical() << "Test8 - Failed - test8String" << parsedArgs["--string"].toString()
- << ", expectedTest8String" << expectedTest8String;
- return EXIT_FAILURE;
- }
- if (parser8.unparsedArguments() != expectedUnparsedArguments)
- {
- qCritical() << "Test8 - Failed - expectedUnparsedArguments " << expectedUnparsedArguments
- << ", parser8.unparsedArguments" << parser8.unparsedArguments();
- return EXIT_FAILURE;
- }
- // Test9 - Check if addArgument for int and ignore_rest=true works as expected
- ctkCommandLineParser parser9;
- parser9.addArgument("--integer", "", QVariant::Int, "This is an integer",
- 0 /*defaultValue*/, true /* ignoreRest*/);
- QStringList arguments9;
- arguments9 << "ctkCommandLineParserTest1";
- arguments9 << "--integer" << "74";
- arguments9 << expectedUnparsedArguments;
- ok = false;
- parsedArgs = parser9.parseArguments(arguments9, &ok);
- if (!ok)
- {
- qCritical() << "Test9 - Failed to parse arguments";
- return EXIT_FAILURE;
- }
- int expectedTest9Int = 74;
- if (parsedArgs["--integer"].toInt() != expectedTest9Int)
- {
- qCritical() << "Test9 - Failed - test9Int" << parsedArgs["--integer"].toInt()
- << ", expectedTest9Int" << expectedTest9Int;
- return EXIT_FAILURE;
- }
- if (parser9.unparsedArguments() != expectedUnparsedArguments)
- {
- qCritical() << "Test9 - Failed - expectedUnparsedArguments " << expectedUnparsedArguments
- << ", parser9.unparsedArguments" << parser9.unparsedArguments();
- return EXIT_FAILURE;
- }
- // Test10 - Check if argumentParsed works as expected
- ctkCommandLineParser parser10;
- parser10.addArgument("--bool", "", QVariant::Bool, "This is a boolean");
- // Since parseArguments hasn't been called, argumentParsed should return False
- if(parser10.argumentParsed("--bool"))
- {
- qCritical() << "Test10 - Problem with argumentParsed() - Should return False";
- return EXIT_FAILURE;
- }
- QStringList arguments10;
- arguments10 << "ctkCommandLineParserTest1";
- arguments10 << "--bool";
- ok = false;
- parser10.parseArguments(arguments10, &ok);
- if (!ok)
- {
- qCritical() << "Test10 - Failed to parse arguments.";
- return EXIT_FAILURE;
- }
- if(parser10.argumentParsed("--bool-notadded"))
- {
- qCritical() << "Test10 - Problem with argumentParsed() - "
- "Should return False since argument '--bool-notadded' hasn't been added.";
- return EXIT_FAILURE;
- }
- if(!parser10.argumentParsed("--bool"))
- {
- qCritical() << "Test10 - Problem with argumentParsed() - Should return True";
- return EXIT_FAILURE;
- }
- // Test11 - Check if setArgumentPrefix works as expected
- ctkCommandLineParser parser11;
- parser11.setArgumentPrefix("--", "/");
- parser11.addArgument("test-string", "", QVariant::String);
- parser11.addArgument("", "i", QVariant::Int);
- QStringList arguments11;
- arguments11 << "ctkCommandLineParserTest1";
- arguments11 << "--test-string" << "Unix-style";
- arguments11 << "test-string"; // unknown argument
- arguments11 << "/i" << "5";
- ok = false;
- parsedArgs = parser11.parseArguments(arguments11, &ok);
- if (!ok)
- {
- qCritical() << "Test11 - Failed to parse arguments: " << parser11.errorString();
- return EXIT_FAILURE;
- }
- if (!parser11.unparsedArguments().contains("test-string"))
- {
- qCritical() << "Test11 - argument test-string should be unknown.";
- return EXIT_FAILURE;
- }
- if (!parser11.argumentParsed("test-string") || !parser11.argumentParsed("i"))
- {
- qCritical() << "Test11 - Problem with argumentParsed().";
- return EXIT_FAILURE;
- }
- if (parsedArgs["test-string"].toString() != "Unix-style")
- {
- qCritical() << "Test11 - Failed argument: test-string, got: " << parsedArgs["test-string"].toString()
- << ", expected: " << "Unix-style";
- return EXIT_FAILURE;
- }
- if (parsedArgs["i"].toInt() != 5)
- {
- qCritical() << "Test11 - Failed argument: i, got: " << parsedArgs["i"].toInt()
- << ", expected: " << 5;
- return EXIT_FAILURE;
- }
- // Test12 - Check if the returned hash map contains the correct entries
- ctkCommandLineParser parser12;
- parser12.addArgument("--test-list", "-l", QVariant::StringList);
- QStringList arguments12;
- arguments12 << "ctkCommandLineParserTest1";
- parsedArgs = parser12.parseArguments(arguments12);
- if (!parsedArgs.isEmpty())
- {
- qCritical() << "Test12 - Returned hash map should be empty.";
- return EXIT_FAILURE;
- }
- arguments12 << "--test-list" << "--test-list2";
- parsedArgs = parser12.parseArguments(arguments12);
- if (parsedArgs.size() != 1 || !parsedArgs.contains("--test-list"))
- {
- qCritical() << "Test12 - Returned hash map contains wrong elements.";
- return EXIT_FAILURE;
- }
- // Test13 - Check that supplying a default value works
- ctkCommandLineParser parser13;
- parser13.addArgument("", "-d", QVariant::Int, "Argument with default value", 3);
- parsedArgs = parser13.parseArguments(QStringList(), &ok);
- if (!parsedArgs.contains("-d"))
- {
- qCritical() << "Test13 - Returned hash map does not contain argument with default value.";
- return EXIT_FAILURE;
- }
- if (parsedArgs["-d"].toInt() != 3)
- {
- qCritical() << "Test13 - Returned hash map contains wrong argument parameter.";
- return EXIT_FAILURE;
- }
- // ==================== QSettings tests ====================
- QSettings settings("CommonTK","ctkCommandLineParserTest1");
- settings.setValue("long-settings-argument", 5);
- settings.setValue("s", "settings-short");
- settings.setValue("invalid", QVariant());
- // Check that QSettings worked
- if(settings.status() != QSettings::NoError)
- {
- qCritical() << "QSettings tests setup - QSettings::status() returned "
- << static_cast<int>(settings.status()) << ".";
- return EXIT_FAILURE;
- return EXIT_FAILURE;
- }
- if (settings.value("long-settings-argument") != 5)
- {
- qCritical() << "QSettings tests setup - Could not store long-settings-argument in QSettings.";
- return EXIT_FAILURE;
- }
- // Test14 - Check that QSettings are used
- ctkCommandLineParser parser14(&settings);
- parser14.setArgumentPrefix("--", "-");
- parser14.addArgument("long-settings-argument", "", QVariant::Int);
- parser14.addArgument("", "s", QVariant::String, "A short argument", "my-short");
- QStringList arguments14;
- arguments14 << "ctkCommandLineParserTest1";
- arguments14 << "-s" << "short";
- arguments14 << "unknown";
- parsedArgs = parser14.parseArguments(arguments14);
- // Check that QSettings are ignored
- if (parsedArgs.size() != 1 || parsedArgs["s"] != "short")
- {
- qCritical() << "Test14 - Parsed arguments must only contain -s short.";
- return EXIT_FAILURE;
- }
- // Now use QSettings
- parser14.enableSettings("disable-settings");
- parser14.addArgument("disable-settings", "", QVariant::Bool);
- parsedArgs = parser14.parseArguments(arguments14);
- if (!parser14.settingsEnabled())
- {
- qCritical() << "Test14 - Disabling settings failed.";
- return EXIT_FAILURE;
- }
- if (parser14.unparsedArguments().size() != 1 ||
- !parser14.unparsedArguments().contains("unknown"))
- {
- qCritical() << "Test14 - Parsing unknown arguments failed.";
- return EXIT_FAILURE;
- }
- if (parsedArgs.contains("invalid"))
- {
- qCritical() << "Test14 - Invalid QSettings value found.";
- return EXIT_FAILURE;
- }
- if (parsedArgs.size() != 2)
- {
- qCritical() << "Test14 - Wrong number of parsed arguments.";
- return EXIT_FAILURE;
- }
- if (parsedArgs["s"] != "short")
- {
- qCritical() << "Test14 - QSettings values must not overwrite user values.";
- return EXIT_FAILURE;
- }
- if (parsedArgs["long-settings-argument"].toInt() != 5)
- {
- qCritical() << "Test14 - Missing value from QSettings.";
- return EXIT_FAILURE;
- }
- arguments14.clear();
- arguments14 << "ctkCommandLineParserTest1";
- parsedArgs = parser14.parseArguments(arguments14);
- if (parsedArgs.size() != 2)
- {
- qCritical() << "Test14 - Only QSettings values corresponding to arguments must be included.";
- return EXIT_FAILURE;
- }
- if (parsedArgs["s"] != "settings-short")
- {
- qCritical() << "Test14 - QSettings value should be used as default parameter.";
- return EXIT_FAILURE;
- }
- // Disable QSettings via command line argument
- arguments14.clear();
- arguments14 << "ctkCommandLineParserTest1";
- arguments14 << "--disable-settings";
- arguments14 << "--long-settings-argument" << "12";
- parsedArgs = parser14.parseArguments(arguments14);
- if (parsedArgs["long-settings-argument"].toInt() != 12)
- {
- qCritical() << "Test14 - Wrong parameter for argument: long-settings-argument.";
- return EXIT_FAILURE;
- }
- if (parsedArgs["s"] != "my-short")
- {
- qCritical() << parsedArgs;
- qCritical() << "Test14 - Default value for argument -s not used.";
- return EXIT_FAILURE;
- }
- // Test15 - Check that merging with QSettings works
- settings.clear();
- settings.setValue("--list-argument", "z");
- ctkCommandLineParser parser15(&settings);
- parser15.enableSettings();
- parser15.addArgument("--list-argument", "", QVariant::StringList);
- QStringList arguments15;
- arguments15 << "ctkCommandLineParserTest1";
- arguments15 << "--list-argument" << "a" << "b";
- // Test with enabled merging
- ok = false;
- parsedArgs = parser15.parseArguments(arguments15, &ok);
- if (!ok)
- {
- qCritical() << "Test15 - parsing arguments failed.";
- return EXIT_FAILURE;
- }
- if (parsedArgs.contains("--list-argument"))
- {
- QStringList list = parsedArgs["--list-argument"].toStringList();
- if (list.size() != 3)
- {
- qCritical() << "Test15 - Parameter merging failed.";
- return EXIT_FAILURE;
- }
- if (!list.contains("a") || !list.contains("b") || !list.contains("z"))
- {
- qCritical() << "Test15 - Merged list contains wrong elements.";
- return EXIT_FAILURE;
- }
- }
- else
- {
- qCritical() << "Test15 - --list-argument was not parsed.";
- return EXIT_FAILURE;
- }
- // Test with disabled merging
- parser15.mergeSettings(false);
- ok = false;
- parsedArgs = parser15.parseArguments(arguments15, &ok);
- if (!ok)
- {
- qCritical() << "Test15 - parsing arguments failed.";
- return EXIT_FAILURE;
- }
- if (parsedArgs.contains("--list-argument"))
- {
- QStringList list = parsedArgs["--list-argument"].toStringList();
- if (list.size() != 2)
- {
- qCritical() << "Test15 - Disabling merging failed.";
- return EXIT_FAILURE;
- }
- if (!list.contains("a") || !list.contains("b"))
- {
- qCritical() << "Test15 - List contains wrong elements.";
- return EXIT_FAILURE;
- }
- }
- else
- {
- qCritical() << "Test15 - --list-argument was not parsed.";
- return EXIT_FAILURE;
- }
- // Test16 - Check if strictMode works
- settings.clear();
- ctkCommandLineParser parser16(&settings);
- parser16.enableSettings();
- parser16.addArgument("--test-bool", "", QVariant::Bool);
- parser16.setStrictModeEnabled(true);
- QStringList arguments16;
- arguments16 << "ctkCommandLineParserTest1";
- arguments16 << "--test-bool";
- // parseArguments should NOT fail
- ok = false;
- parsedArgs = parser16.parseArguments(arguments16, &ok);
- if (!ok)
- {
- qCritical() << "Test16-1 - parsing arguments failed.";
- return EXIT_FAILURE;
- }
- // Since two identical arguments are provided, parseArguments should fail
- arguments16.clear();
- arguments16 << "ctkCommandLineParserTest1";
- arguments16 << "--test-bool";
- arguments16 << "--test-bool";
- ok = false;
- parsedArgs = parser16.parseArguments(arguments16, &ok);
- if (ok)
- {
- qCritical() << "Test16-2 - parsing arguments should fail.";
- return EXIT_FAILURE;
- }
- // Since an unknown argument is provided, parseArguments should fail
- arguments16.clear();
- arguments16 << "ctkCommandLineParserTest1";
- arguments16 << "--test-bool";
- arguments16 << "test-bool";
- ok = false;
- parsedArgs = parser16.parseArguments(arguments16, &ok);
- if (ok)
- {
- qCritical() << "Test16-3 - parsing arguments should fail.";
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
|