mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
add tests to cover this change
This commit is contained in:
@@ -83,4 +83,134 @@ class MetaModelTest extends ItopDataTestCase
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider enumPluginsProvider
|
||||
*
|
||||
* @param $expectedResults
|
||||
* @param $m_aExtensionClassNames
|
||||
* @param $m_aExtensionClasses
|
||||
* @param $interface
|
||||
* @param null $sFilterInstanceOf
|
||||
*/
|
||||
public function testEnumPlugins($expectedInstanciationCalls, $expectedResults, $m_aExtensionClassNames, $m_aExtensionClasses, $interface, $sFilterInstanceOf=null)
|
||||
{
|
||||
$pluginInstanciationManager = new \PluginInstanciationManager();
|
||||
$res = $pluginInstanciationManager->InstantiatePlugins($m_aExtensionClassNames, $interface);
|
||||
|
||||
$mPluginInstanciationManager = $this->createMock(\PluginInstanciationManager::class);
|
||||
$mPluginInstanciationManager->expects($this->exactly($expectedInstanciationCalls))
|
||||
->method('InstantiatePlugins')
|
||||
->willReturn($res);
|
||||
$m_PluginManager = new \PluginManager($m_aExtensionClassNames, $m_aExtensionClasses, $mPluginInstanciationManager);
|
||||
|
||||
//warning: called twice on purpose
|
||||
$m_PluginManager->EnumPlugins($interface, $sFilterInstanceOf);
|
||||
$pluginInstances = $m_PluginManager->EnumPlugins($interface, $sFilterInstanceOf);
|
||||
|
||||
$this->assertCount(sizeof($expectedResults), $pluginInstances);
|
||||
foreach($pluginInstances as $pluginInstance)
|
||||
{
|
||||
if ($sFilterInstanceOf!==null)
|
||||
{
|
||||
$this->assertTrue($pluginInstance instanceof $sFilterInstanceOf);
|
||||
}
|
||||
}
|
||||
$index=0;
|
||||
foreach($expectedResults as $expectedInterface)
|
||||
{
|
||||
$this->assertTrue(is_a($pluginInstances[$index], $expectedInterface));
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
|
||||
public function enumPluginsProvider(){
|
||||
$aInterfaces = [
|
||||
"empty conf" => [ 0, [], [], [], 'Wizzard'],
|
||||
"simple instance retrieval" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class]], [], 'Wizzard'],
|
||||
"check instanceof parameter" => [ 1, [Gryffindor::class, Slytherin::class], [ 'Wizzard' => [ Gryffindor::class, Slytherin::class]], [], 'Wizzard'],
|
||||
"try to retrieve a non instanciable object" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Muggle::class]], [], 'Wizzard', Gryffindor::class ],
|
||||
];
|
||||
return $aInterfaces;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getPluginsProvider
|
||||
*
|
||||
* @param $expectedInstanciationCalls
|
||||
* @param $expectedResults
|
||||
* @param $m_aExtensionClassNames
|
||||
* @param $m_aExtensionClasses
|
||||
* @param $interface
|
||||
* @param $className
|
||||
*/
|
||||
public function testGetPlugins($expectedInstanciationCalls, $expectedResults, $m_aExtensionClassNames, $m_aExtensionClasses, $interface, $className)
|
||||
{
|
||||
$pluginInstanciationManager = new \PluginInstanciationManager();
|
||||
$res = $pluginInstanciationManager->InstantiatePlugins($m_aExtensionClassNames, $interface);
|
||||
|
||||
$mPluginInstanciationManager = $this->createMock(\PluginInstanciationManager::class);
|
||||
$mPluginInstanciationManager->expects($this->exactly($expectedInstanciationCalls))
|
||||
->method('InstantiatePlugins')
|
||||
->willReturn($res);
|
||||
$m_PluginManager = new \PluginManager($m_aExtensionClassNames, $m_aExtensionClasses, $mPluginInstanciationManager);
|
||||
|
||||
//warning: called twice on purpose
|
||||
$m_PluginManager->GetPlugins($interface, $className);
|
||||
$pluginInstance = $m_PluginManager->GetPlugins($interface, $className);
|
||||
|
||||
if (sizeof($expectedResults)==0)
|
||||
{
|
||||
$this->assertNull($pluginInstance);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->assertTrue($pluginInstance instanceof $className);
|
||||
$this->assertTrue(is_a($pluginInstance, $expectedResults[0]));
|
||||
}
|
||||
|
||||
public function getPluginsProvider(){
|
||||
$aInterfaces = [
|
||||
"empty conf" => [ 0, [], [], [], 'Wizzard', Gryffindor::class],
|
||||
"simple instance retrieval" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class]], [], 'Wizzard', Gryffindor::class],
|
||||
"check instanceof parameter" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Slytherin::class]], [], 'Wizzard', Gryffindor::class],
|
||||
"try to retrieve a non instanciable object" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Muggle::class]], [], 'Wizzard', Gryffindor::class ],
|
||||
];
|
||||
return $aInterfaces;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
abstract class Wizzard
|
||||
{
|
||||
|
||||
/**
|
||||
* Wizzard constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
class Gryffindor extends Wizzard
|
||||
{
|
||||
|
||||
}
|
||||
class Hufflepuff extends Wizzard
|
||||
{
|
||||
|
||||
}
|
||||
class Ravenclaw extends Wizzard
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
class Slytherin extends Wizzard
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
class Muggle
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user