Files

180 lines
5.5 KiB
C++
Raw Permalink Normal View History

2026-01-21 16:54:32 -05:00
#include <gtest/gtest.h>
#include "app_lifecycle.h"
#include "plugin_manager.h"
#include "plugin_registry.h"
2026-01-21 16:54:32 -05:00
#include <QCoreApplication>
#include <QDebug>
static void clearPluginState() {
PluginManager::terminateAll();
PluginManager::registry().clear();
}
2026-01-21 16:54:32 -05:00
int main(int argc, char** argv) {
QCoreApplication app(argc, argv);
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
class AppLifecycleTest : public ::testing::Test {
protected:
void SetUp() override {
clearPluginState();
2026-01-21 16:54:32 -05:00
}
2026-01-21 16:54:32 -05:00
void TearDown() override {
clearPluginState();
2026-01-21 16:54:32 -05:00
}
};
// =============================================================================
// Initialization Tests
// =============================================================================
TEST_F(AppLifecycleTest, Init_CreatesNewApp) {
char* argv[] = {(char*)"test"};
2026-03-25 21:09:59 -04:00
2026-01-21 16:54:32 -05:00
QCoreApplication* beforeApp = QCoreApplication::instance();
2026-03-25 21:09:59 -04:00
2026-01-21 16:54:32 -05:00
AppLifecycle::init(1, argv);
2026-03-25 21:09:59 -04:00
ASSERT_NE(QCoreApplication::instance(), nullptr);
2026-01-21 16:54:32 -05:00
if (beforeApp) {
EXPECT_EQ(QCoreApplication::instance(), beforeApp);
2026-01-21 16:54:32 -05:00
}
}
TEST_F(AppLifecycleTest, Init_RegistersMetaType) {
char* argv[] = {(char*)"test"};
AppLifecycle::init(1, argv);
2026-03-25 21:09:59 -04:00
2026-01-21 16:54:32 -05:00
int typeId = QMetaType::fromName("QObject*").id();
EXPECT_NE(typeId, QMetaType::UnknownType);
}
// =============================================================================
// Plugin Directory Tests
// =============================================================================
TEST_F(AppLifecycleTest, SetPluginsDir_SetsDirectory) {
const char* testDir = "/test/plugins";
2026-03-25 21:09:59 -04:00
PluginManager::setPluginsDir(testDir);
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 1);
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0].toStdString(), testDir);
2026-01-21 16:54:32 -05:00
}
TEST_F(AppLifecycleTest, SetPluginsDir_ClearsExisting) {
2026-03-25 21:09:59 -04:00
PluginManager::addPluginsDir("/dir1");
PluginManager::addPluginsDir("/dir2");
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 2);
2026-03-25 21:09:59 -04:00
PluginManager::setPluginsDir("/new_dir");
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 1);
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0].toStdString(), "/new_dir");
2026-01-21 16:54:32 -05:00
}
TEST_F(AppLifecycleTest, AddPluginsDir_AppendsDirectory) {
2026-03-25 21:09:59 -04:00
PluginManager::addPluginsDir("/dir1");
PluginManager::addPluginsDir("/dir2");
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 2);
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0].toStdString(), "/dir1");
EXPECT_EQ(PluginManager::registry().pluginsDirs()[1].toStdString(), "/dir2");
2026-01-21 16:54:32 -05:00
}
TEST_F(AppLifecycleTest, AddPluginsDir_NoDuplicates) {
2026-03-25 21:09:59 -04:00
PluginManager::addPluginsDir("/test");
PluginManager::addPluginsDir("/test");
EXPECT_EQ(PluginManager::registry().pluginsDirs().size(), 1);
2026-01-21 16:54:32 -05:00
}
// =============================================================================
// Cleanup Tests
// =============================================================================
TEST_F(AppLifecycleTest, Cleanup_ClearsGlobals) {
PluginManager::registry().registerPlugin("test", "/path/to/test");
2026-03-25 21:09:59 -04:00
PluginManager::addPluginsDir("/test");
clearPluginState();
2026-03-25 21:09:59 -04:00
EXPECT_TRUE(PluginManager::registry().loadedPluginNames().isEmpty());
EXPECT_TRUE(PluginManager::registry().knownPluginNames().isEmpty());
2026-01-21 16:54:32 -05:00
}
TEST_F(AppLifecycleTest, Cleanup_DeletesOwnedApp) {
EXPECT_TRUE(true) << "This behavior is tested indirectly through integration tests";
}
TEST_F(AppLifecycleTest, Cleanup_PreservesExternalApp) {
char* argv[] = {(char*)"test"};
2026-03-25 21:09:59 -04:00
QCoreApplication* external = QCoreApplication::instance();
ASSERT_NE(external, nullptr) << "Test runner should provide QCoreApplication";
2026-01-21 16:54:32 -05:00
AppLifecycle::init(1, argv);
2026-03-25 21:09:59 -04:00
EXPECT_EQ(QCoreApplication::instance(), external)
<< "Should preserve external app instance";
2026-01-21 16:54:32 -05:00
}
// =============================================================================
// ProcessEvents Test
// =============================================================================
TEST_F(AppLifecycleTest, ProcessEvents_HandlesNoApp) {
2026-03-25 21:09:59 -04:00
char* argv[] = {(char*)"test"};
AppLifecycle::init(1, argv);
AppLifecycle::cleanup();
2026-01-21 16:54:32 -05:00
EXPECT_NO_THROW(AppLifecycle::processEvents());
}
TEST_F(AppLifecycleTest, ProcessEvents_CallsAppProcessEvents) {
char* argv[] = {(char*)"test"};
AppLifecycle::init(1, argv);
2026-03-25 21:09:59 -04:00
2026-01-21 16:54:32 -05:00
EXPECT_NO_THROW(AppLifecycle::processEvents());
}
// =============================================================================
// Start Function Tests (Limited testing without actual plugins)
// =============================================================================
TEST_F(AppLifecycleTest, Start_UsesCustomPluginsDirs) {
char* argv[] = {(char*)"test"};
AppLifecycle::init(1, argv);
2026-03-25 21:09:59 -04:00
PluginManager::setPluginsDir("/custom/plugins");
2026-01-21 16:54:32 -05:00
AppLifecycle::start();
2026-03-25 21:09:59 -04:00
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 1);
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0].toStdString(), "/custom/plugins");
2026-01-21 16:54:32 -05:00
}
// =============================================================================
// Exec Test
// =============================================================================
TEST_F(AppLifecycleTest, Exec_ReturnsNegativeWhenNoApp) {
2026-03-25 21:09:59 -04:00
char* argv[] = {(char*)"test"};
AppLifecycle::init(1, argv);
AppLifecycle::cleanup();
2026-01-21 16:54:32 -05:00
int result = AppLifecycle::exec();
2026-03-25 21:09:59 -04:00
2026-01-21 16:54:32 -05:00
EXPECT_EQ(result, -1);
}
TEST_F(AppLifecycleTest, Exec_WithAppAvailable) {
char* argv[] = {(char*)"test"};
AppLifecycle::init(1, argv);
2026-03-25 21:09:59 -04:00
ASSERT_NE(QCoreApplication::instance(), nullptr);
2026-01-21 16:54:32 -05:00
}