From a2acfb0678b5ca413fffba76ff84e7b074e6863f Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Sat, 5 Apr 2025 17:22:14 -0400 Subject: [PATCH] refactor: port ArgParserTests to QtTests --- .../unittests/deskflow/ArgParserTests.cpp | 240 ------------------ src/unittests/deskflow/ArgParserTests.cpp | 202 +++++++++++++++ src/unittests/deskflow/ArgParserTests.h | 32 +++ src/unittests/deskflow/CMakeLists.txt | 8 + 4 files changed, 242 insertions(+), 240 deletions(-) delete mode 100644 src/test/unittests/deskflow/ArgParserTests.cpp create mode 100644 src/unittests/deskflow/ArgParserTests.cpp create mode 100644 src/unittests/deskflow/ArgParserTests.h diff --git a/src/test/unittests/deskflow/ArgParserTests.cpp b/src/test/unittests/deskflow/ArgParserTests.cpp deleted file mode 100644 index 39db02ccc..000000000 --- a/src/test/unittests/deskflow/ArgParserTests.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2014 - 2016 Symless Ltd. - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include -#include - -#include "common/Constants.h" -#include "deskflow/ArgParser.h" -#include "deskflow/ArgsBase.h" -#include "deskflow/ClientArgs.h" -#include "deskflow/ServerArgs.h" - -#include - -TEST(ArgParserTests, isArg_abbreviationsArg_returnTrue) -{ - int i = 1; - const int argc = 2; - const char *argv[argc] = {"stub", "-t"}; - bool result = ArgParser::isArg(i, argc, argv, "-t", nullptr); - - EXPECT_EQ(true, result); -} - -TEST(ArgParserTests, isArg_fullArg_returnTrue) -{ - int i = 1; - const int argc = 2; - const char *argv[argc] = {"stub", "--test"}; - bool result = ArgParser::isArg(i, argc, argv, nullptr, "--test"); - - EXPECT_EQ(true, result); -} - -TEST(ArgParserTests, isArg_missingArgs_returnFalse) -{ - int i = 1; - const int argc = 2; - const char *argv[argc] = {"stub", "-t"}; - static deskflow::ArgsBase argsBase; - ArgParser argParser(nullptr); - argParser.setArgsBase(argsBase); - - bool result = ArgParser::isArg(i, argc, argv, "-t", nullptr, 1); - - EXPECT_FALSE(result); - EXPECT_EQ(true, argsBase.m_shouldExitFail); -} - -TEST(ArgParserTests, searchDoubleQuotes_doubleQuotedArg_returnTrue) -{ - std::string command("\"stub\""); - size_t left = 0; - size_t right = 0; - - bool result = ArgParser::searchDoubleQuotes(command, left, right); - - EXPECT_EQ(true, result); - EXPECT_EQ(0, left); - EXPECT_EQ(5, right); -} - -TEST(ArgParserTests, searchDoubleQuotes_noDoubleQuotedArg_returnfalse) -{ - std::string command("stub"); - size_t left = 0; - size_t right = 0; - - bool result = ArgParser::searchDoubleQuotes(command, left, right); - - EXPECT_FALSE(result); - EXPECT_EQ(0, left); - EXPECT_EQ(0, right); -} - -TEST(ArgParserTests, searchDoubleQuotes_oneDoubleQuoteArg_returnfalse) -{ - std::string command("\"stub"); - size_t left = 0; - size_t right = 0; - - bool result = ArgParser::searchDoubleQuotes(command, left, right); - - EXPECT_FALSE(result); - EXPECT_EQ(0, left); - EXPECT_EQ(0, right); -} - -TEST(ArgParserTests, splitCommandString_oneArg_returnArgv) -{ - std::string command("stub"); - std::vector argv; - - ArgParser::splitCommandString(command, argv); - - EXPECT_EQ(1, argv.size()); - EXPECT_EQ("stub", argv.at(0)); -} - -TEST(ArgParserTests, splitCommandString_twoArgs_returnArgv) -{ - std::string command("stub1 stub2"); - std::vector argv; - - ArgParser::splitCommandString(command, argv); - - EXPECT_EQ(2, argv.size()); - EXPECT_EQ("stub1", argv.at(0)); - EXPECT_EQ("stub2", argv.at(1)); -} - -TEST(ArgParserTests, splitCommandString_doubleQuotedArgs_returnArgv) -{ - std::string command("\"stub1\" stub2 \"stub3\""); - std::vector argv; - - ArgParser::splitCommandString(command, argv); - - EXPECT_EQ(3, argv.size()); - EXPECT_EQ("stub1", argv.at(0)); - EXPECT_EQ("stub2", argv.at(1)); - EXPECT_EQ("stub3", argv.at(2)); -} - -TEST(ArgParserTests, splitCommandString_spaceDoubleQuotedArgs_returnArgv) -{ - std::string command("\"stub1\" stub2 \"stub3 space\""); - std::vector argv; - - ArgParser::splitCommandString(command, argv); - - EXPECT_EQ(3, argv.size()); - EXPECT_EQ("stub1", argv.at(0)); - EXPECT_EQ("stub2", argv.at(1)); - EXPECT_EQ("stub3 space", argv.at(2)); -} - -TEST(ArgParserTests, getArgv_stringArray_return2DArray) -{ - std::vector argArray; - argArray.push_back("stub1"); - argArray.push_back("stub2"); - argArray.push_back("stub3 space"); - const char **argv = ArgParser::getArgv(argArray); - - std::string row1(argv[0]); - std::string row2(argv[1]); - std::string row3(argv[2]); - - EXPECT_EQ("stub1", row1); - EXPECT_EQ("stub2", row2); - EXPECT_EQ("stub3 space", row3); - - delete[] argv; -} - -TEST(ArgParserTests, assembleCommand_stringArray_returnCommand) -{ - std::vector argArray; - argArray.push_back("stub1"); - argArray.push_back("stub2"); - std::string command = ArgParser::assembleCommand(argArray); - - EXPECT_EQ("stub1 stub2", command); -} - -TEST(ArgParserTests, assembleCommand_ignoreSecondArg_returnCommand) -{ - std::vector argArray; - argArray.push_back("stub1"); - argArray.push_back("stub2"); - std::string command = ArgParser::assembleCommand(argArray, "stub2"); - - EXPECT_EQ("stub1", command); -} - -TEST(ArgParserTests, assembleCommand_ignoreSecondArgWithOneParameter_returnCommand) -{ - std::vector argArray; - argArray.push_back("stub1"); - argArray.push_back("stub2"); - argArray.push_back("stub3"); - argArray.push_back("stub4"); - std::string command = ArgParser::assembleCommand(argArray, "stub2", 1); - - EXPECT_EQ("stub1 stub4", command); -} - -TEST(ArgParserTests, assembleCommand_stringArrayWithSpace_returnCommand) -{ - std::vector argArray; - argArray.push_back("stub1 space"); - argArray.push_back("stub2"); - argArray.push_back("stub3 space"); - std::string command = ArgParser::assembleCommand(argArray); - - EXPECT_EQ("\"stub1 space\" stub2 \"stub3 space\"", command); -} - -TEST(ArgParserTests, parseServerArgs_parses_each_category) -{ - ArgParser parser(nullptr); - deskflow::ServerArgs args; - args.m_daemon = false; - char const *argv[] = { - "deskflow", "--help" -#if WINAPI_XWINDOWS - , - "--no-xinitthreads" -#endif - , - "--res-w", "888" - }; - EXPECT_TRUE(parser.parseServerArgs(args, sizeof(argv) / sizeof(argv[0]), argv)); - EXPECT_EQ(args.m_shouldExitOk, true); -} - -TEST(ArgParserTests, parseClientArgs_parses_single_help) -{ - ArgParser parser(nullptr); - deskflow::ClientArgs args; - args.m_daemon = false; - char const *argv[] = { - kAppId, - "--help" -#if WINAPI_XWINDOWS - , - "--no-xinitthreads" -#endif - , - "--res-w", - "888", - "127.0.0.1" - }; - EXPECT_TRUE(parser.parseClientArgs(args, sizeof(argv) / sizeof(argv[0]), argv)); - EXPECT_EQ(args.m_shouldExitOk, true); -} diff --git a/src/unittests/deskflow/ArgParserTests.cpp b/src/unittests/deskflow/ArgParserTests.cpp new file mode 100644 index 000000000..cc9ff35ef --- /dev/null +++ b/src/unittests/deskflow/ArgParserTests.cpp @@ -0,0 +1,202 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-FileCopyrightText: (C) 2014 - 2016 Symless Ltd. + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "ArgParserTests.h" + +#include "../../lib/deskflow/ArgsBase.h" +#include "../../lib/deskflow/ClientArgs.h" +#include "../../lib/deskflow/ServerArgs.h" + +// This file is generated at build time +#include + +void ArgParserTests::initTestCase() +{ + m_arch.init(); + m_log.setFilter(kDEBUG2); +} + +void ArgParserTests::isArg() +{ + int i = 1; + const int argc = 2; + const char *argShort[argc] = {"stub", "-t"}; + QVERIFY(ArgParser::isArg(i, argc, argShort, "-t", NULL)); + + const char *argLong[argc] = {"stub", "--test"}; + QVERIFY(ArgParser::isArg(i, argc, argLong, NULL, "--test")); +} + +void ArgParserTests::missingArg() +{ + int i = 1; + const int argc = 2; + const char *argv[argc] = {"stub", "-t"}; + static deskflow::ArgsBase argsBase; + + m_parser.setArgsBase(argsBase); + + QVERIFY(!ArgParser::isArg(i, argc, argv, "-t", NULL, 1)); + QVERIFY(argsBase.m_shouldExitFail); +} + +void ArgParserTests::withQuotes() +{ + std::string command("\"stub\""); + size_t left = 0; + size_t right = 0; + + QVERIFY(ArgParser::searchDoubleQuotes(command, left, right)); + QCOMPARE(left, 0); + QCOMPARE(right, 5); + + command = "stub"; + left = 0; + right = 0; + + QVERIFY(!ArgParser::searchDoubleQuotes(command, left, right)); + QCOMPARE(0, left); + QCOMPARE(0, right); + + command = "\"stub"; + left = 0; + right = 0; + + QVERIFY(!ArgParser::searchDoubleQuotes(command, left, right)); + QCOMPARE(left, 0); + QCOMPARE(right, 0); +} + +void ArgParserTests::splitCommand() +{ + std::string command("stub"); + std::vector argv; + ArgParser::splitCommandString(command, argv); + + QCOMPARE(argv.size(), 1); + QCOMPARE(argv.at(0), "stub"); + + command = "stub1 stub2"; + argv.resize(0); + ArgParser::splitCommandString(command, argv); + + QCOMPARE(2, argv.size()); + QCOMPARE(argv.at(0), "stub1"); + QCOMPARE(argv.at(1), "stub2"); + + command = "stub1 stub2 stub3"; + argv.resize(0); + ArgParser::splitCommandString(command, argv); + + QCOMPARE(3, argv.size()); + QCOMPARE(argv.at(0), "stub1"); + QCOMPARE(argv.at(1), "stub2"); + QCOMPARE(argv.at(2), "stub3"); + + command = "\"stub1\" stub2 \"stub3 space\""; + argv.resize(0); + ArgParser::splitCommandString(command, argv); + + QCOMPARE(3, argv.size()); + QCOMPARE(argv.at(0), "stub1"); + QCOMPARE(argv.at(1), "stub2"); + QCOMPARE(argv.at(2), "stub3 space"); +} + +void ArgParserTests::getArgv() +{ + std::vector argArray; + argArray.push_back("stub1"); + argArray.push_back("stub2"); + argArray.push_back("stub3 space"); + const char **argv = ArgParser::getArgv(argArray); + + std::string row1(argv[0]); + std::string row2(argv[1]); + std::string row3(argv[2]); + + QCOMPARE(row1, "stub1"); + QCOMPARE(row2, "stub2"); + QCOMPARE(row3, "stub3 space"); + + delete[] argv; +} + +void ArgParserTests::assembleCommand() +{ + std::vector argArray; + argArray.push_back("stub1"); + argArray.push_back("stub2"); + std::string command = ArgParser::assembleCommand(argArray); + + QCOMPARE(command, "stub1 stub2"); + + argArray.resize(0); + argArray.push_back("stub1"); + argArray.push_back("stub2"); + command = ArgParser::assembleCommand(argArray, "stub2"); + + QCOMPARE(command, "stub1"); + + argArray.resize(0); + argArray.push_back("stub1"); + argArray.push_back("stub2"); + argArray.push_back("stub3"); + argArray.push_back("stub4"); + command = ArgParser::assembleCommand(argArray, "stub2", 1); + + QCOMPARE(command, "stub1 stub4"); + + argArray.resize(0); + argArray.push_back("stub1 space"); + argArray.push_back("stub2"); + argArray.push_back("stub3 space"); + command = ArgParser::assembleCommand(argArray); + + QCOMPARE(command, "\"stub1 space\" stub2 \"stub3 space\""); +} + +void ArgParserTests::serverArgs() +{ + deskflow::ServerArgs args; + args.m_daemon = false; + char const *argv[] = { + "deskflow", "--help" +#if WINAPI_XWINDOWS + , + "--no-xinitthreads" +#endif + , + "--res-w", "888" + }; + + QVERIFY(m_parser.parseServerArgs(args, sizeof(argv) / sizeof(argv[0]), argv)); + QVERIFY(args.m_shouldExitOk); +} + +void ArgParserTests::clientArgs() +{ + deskflow::ClientArgs args; + args.m_daemon = false; + char const *argv[] = { + kAppId, + "--help" +#if WINAPI_XWINDOWS + , + "--no-xinitthreads" +#endif + , + "--res-w", + "888", + "127.0.0.1" + }; + + QVERIFY(m_parser.parseClientArgs(args, sizeof(argv) / sizeof(argv[0]), argv)); + QVERIFY(args.m_shouldExitOk); +} + +QTEST_MAIN(ArgParserTests) diff --git a/src/unittests/deskflow/ArgParserTests.h b/src/unittests/deskflow/ArgParserTests.h new file mode 100644 index 000000000..e1d14967a --- /dev/null +++ b/src/unittests/deskflow/ArgParserTests.h @@ -0,0 +1,32 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "../../lib/deskflow/ArgParser.h" + +#include "base/Log.h" + +#include + +class ArgParserTests : public QObject +{ + Q_OBJECT +private slots: + void initTestCase(); + // Test are run in order top to bottom + void isArg(); + void missingArg(); + void withQuotes(); + void splitCommand(); + void getArgv(); + void assembleCommand(); + void serverArgs(); + void clientArgs(); + +private: + Arch m_arch; + Log m_log; + ArgParser m_parser = ArgParser(nullptr); +}; diff --git a/src/unittests/deskflow/CMakeLists.txt b/src/unittests/deskflow/CMakeLists.txt index 613530825..103acb058 100644 --- a/src/unittests/deskflow/CMakeLists.txt +++ b/src/unittests/deskflow/CMakeLists.txt @@ -5,6 +5,14 @@ if(WIN32) set(extra_libs version) endif() +create_test( + NAME ArgParserTests + DEPENDS app + LIBS arch base ${extra_libs} + SOURCE ArgParserTests.cpp + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/lib/deskflow" +) + create_test( NAME ConfigTests DEPENDS app