mirror of
https://github.com/ModOrganizer2/modorganizer-plugin_python.git
synced 2026-07-27 14:03:33 -07:00
Add tests for IPluginDiagnose and IPluginFileMapper.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
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()]
|
||||
@@ -0,0 +1,34 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
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()]
|
||||
@@ -0,0 +1,60 @@
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "pythonrunner.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
|
||||
#include "MockOrganizer.h"
|
||||
#include "iplugindiagnose.h"
|
||||
#include "iplugingame.h"
|
||||
|
||||
using namespace MOBase;
|
||||
|
||||
using ::testing::ElementsAre;
|
||||
|
||||
TEST(IPluginDiagnose, Simple)
|
||||
{
|
||||
const auto plugins_folder = QString(std::getenv("PLUGIN_DIR"));
|
||||
|
||||
std::unique_ptr<IPythonRunner> runner(CreatePythonRunner());
|
||||
runner->initialize();
|
||||
|
||||
// load objects
|
||||
const auto objects = runner->load(plugins_folder + "/dummy-diagnose.py");
|
||||
EXPECT_EQ(objects.size(), 3);
|
||||
|
||||
// load the first IPluginDiagnose
|
||||
{
|
||||
IPluginDiagnose* plugin = qobject_cast<IPluginDiagnose*>(objects[0]);
|
||||
EXPECT_NE(plugin, nullptr);
|
||||
|
||||
ASSERT_THAT(plugin->activeProblems(), ElementsAre(1, 2));
|
||||
EXPECT_EQ(plugin->shortDescription(1), "short-1");
|
||||
EXPECT_EQ(plugin->fullDescription(1), "long-1");
|
||||
EXPECT_TRUE(plugin->hasGuidedFix(1));
|
||||
EXPECT_EQ(plugin->shortDescription(2), "short-2");
|
||||
EXPECT_EQ(plugin->fullDescription(2), "long-2");
|
||||
EXPECT_FALSE(plugin->hasGuidedFix(2));
|
||||
}
|
||||
|
||||
// load the second one (this is cast before IPluginGame so should be before)
|
||||
{
|
||||
IPluginDiagnose* plugin = qobject_cast<IPluginDiagnose*>(objects[1]);
|
||||
EXPECT_NE(plugin, nullptr);
|
||||
|
||||
ASSERT_THAT(plugin->activeProblems(), ElementsAre(5, 7));
|
||||
EXPECT_EQ(plugin->shortDescription(5), "short-5");
|
||||
EXPECT_EQ(plugin->fullDescription(5), "long-5");
|
||||
EXPECT_FALSE(plugin->hasGuidedFix(5));
|
||||
EXPECT_EQ(plugin->shortDescription(7), "short-7");
|
||||
EXPECT_EQ(plugin->fullDescription(7), "long-7");
|
||||
EXPECT_TRUE(plugin->hasGuidedFix(7));
|
||||
}
|
||||
|
||||
// load the game plugin
|
||||
{
|
||||
IPluginGame* plugin = qobject_cast<IPluginGame*>(objects[2]);
|
||||
EXPECT_NE(plugin, nullptr);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "pythonrunner.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
|
||||
#include "MockOrganizer.h"
|
||||
#include "ipluginfilemapper.h"
|
||||
#include "iplugingame.h"
|
||||
|
||||
using namespace MOBase;
|
||||
|
||||
TEST(IPluginFileMapper, Simple)
|
||||
{
|
||||
const auto plugins_folder = QString(std::getenv("PLUGIN_DIR"));
|
||||
|
||||
std::unique_ptr<IPythonRunner> runner(CreatePythonRunner());
|
||||
runner->initialize();
|
||||
|
||||
// load objects
|
||||
const auto objects = runner->load(plugins_folder + "/dummy-filemapper.py");
|
||||
EXPECT_EQ(objects.size(), 3);
|
||||
|
||||
// load the first IPluginFileMapper
|
||||
{
|
||||
IPluginFileMapper* plugin = qobject_cast<IPluginFileMapper*>(objects[0]);
|
||||
EXPECT_NE(plugin, nullptr);
|
||||
|
||||
const auto m = plugin->mappings();
|
||||
EXPECT_EQ(m.size(), 2);
|
||||
|
||||
EXPECT_EQ(m[0].source, "the source");
|
||||
EXPECT_EQ(m[0].destination, "the destination");
|
||||
EXPECT_EQ(m[0].isDirectory, false);
|
||||
EXPECT_EQ(m[0].createTarget, false);
|
||||
|
||||
EXPECT_EQ(m[1].source, "the other source");
|
||||
EXPECT_EQ(m[1].destination, "the other destination");
|
||||
EXPECT_EQ(m[1].isDirectory, true);
|
||||
EXPECT_EQ(m[1].createTarget, false);
|
||||
}
|
||||
|
||||
// load the second one (this is cast before IPluginGame so should be before)
|
||||
{
|
||||
IPluginFileMapper* plugin = qobject_cast<IPluginFileMapper*>(objects[1]);
|
||||
EXPECT_NE(plugin, nullptr);
|
||||
|
||||
const auto m = plugin->mappings();
|
||||
EXPECT_EQ(m.size(), 1);
|
||||
|
||||
EXPECT_EQ(m[0].source, "the source");
|
||||
EXPECT_EQ(m[0].destination, "the destination");
|
||||
EXPECT_EQ(m[0].isDirectory, false);
|
||||
EXPECT_EQ(m[0].createTarget, false);
|
||||
}
|
||||
|
||||
// load the game plugin
|
||||
{
|
||||
IPluginGame* plugin = qobject_cast<IPluginGame*>(objects[2]);
|
||||
EXPECT_NE(plugin, nullptr);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user