From e89616d695615a66bc347daa7e8e8e6102e8363d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Capelle?= Date: Mon, 2 May 2022 19:59:49 +0200 Subject: [PATCH] Add more basic tests. --- tests/mocks/DummyFileTree.h | 34 +++++++++++++++++++ tests/runner/plugins/dummy-game.py | 45 +++++++++++++++++++++++++ tests/runner/plugins/dummy-installer.py | 23 +++---------- tests/runner/test_game.cpp | 37 ++++++++++++++++++++ tests/runner/test_installer.cpp | 30 ++--------------- 5 files changed, 122 insertions(+), 47 deletions(-) create mode 100644 tests/mocks/DummyFileTree.h create mode 100644 tests/runner/plugins/dummy-game.py create mode 100644 tests/runner/test_game.cpp diff --git a/tests/mocks/DummyFileTree.h b/tests/mocks/DummyFileTree.h new file mode 100644 index 0000000..3f1cb01 --- /dev/null +++ b/tests/mocks/DummyFileTree.h @@ -0,0 +1,34 @@ +#ifndef DUMMY_TREE_H +#define DUMMY_TREE_H + +#include + +// filetree implementation for testing purpose +// +class DummyFileTree : public MOBase::IFileTree { +public: + DummyFileTree(std::shared_ptr parent, QString name) + : FileTreeEntry(parent, name), IFileTree() + { + } + +protected: + std::shared_ptr makeDirectory(std::shared_ptr parent, + QString name) const override + { + return std::make_shared(parent, name); + } + + bool doPopulate(std::shared_ptr parent, + std::vector>& entries) const override + { + return true; + } + + std::shared_ptr doClone() const override + { + return std::make_shared(nullptr, name()); + } +}; + +#endif diff --git a/tests/runner/plugins/dummy-game.py b/tests/runner/plugins/dummy-game.py new file mode 100644 index 0000000..b11e060 --- /dev/null +++ b/tests/runner/plugins/dummy-game.py @@ -0,0 +1,45 @@ +# -*- encoding: utf-8 -*- + +import mobase +from PyQt6.QtWidgets import QWidget + + +class DummyModDataChecker(mobase.ModDataChecker): + def dataLooksValid( + self, filetree: mobase.IFileTree + ) -> mobase.ModDataChecker.CheckReturn: + return mobase.ModDataChecker.VALID + + def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree: + return filetree + + +class DummySaveGameInfo(mobase.SaveGameInfo): + def getMissingAssets(self, save: mobase.ISaveGame) -> dict[str, list[str]]: + return {} + + def getSaveGameWidget(self, parent: QWidget) -> mobase.ISaveGameInfoWidget | None: + return None + + +# we do not implement everything since this will do fine if we do not call anything +# from the C++ side +# +class DummyGame(mobase.IPluginGame): + + _features: dict[type, object] + + def __init__(self): + super().__init__() + + self._features = { + mobase.ModDataChecker: DummyModDataChecker(), + mobase.SaveGameInfo: DummySaveGameInfo(), + } + + def _featureList(self) -> dict[type, object]: + return self._features + + +def createPlugin() -> mobase.IPlugin: + return DummyGame() # type: ignore diff --git a/tests/runner/plugins/dummy-installer.py b/tests/runner/plugins/dummy-installer.py index 33e2fb9..3c4e67e 100644 --- a/tests/runner/plugins/dummy-installer.py +++ b/tests/runner/plugins/dummy-installer.py @@ -5,25 +5,10 @@ from typing import Union, cast import mobase +# we do not implement everything since this will do fine if we do not call anything +# from the C++ side +# class DummyInstaller(mobase.IPluginInstallerSimple): - def init(self, organizer: mobase.IOrganizer) -> bool: - return True - - def author(self) -> str: - return "" - - def name(self) -> str: - return "" - - def description(self) -> str: - return "" - - def version(self) -> mobase.VersionInfo: - return mobase.VersionInfo("0.0.0") - - def settings(self) -> list[mobase.PluginSetting]: - return [] - def isManualInstaller(self) -> bool: return False @@ -58,4 +43,4 @@ class DummyInstaller(mobase.IPluginInstallerSimple): def createPlugin() -> mobase.IPlugin: - return DummyInstaller() + return DummyInstaller() # type: ignore diff --git a/tests/runner/test_game.cpp b/tests/runner/test_game.cpp new file mode 100644 index 0000000..6bdaf9c --- /dev/null +++ b/tests/runner/test_game.cpp @@ -0,0 +1,37 @@ +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "pythonrunner.h" + +#include + +#include "MockOrganizer.h" +#include "iplugingame.h" +#include "localsavegames.h" +#include "moddatachecker.h" +#include "moddatacontent.h" +#include "savegameinfo.h" + +using namespace MOBase; + +TEST(IPluginGame, Simple) +{ + const auto plugins_folder = QString(std::getenv("PLUGIN_DIR")); + + std::unique_ptr runner(CreatePythonRunner()); + runner->initialize(); + + // load objects + const auto objects = runner->load(plugins_folder + "/dummy-game.py"); + EXPECT_EQ(objects.size(), 1); + + // load the IPlugin + IPluginGame* plugin = qobject_cast(objects[0]); + EXPECT_NE(plugin, nullptr); + + // check features + EXPECT_EQ(plugin->feature(), nullptr); + EXPECT_EQ(plugin->feature(), nullptr); + EXPECT_NE(plugin->feature(), nullptr); + EXPECT_NE(plugin->feature(), nullptr); +} diff --git a/tests/runner/test_installer.cpp b/tests/runner/test_installer.cpp index 0341d26..d2f2389 100644 --- a/tests/runner/test_installer.cpp +++ b/tests/runner/test_installer.cpp @@ -7,36 +7,10 @@ #include +#include "DummyFileTree.h" + using namespace MOBase; -// filetree implementation for testing purpose -// -class DummyFileTree : public IFileTree { -public: - DummyFileTree(std::shared_ptr parent, QString name) - : FileTreeEntry(parent, name), IFileTree() - { - } - -protected: - std::shared_ptr makeDirectory(std::shared_ptr parent, - QString name) const override - { - return std::make_shared(parent, name); - } - - bool doPopulate(std::shared_ptr parent, - std::vector>& entries) const override - { - return true; - } - - std::shared_ptr doClone() const override - { - return std::make_shared(nullptr, name()); - } -}; - TEST(IPluginInstaller, Simple) { const auto plugins_folder = QString(std::getenv("PLUGIN_DIR"));