aboutsummaryrefslogtreecommitdiff
path: root/libs/plugin_python/tests/runner/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'libs/plugin_python/tests/runner/plugins')
-rw-r--r--libs/plugin_python/tests/runner/plugins/dummy-diagnose.py37
-rw-r--r--libs/plugin_python/tests/runner/plugins/dummy-filemapper.py32
-rw-r--r--libs/plugin_python/tests/runner/plugins/dummy-game.py45
-rw-r--r--libs/plugin_python/tests/runner/plugins/dummy-installer.py46
-rw-r--r--libs/plugin_python/tests/runner/plugins/dummy-iplugin.py29
5 files changed, 189 insertions, 0 deletions
diff --git a/libs/plugin_python/tests/runner/plugins/dummy-diagnose.py b/libs/plugin_python/tests/runner/plugins/dummy-diagnose.py
new file mode 100644
index 0000000..6f25ef0
--- /dev/null
+++ b/libs/plugin_python/tests/runner/plugins/dummy-diagnose.py
@@ -0,0 +1,37 @@
+import mobase
+
+
+class DummyDiagnose(mobase.IPluginDiagnose):
+ def activeProblems(self) -> list[int]:
+ return [1, 2]
+
+ def shortDescription(self, key: int) -> str:
+ return f"short-{key}"
+
+ def fullDescription(self, key: int) -> str:
+ return f"long-{key}"
+
+ def hasGuidedFix(self, key: int) -> bool:
+ return key == 1
+
+
+class DummyDiagnoseAndGame(mobase.IPluginDiagnose, mobase.IPluginGame):
+ def __init__(self):
+ mobase.IPluginDiagnose.__init__(self)
+ mobase.IPluginGame.__init__(self)
+
+ def activeProblems(self) -> list[int]:
+ return [5, 7]
+
+ def shortDescription(self, key: int) -> str:
+ return f"short-{key}"
+
+ def fullDescription(self, key: int) -> str:
+ return f"long-{key}"
+
+ def hasGuidedFix(self, key: int) -> bool:
+ return key == 7
+
+
+def createPlugins() -> list[mobase.IPlugin]:
+ return [DummyDiagnose(), DummyDiagnoseAndGame()] # type: ignore
diff --git a/libs/plugin_python/tests/runner/plugins/dummy-filemapper.py b/libs/plugin_python/tests/runner/plugins/dummy-filemapper.py
new file mode 100644
index 0000000..1993b55
--- /dev/null
+++ b/libs/plugin_python/tests/runner/plugins/dummy-filemapper.py
@@ -0,0 +1,32 @@
+import mobase
+
+
+class DummyFileMapper(mobase.IPluginFileMapper):
+ def mappings(self) -> list[mobase.Mapping]:
+ return [
+ mobase.Mapping(
+ source="the source", destination="the destination", is_directory=False
+ ),
+ mobase.Mapping(
+ source="the other source",
+ destination="the other destination",
+ is_directory=True,
+ ),
+ ]
+
+
+class DummyFileMapperAndGame(mobase.IPluginFileMapper, mobase.IPluginGame):
+ def __init__(self):
+ mobase.IPluginFileMapper.__init__(self)
+ mobase.IPluginGame.__init__(self)
+
+ def mappings(self) -> list[mobase.Mapping]:
+ return [
+ mobase.Mapping(
+ source="the source", destination="the destination", is_directory=False
+ ),
+ ]
+
+
+def createPlugins() -> list[mobase.IPlugin]:
+ return [DummyFileMapper(), DummyFileMapperAndGame()] # type: ignore
diff --git a/libs/plugin_python/tests/runner/plugins/dummy-game.py b/libs/plugin_python/tests/runner/plugins/dummy-game.py
new file mode 100644
index 0000000..e17c9b8
--- /dev/null
+++ b/libs/plugin_python/tests/runner/plugins/dummy-game.py
@@ -0,0 +1,45 @@
+from collections.abc import Sequence
+
+from PyQt6.QtWidgets import QWidget
+
+import mobase
+
+
+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, Sequence[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/libs/plugin_python/tests/runner/plugins/dummy-installer.py b/libs/plugin_python/tests/runner/plugins/dummy-installer.py
new file mode 100644
index 0000000..3c4e67e
--- /dev/null
+++ b/libs/plugin_python/tests/runner/plugins/dummy-installer.py
@@ -0,0 +1,46 @@
+# -*- encoding: utf-8 -*-
+
+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 isManualInstaller(self) -> bool:
+ return False
+
+ def priority(self) -> int:
+ return 10
+
+ def isArchiveSupported(self, tree: mobase.IFileTree) -> bool:
+ return tree.find("needed-file.txt") is not None
+
+ def install(
+ self,
+ name: mobase.GuessedString,
+ tree: mobase.IFileTree,
+ version: str,
+ nexus_id: int,
+ ) -> Union[
+ mobase.InstallResult,
+ mobase.IFileTree,
+ tuple[mobase.InstallResult, mobase.IFileTree, str, int],
+ ]:
+ if tree.find("needed-file.txt") is None:
+ return mobase.InstallResult.FAILED
+
+ if tree.find("extra-file.txt"):
+ name.update("new name")
+ new_tree = tree.createOrphanTree()
+ new_tree.move(tree, "subtree")
+ cast(mobase.IFileTree, new_tree.find("subtree")).remove("extra-file.txt")
+ return new_tree
+
+ return (mobase.InstallResult.NOT_ATTEMPTED, tree, "2.4.5", 33)
+
+
+def createPlugin() -> mobase.IPlugin:
+ return DummyInstaller() # type: ignore
diff --git a/libs/plugin_python/tests/runner/plugins/dummy-iplugin.py b/libs/plugin_python/tests/runner/plugins/dummy-iplugin.py
new file mode 100644
index 0000000..eaaf6c0
--- /dev/null
+++ b/libs/plugin_python/tests/runner/plugins/dummy-iplugin.py
@@ -0,0 +1,29 @@
+import mobase
+
+
+class DummyPlugin(mobase.IPlugin):
+ def init(self, organizer: mobase.IOrganizer) -> bool:
+ return True
+
+ def author(self) -> str:
+ return "The Author"
+
+ def name(self) -> str:
+ return "The Name"
+
+ def description(self) -> str:
+ return "The Description"
+
+ def version(self) -> mobase.VersionInfo:
+ return mobase.VersionInfo("1.3.0")
+
+ def settings(self) -> list[mobase.PluginSetting]:
+ return [
+ mobase.PluginSetting(
+ "a setting", "the setting description", default_value=12
+ )
+ ]
+
+
+def createPlugin() -> mobase.IPlugin:
+ return DummyPlugin()