| 1 | /**************************************************************************** |
| 2 | ** |
| 3 | ** Copyright (C) 2013 David Faure <faure@kde.org> |
| 4 | ** Contact: https://www.qt.io/licensing/ |
| 5 | ** |
| 6 | ** This file is part of the test suite of the Qt Toolkit. |
| 7 | ** |
| 8 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
| 9 | ** Commercial License Usage |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in |
| 11 | ** accordance with the commercial license agreement provided with the |
| 12 | ** Software or, alternatively, in accordance with the terms contained in |
| 13 | ** a written agreement between you and The Qt Company. For licensing terms |
| 14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
| 15 | ** information use the contact form at https://www.qt.io/contact-us. |
| 16 | ** |
| 17 | ** GNU General Public License Usage |
| 18 | ** Alternatively, this file may be used under the terms of the GNU |
| 19 | ** General Public License version 3 as published by the Free Software |
| 20 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
| 21 | ** included in the packaging of this file. Please review the following |
| 22 | ** information to ensure the GNU General Public License requirements will |
| 23 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| 24 | ** |
| 25 | ** $QT_END_LICENSE$ |
| 26 | ** |
| 27 | ****************************************************************************/ |
| 28 | |
| 29 | #include <QDebug> |
| 30 | #include <QCoreApplication> |
| 31 | #include <QCommandLineParser> |
| 32 | |
| 33 | #include <stdio.h> |
| 34 | |
| 35 | int main(int argc, char *argv[]) |
| 36 | { |
| 37 | QCoreApplication app(argc, argv); |
| 38 | app.setApplicationVersion("1.0" ); |
| 39 | |
| 40 | // Test for QCoreApplication::arguments() |
| 41 | const QStringList incomingArgs = QCoreApplication::arguments(); |
| 42 | for (int i = 0; i < argc; ++i) { |
| 43 | if (incomingArgs.at(i) != QLatin1String(argv[i])) |
| 44 | qDebug() << "ERROR: arguments[" << i << "] was" << incomingArgs.at(i) << "expected" << argv[i]; |
| 45 | } |
| 46 | |
| 47 | QCommandLineParser parser; |
| 48 | parser.setApplicationDescription("Test helper" ); |
| 49 | parser.addHelpOption(); |
| 50 | parser.addVersionOption(); |
| 51 | parser.addPositionalArgument(name: "parsingMode" , description: "The parsing mode to test." ); |
| 52 | parser.addPositionalArgument(name: "command" , description: "The command to execute." ); |
| 53 | parser.addOption(commandLineOption: QCommandLineOption("load" , "Load file from URL." , "url" )); |
| 54 | parser.addOption(commandLineOption: QCommandLineOption(QStringList() << "o" << "output" , "Set output file." , "file" )); |
| 55 | parser.addOption(commandLineOption: QCommandLineOption("D" , "Define macro." , "key=value" )); |
| 56 | parser.addOption(commandLineOption: QCommandLineOption("long-option" )); |
| 57 | |
| 58 | // An option with a longer description, to test wrapping |
| 59 | QCommandLineOption noImplicitIncludesOption(QStringList() << QStringLiteral("n" ) << QStringLiteral("no-implicit-includes" )); |
| 60 | noImplicitIncludesOption.setDescription(QStringLiteral("Disable magic generation of implicit #include-directives." )); |
| 61 | parser.addOption(commandLineOption: noImplicitIncludesOption); |
| 62 | |
| 63 | QCommandLineOption newlineOption(QStringList() << QStringLiteral("newline" )); |
| 64 | newlineOption.setDescription(QString::fromLatin1(str: "This is an option with a rather long\n" |
| 65 | "description using explicit newline characters " |
| 66 | "(but testing automatic wrapping too). In addition, " |
| 67 | "here, we test breaking after a comma. Testing -option. " |
| 68 | "Long URL: http://qt-project.org/wiki/How_to_create_a_library_with_Qt_and_use_it_in_an_application " |
| 69 | "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" )); |
| 70 | parser.addOption(commandLineOption: newlineOption); |
| 71 | |
| 72 | // A hidden option |
| 73 | QCommandLineOption hiddenOption(QStringList() << QStringLiteral("hidden" )); |
| 74 | hiddenOption.setDescription(QStringLiteral("THIS SHOULD NEVER APPEAR" )); |
| 75 | hiddenOption.setFlags(QCommandLineOption::HiddenFromHelp); |
| 76 | parser.addOption(commandLineOption: hiddenOption); |
| 77 | #if QT_DEPRECATED_SINCE(5, 8) |
| 78 | QCommandLineOption hiddenOption2(QStringList() << QStringLiteral("hidden2" )); |
| 79 | hiddenOption2.setDescription(QStringLiteral("NEITHER SHOULD THIS" )); |
| 80 | hiddenOption2.setHidden(true); |
| 81 | parser.addOption(commandLineOption: hiddenOption2); |
| 82 | #endif |
| 83 | |
| 84 | // This program supports different options depending on the "command" (first argument). |
| 85 | // Call parse() to find out the positional arguments. |
| 86 | parser.parse(arguments: QCoreApplication::arguments()); |
| 87 | |
| 88 | QStringList args = parser.positionalArguments(); |
| 89 | if (args.isEmpty()) |
| 90 | parser.showHelp(exitCode: 1); |
| 91 | parser.setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode(args.takeFirst().toInt())); |
| 92 | const QString command = args.isEmpty() ? QString() : args.first(); |
| 93 | if (command == "resize" ) { |
| 94 | parser.clearPositionalArguments(); |
| 95 | parser.addPositionalArgument(name: "resize" , description: "Resize the object to a new size." , syntax: "resize [resize_options]" ); |
| 96 | parser.addOption(commandLineOption: QCommandLineOption("size" , "New size." , "size" )); |
| 97 | parser.process(app); |
| 98 | const QString size = parser.value(name: "size" ); |
| 99 | printf(format: "Resizing %s to %s and saving to %s\n" , qPrintable(parser.value("load" )), qPrintable(size), qPrintable(parser.value("o" ))); |
| 100 | } else if (command == "long" ) { |
| 101 | // A very long option (QTBUG-79926) |
| 102 | QCommandLineOption longOption(QStringList{QStringLiteral("looooooooooooong-option" ), QStringLiteral("looooong-opt-alias" )}); |
| 103 | longOption.setDescription(QStringLiteral("Short description" )); |
| 104 | longOption.setValueName(QStringLiteral("looooooooooooong-value-name" )); |
| 105 | parser.addOption(commandLineOption: longOption); |
| 106 | parser.process(app); |
| 107 | } else { |
| 108 | // Call process again, to handle unknown options this time. |
| 109 | parser.process(app); |
| 110 | } |
| 111 | |
| 112 | printf(format: "Positional arguments: %s\n" , qPrintable(parser.positionalArguments().join("," ))); |
| 113 | printf(format: "Macros: %s\n" , qPrintable(parser.values("D" ).join("," ))); |
| 114 | |
| 115 | return 0; |
| 116 | } |
| 117 | |
| 118 | |