refactor: port ConfigTests to QtTest

This commit is contained in:
sithlord48 2025-03-30 10:15:44 -04:00 committed by Nick Bolton
parent 245f9db5c8
commit 810322623b
5 changed files with 188 additions and 122 deletions

View file

@ -1,122 +0,0 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2024 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "deskflow/Config.h"
#include <fstream>
#include <gtest/gtest.h>
using namespace deskflow;
const auto kTestFilename = "tmp/test/test.toml";
TEST(ConfigTests, load_fileExists_loadsConfig)
{
std::ofstream testFile(kTestFilename);
testFile << "[test.args]\n"
R"(test-arg = "test opt")";
testFile.close();
Config config(kTestFilename, "test");
const auto result = config.load("test");
ASSERT_TRUE(result);
ASSERT_EQ(config.argc(), 3);
ASSERT_STREQ(config.argv()[0], "test");
ASSERT_STREQ(config.argv()[1], "--test-arg");
ASSERT_STREQ(config.argv()[2], "test opt");
}
TEST(ConfigTests, load_filenameEmpty_throwsException)
{
EXPECT_THROW(
{
Config config("", "test");
config.load("test");
},
Config::NoConfigFilenameError
);
}
TEST(ConfigTests, load_fileDoesNotExist_returnsFalse)
{
Config config("nonexistent.toml", "test");
const auto result = config.load("test");
ASSERT_FALSE(result);
}
TEST(ConfigTests, load_invalidConfig_throwsException)
{
EXPECT_THROW(
{
std::ofstream testFile(kTestFilename);
testFile << "foobar";
testFile.close();
Config config(kTestFilename, "test");
config.load("test");
},
Config::ParseError
);
}
TEST(ConfigTests, load_sectionMissing_returnsFalse)
{
std::ofstream testFile(kTestFilename);
testFile.close();
Config config(kTestFilename, "missing");
const auto result = config.load("test");
ASSERT_FALSE(result);
}
TEST(ConfigTests, load_notTable_returnsFalse)
{
std::ofstream testFile(kTestFilename);
testFile << "[test]";
testFile.close();
Config config(kTestFilename, "test");
const auto result = config.load("test");
ASSERT_FALSE(result);
}
TEST(ConfigTests, load_lastArg_returnsLast)
{
std::ofstream testFile(kTestFilename);
testFile << "[test.args]\n"
R"(_last = "test last")"
"\n"
R"(test-second = true)";
testFile.close();
Config config(kTestFilename, "test");
const auto result = config.load("test-first");
ASSERT_TRUE(result);
ASSERT_EQ(config.argc(), 3);
ASSERT_STREQ(config.argv()[0], "test-first");
ASSERT_STREQ(config.argv()[1], "--test-second");
ASSERT_STREQ(config.argv()[2], "test last");
}
TEST(ConfigTests, load_noArgs_returnsFalse)
{
std::ofstream testFile(kTestFilename);
testFile << "[test.args]";
testFile.close();
Config config(kTestFilename, "test");
const auto result = config.load("");
ASSERT_FALSE(result);
}

View file

@ -42,6 +42,7 @@ enable_testing()
find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Test)
add_subdirectory(common)
add_subdirectory(deskflow)
add_subdirectory(gui)
#make sure to use CI only plugin on Unix

View file

@ -0,0 +1,14 @@
# SPDX-FileCopyrightText: 2025 Deskflow Developers
# SPDX-License-Identifier: MIT
if(WIN32)
set(extra_libs version)
endif()
create_test(
NAME ConfigTests
DEPENDS app
LIBS arch base ${extra_libs}
SOURCE ConfigTests.cpp
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/lib/deskflow"
)

View file

