Add tests for IPluginDiagnose and IPluginFileMapper.

This commit is contained in:
Mikaël Capelle
2022-05-04 19:09:02 +02:00
parent 639c3cf71d
commit 94bd8b82b4
4 changed files with 196 additions and 0 deletions
+39
View File
@@ -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()]
+34
View File
@@ -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()]
+60
View File
@@ -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);
}
}
+63
View File
@@ -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);
}
}