2026-01-21 16:54:32 -05:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
#include "app_lifecycle.h"
|
2026-01-22 11:06:44 -05:00
|
|
|
#include "plugin_manager.h"
|
2026-03-27 12:33:38 -04:00
|
|
|
#include "plugin_registry.h"
|
2026-01-21 16:54:32 -05:00
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
static void clearPluginState()
|
|
|
|
|
{
|
2026-03-27 12:33:38 -04:00
|
|
|
PluginManager::terminateAll();
|
|
|
|
|
PluginManager::registry().clear();
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
int main(int argc, char** argv)
|
|
|
|
|
{
|
2026-01-21 16:54:32 -05:00
|
|
|
::testing::InitGoogleTest(&argc, argv);
|
|
|
|
|
return RUN_ALL_TESTS();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class AppLifecycleTest : public ::testing::Test {
|
|
|
|
|
protected:
|
2026-04-07 14:05:04 -04:00
|
|
|
void SetUp() override
|
|
|
|
|
{
|
2026-03-27 12:33:38 -04:00
|
|
|
clearPluginState();
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
2026-03-24 13:55:09 -04:00
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
void TearDown() override
|
|
|
|
|
{
|
2026-03-27 12:33:38 -04:00
|
|
|
clearPluginState();
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, Init_DoesNotThrow)
|
|
|
|
|
{
|
2026-01-21 16:54:32 -05:00
|
|
|
char* argv[] = {(char*)"test"};
|
2026-04-07 14:05:04 -04:00
|
|
|
EXPECT_NO_THROW(AppLifecycle::init(1, argv));
|
|
|
|
|
AppLifecycle::cleanup();
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, SetPluginsDir_SetsDirectory)
|
|
|
|
|
{
|
2026-01-21 16:54:32 -05:00
|
|
|
const char* testDir = "/test/plugins";
|
2026-01-22 11:06:44 -05:00
|
|
|
|
2026-03-25 21:09:59 -04:00
|
|
|
PluginManager::setPluginsDir(testDir);
|
2026-01-22 11:06:44 -05:00
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 1u);
|
|
|
|
|
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0], testDir);
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, SetPluginsDir_ClearsExisting)
|
|
|
|
|
{
|
2026-03-25 21:09:59 -04:00
|
|
|
PluginManager::addPluginsDir("/dir1");
|
|
|
|
|
PluginManager::addPluginsDir("/dir2");
|
2026-04-07 14:05:04 -04:00
|
|
|
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 2u);
|
2026-03-25 21:09:59 -04:00
|
|
|
|
|
|
|
|
PluginManager::setPluginsDir("/new_dir");
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 1u);
|
|
|
|
|
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0], "/new_dir");
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, AddPluginsDir_AppendsDirectory)
|
|
|
|
|
{
|
2026-03-25 21:09:59 -04:00
|
|
|
PluginManager::addPluginsDir("/dir1");
|
|
|
|
|
PluginManager::addPluginsDir("/dir2");
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 2u);
|
|
|
|
|
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0], "/dir1");
|
|
|
|
|
EXPECT_EQ(PluginManager::registry().pluginsDirs()[1], "/dir2");
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, AddPluginsDir_NoDuplicates)
|
|
|
|
|
{
|
2026-03-25 21:09:59 -04:00
|
|
|
PluginManager::addPluginsDir("/test");
|
|
|
|
|
PluginManager::addPluginsDir("/test");
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
EXPECT_EQ(PluginManager::registry().pluginsDirs().size(), 1u);
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, Cleanup_ClearsGlobals)
|
|
|
|
|
{
|
2026-03-27 12:33:38 -04:00
|
|
|
PluginManager::registry().registerPlugin("test", "/path/to/test");
|
2026-03-25 21:09:59 -04:00
|
|
|
PluginManager::addPluginsDir("/test");
|
|
|
|
|
|
2026-03-27 12:33:38 -04:00
|
|
|
clearPluginState();
|
2026-03-25 21:09:59 -04:00
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
EXPECT_TRUE(PluginManager::registry().loadedPluginNames().empty());
|
|
|
|
|
EXPECT_TRUE(PluginManager::registry().knownPluginNames().empty());
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, ProcessEvents_DoesNotThrowAfterInit)
|
|
|
|
|
{
|
2026-01-21 16:54:32 -05:00
|
|
|
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());
|
2026-04-07 14:05:04 -04:00
|
|
|
|
|
|
|
|
AppLifecycle::cleanup();
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, Start_UsesCustomPluginsDirs)
|
|
|
|
|
{
|
2026-01-21 16:54:32 -05:00
|
|
|
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
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
ASSERT_EQ(PluginManager::registry().pluginsDirs().size(), 1u);
|
|
|
|
|
EXPECT_EQ(PluginManager::registry().pluginsDirs()[0], "/custom/plugins");
|
|
|
|
|
|
|
|
|
|
AppLifecycle::cleanup();
|
2026-01-21 16:54:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, Exec_ReturnsNegativeWhenNotInitialized)
|
|
|
|
|
{
|
|
|
|
|
int result = AppLifecycle::exec();
|
|
|
|
|
EXPECT_EQ(result, -1);
|
|
|
|
|
}
|
2026-01-21 16:54:32 -05:00
|
|
|
|
2026-04-07 14:05:04 -04:00
|
|
|
TEST_F(AppLifecycleTest, Exec_ReturnsNegativeAfterCleanup)
|
|
|
|
|
{
|
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);
|
|
|
|
|
}
|