@ -0,0 +1,144 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello <sithlord48@gmail.com>
* SPDX-FileCopyrightText: (C) 2024 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "ConfigTests.h"
#include "../../lib/deskflow/Config.h"
using namespace deskflow;
const auto kTestFilename = "tmp/test/test.toml";
void ConfigTests::initTestCase()
{
QDir dir;
QVERIFY(dir.mkpath("tmp/test"));
m_arch.init();
m_log.setFilter(kDEBUG2);
}
void ConfigTests::loadFile()
{
QFile testFile(kTestFilename);
QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Text));
QTextStream out(&testFile);
out << "[test.args]\n"
R"(test-arg = "test opt")";
testFile.close();
QVERIFY(!testFile.isOpen());
Config config(kTestFilename, "test");
const auto result = config.load("test");
QVERIFY(result);
QCOMPARE(config.argc(), 3);
QCOMPARE(config.argv()[0], "test");
QCOMPARE(config.argv()[1], "--test-arg");
QCOMPARE(config.argv()[2], "test opt");
}
void ConfigTests::load_EmptyFile()
{
Config config("", "test");
QVERIFY_THROWS_EXCEPTION(Config::NoConfigFilenameError, config.load("test"));
}
void ConfigTests::load_NonExsitingFile()
{
Config config("nonexistent.toml", "test");
const auto result = config.load("test");
QVERIFY(!result);
}
void ConfigTests::load_InvalidConfig()
{
QFile testFile(kTestFilename);
QVERIFY(testFile.open(QIODevice::WriteOnly));
QVERIFY(testFile.write("foobar"));
testFile.close();
QVERIFY(!testFile.isOpen());
Config config(kTestFilename, "test");
QVERIFY_THROWS_EXCEPTION(Config::ParseError, config.load("test"));
}
void ConfigTests::load_missingSections()
{
QFile testFile(kTestFilename);
QVERIFY(testFile.open(QIODevice::WriteOnly));
testFile.close();
QVERIFY(!testFile.isOpen());
Config config(kTestFilename, "missing");
const auto result = config.load("test");
QVERIFY(!result);
}
void ConfigTests::load_badTable()
{
QFile testFile(kTestFilename);
QVERIFY(testFile.open(QIODevice::WriteOnly));
QVERIFY(testFile.write("[test]"));
testFile.close();
QVERIFY(!testFile.isOpen());
Config config(kTestFilename, "test");
const auto result = config.load("test");
QVERIFY(!result);
}
void ConfigTests::load_lastArg()
{
QFile testFile(kTestFilename);
QVERIFY(testFile.open(QIODevice::WriteOnly));
QVERIFY(testFile.write(
"[test.args]\n"
R"(_last = "test last")"
"\n"
R"(test-second = true)"
));
testFile.close();
QVERIFY(!testFile.isOpen());
deskflow::Config config(kTestFilename, "test");
const auto result = config.load("test-first");
QVERIFY(result);
QCOMPARE(config.argc(), 3);
QCOMPARE(config.argv()[0], "test-first");
QCOMPARE(config.argv()[1], "--test-second");
QCOMPARE(config.argv()[2], "test last");
}
void ConfigTests::load_noArgs()
{
QFile testFile(kTestFilename);
QVERIFY(testFile.open(QIODevice::WriteOnly));
QVERIFY(testFile.write("[test.args]"));
testFile.close();
QVERIFY(!testFile.isOpen());
deskflow::Config config(kTestFilename, "test");
const auto result = config.load("");
QVERIFY(!result);
}
QTEST_MAIN(ConfigTests)

View file

@ -0,0 +1,29 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello <sithlord48@gmail.com>
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "base/Log.h"
#include <QTest>
class ConfigTests : public QObject
{
Q_OBJECT
private slots:
// Test are run in order top to bottom
void initTestCase();
void loadFile();
void load_EmptyFile();
void load_NonExsitingFile();
void load_InvalidConfig();
void load_missingSections();
void load_badTable();
void load_lastArg();
void load_noArgs();
private:
Arch m_arch;
Log m_log;
};