File indexing completed on 2024-04-28 05:50:35

0001 /*
0002     SPDX-FileCopyrightText: 2008 Robert Knight <robertknight@gmail.com>
0003     SPDX-FileCopyrightText: 2013 Kurt Hindenburg <kurt.hindenburg@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 // Own
0009 #include "ShellCommandTest.h"
0010 
0011 // Qt
0012 #include <QStringList>
0013 
0014 // KDE
0015 #include <QTest>
0016 
0017 using namespace Konsole;
0018 
0019 void ShellCommandTest::init()
0020 {
0021 }
0022 
0023 void ShellCommandTest::cleanup()
0024 {
0025 }
0026 
0027 void ShellCommandTest::testConstructorWithOneArguemnt()
0028 {
0029     const QString fullCommand(QStringLiteral("sudo apt-get update"));
0030     ShellCommand shellCommand(fullCommand);
0031     QCOMPARE(shellCommand.command(), QStringLiteral("sudo"));
0032     QCOMPARE(shellCommand.fullCommand(), fullCommand);
0033 }
0034 
0035 void ShellCommandTest::testConstructorWithTwoArguments()
0036 {
0037     const QString command(QStringLiteral("wc"));
0038     QStringList arguments;
0039     arguments << QStringLiteral("wc") << QStringLiteral("-l") << QStringLiteral("*.cpp");
0040 
0041     ShellCommand shellCommand(command, arguments);
0042     QCOMPARE(shellCommand.command(), command);
0043     QCOMPARE(shellCommand.arguments(), arguments);
0044     QCOMPARE(shellCommand.fullCommand(), arguments.join(QLatin1String(" ")));
0045 }
0046 
0047 void ShellCommandTest::testExpandEnvironmentVariable()
0048 {
0049     QString text = QStringLiteral("PATH=$PATH:~/bin");
0050     const QString env = QStringLiteral("PATH");
0051     const QString value = QStringLiteral("/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin");
0052 
0053     qputenv(env.toLocal8Bit().constData(), value.toLocal8Bit());
0054     const QString result = ShellCommand::expand(text);
0055     const QString expected = text.replace(QLatin1Char('$') + env, value);
0056     QCOMPARE(result, expected);
0057 
0058     text = QStringLiteral("PATH=$PATH:\\$ESCAPED:~/bin");
0059     qputenv(env.toLocal8Bit().constData(), value.toLocal8Bit());
0060     const QString result2 = ShellCommand::expand(text);
0061     const QString expected2 = text.replace(QLatin1Char('$') + env, value);
0062     QCOMPARE(result2, expected2);
0063 
0064     text = QStringLiteral("$ABC \"$ABC\" '$ABC'");
0065     qputenv("ABC", "123");
0066     const QString result3 = ShellCommand::expand(text);
0067     const QString expected3 = QStringLiteral("123 \"123\" '$ABC'");
0068     QEXPECT_FAIL("", "Bug 361835", Continue);
0069     QCOMPARE(result3, expected3);
0070 }
0071 
0072 void ShellCommandTest::testValidEnvCharacter()
0073 {
0074     QChar validChar(QLatin1Char('A'));
0075     const bool result = ShellCommand::isValidEnvCharacter(validChar);
0076     QCOMPARE(result, true);
0077 }
0078 
0079 void ShellCommandTest::testValidLeadingEnvCharacter()
0080 {
0081     QChar invalidChar(QLatin1Char('9'));
0082     const bool result = ShellCommand::isValidLeadingEnvCharacter(invalidChar);
0083     QCOMPARE(result, false);
0084 }
0085 
0086 void ShellCommandTest::testArgumentsWithSpaces()
0087 {
0088     const QString command(QStringLiteral("dir"));
0089     QStringList arguments;
0090     arguments << QStringLiteral("dir") << QStringLiteral("c:\\Program Files") << QStringLiteral("System") << QStringLiteral("*.ini");
0091     const QString expected_arg(QStringLiteral("dir \"c:\\Program Files\" System *.ini"));
0092 
0093     ShellCommand shellCommand(command, arguments);
0094     QCOMPARE(shellCommand.command(), command);
0095     QCOMPARE(shellCommand.arguments(), arguments);
0096     QCOMPARE(shellCommand.fullCommand(), expected_arg);
0097 }
0098 
0099 void ShellCommandTest::testEmptyCommand()
0100 {
0101     const QString command = QString();
0102     ShellCommand shellCommand(command);
0103     QCOMPARE(shellCommand.command(), QString());
0104     QCOMPARE(shellCommand.arguments(), QStringList());
0105     QCOMPARE(shellCommand.fullCommand(), QString());
0106 }
0107 
0108 QTEST_GUILESS_MAIN(ShellCommandTest)
0109 
0110 #include "moc_ShellCommandTest.cpp"