IOP-Patho/vendor/codeception/base/tests/unit/Codeception/Lib/ModuleContainerTest.php

458 lines
14 KiB
PHP
Raw Permalink Normal View History

2025-07-17 08:28:28 +00:00
<?php
namespace Codeception\Lib;
use Codeception\Lib\Interfaces\ConflictsWithModule;
use Codeception\Lib\Interfaces\DependsOnModule;
use Codeception\Test\Unit;
use Codeception\Util\Stub;
// @codingStandardsIgnoreFile
class ModuleContainerTest extends Unit
{
use \Codeception\Specify;
/**
* @var ModuleContainer
*/
protected $moduleContainer;
protected function setUp()
{
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), []);
}
protected function tearDown()
{
\Codeception\Module\UniversalFramework::$includeInheritedActions = true;
\Codeception\Module\UniversalFramework::$onlyActions = [];
\Codeception\Module\UniversalFramework::$excludeActions = [];
\Codeception\Module\UniversalFramework::$aliases = [];
}
/**
* @group core
* @throws \Codeception\Exception\ConfigurationException
*/
public function testCreateModule()
{
$module = $this->moduleContainer->create('EmulateModuleHelper');
$this->assertInstanceOf('Codeception\Module\EmulateModuleHelper', $module);
$module = $this->moduleContainer->create('Codeception\Module\EmulateModuleHelper');
$this->assertInstanceOf('Codeception\Module\EmulateModuleHelper', $module);
$this->assertTrue($this->moduleContainer->hasModule('EmulateModuleHelper'));
$this->assertInstanceOf(
'Codeception\Module\EmulateModuleHelper',
$this->moduleContainer->getModule('EmulateModuleHelper')
);
}
/**
* @group core
*/
public function testActions()
{
$this->moduleContainer->create('EmulateModuleHelper');
$actions = $this->moduleContainer->getActions();
$this->assertArrayHasKey('seeEquals', $actions);
$this->assertEquals('EmulateModuleHelper', $actions['seeEquals']);
}
/**
* @group core
*/
public function testActionsInExtendedModule()
{
$this->moduleContainer->create('\Codeception\Module\UniversalFramework');
$actions = $this->moduleContainer->getActions();
$this->assertArrayHasKey('amOnPage', $actions);
$this->assertArrayHasKey('see', $actions);
$this->assertArrayHasKey('click', $actions);
}
/**
* @group core
*/
public function testActionsInExtendedButNotInheritedModule()
{
\Codeception\Module\UniversalFramework::$includeInheritedActions = false;
$this->moduleContainer->create('\Codeception\Module\UniversalFramework');
$actions = $this->moduleContainer->getActions();
$this->assertArrayNotHasKey('amOnPage', $actions);
$this->assertArrayNotHasKey('see', $actions);
$this->assertArrayNotHasKey('click', $actions);
$this->assertArrayHasKey('useUniversalFramework', $actions);
}
/**
* @group core
*/
public function testExplicitlySetActionsOnNotInherited()
{
\Codeception\Module\UniversalFramework::$includeInheritedActions = false;
\Codeception\Module\UniversalFramework::$onlyActions = ['see'];
$this->moduleContainer->create('\Codeception\Module\UniversalFramework');
$actions = $this->moduleContainer->getActions();
$this->assertArrayNotHasKey('amOnPage', $actions);
$this->assertArrayHasKey('see', $actions);
$this->assertArrayNotHasKey('click', $actions);
}
/**
* @group core
*/
public function testActionsExplicitlySetForNotInheritedModule()
{
\Codeception\Module\UniversalFramework::$onlyActions = ['see'];
$this->moduleContainer->create('\Codeception\Module\UniversalFramework');
$actions = $this->moduleContainer->getActions();
$this->assertArrayNotHasKey('amOnPage', $actions);
$this->assertArrayHasKey('see', $actions);
}
/**
* @group core
*/
public function testCreateModuleWithoutRequiredFields()
{
$this->setExpectedException('\Codeception\Exception\ModuleConfigException');
$this->moduleContainer->create('Codeception\Lib\StubModule');
}
/**
* @group core
*/
public function testCreateModuleWithCorrectConfig()
{
$config = [
'modules' => [
'config' => [
'Codeception\Lib\StubModule' => [
'firstField' => 'firstValue',
'secondField' => 'secondValue',
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$module = $this->moduleContainer->create('Codeception\Lib\StubModule');
$this->assertEquals('firstValue', $module->_getFirstField());
$this->assertEquals('secondValue', $module->_getSecondField());
}
/**
* @group core
*/
public function testReconfigureModule()
{
$config = [
'modules' => [
'config' => [
'Codeception\Lib\StubModule' => [
'firstField' => 'firstValue',
'secondField' => 'secondValue',
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$module = $this->moduleContainer->create('Codeception\Lib\StubModule');
$module->_reconfigure(['firstField' => '1st', 'secondField' => '2nd']);
$this->assertEquals('1st', $module->_getFirstField());
$this->assertEquals('2nd', $module->_getSecondField());
$module->_resetConfig();
$this->assertEquals('firstValue', $module->_getFirstField());
$this->assertEquals('secondValue', $module->_getSecondField());
}
public function testConflictsByModuleName()
{
$this->setExpectedException('Codeception\Exception\ModuleConflictException');
$this->moduleContainer->create('Codeception\Lib\ConflictedModule');
$this->moduleContainer->create('Cli');
$this->moduleContainer->validateConflicts();
}
public function testConflictsByClass()
{
$this->setExpectedException('Codeception\Exception\ModuleConflictException');
$this->moduleContainer->create('Codeception\Lib\ConflictedModule2');
$this->moduleContainer->create('Cli');
$this->moduleContainer->validateConflicts();
}
public function testConflictsByInterface()
{
$this->setExpectedException('Codeception\Exception\ModuleConflictException');
$this->moduleContainer->create('Codeception\Lib\ConflictedModule3');
$this->moduleContainer->create('Symfony2');
$this->moduleContainer->validateConflicts();
}
public function testConflictsByWebInterface()
{
$this->setExpectedException('Codeception\Exception\ModuleConflictException');
$this->moduleContainer->create('Laravel5');
$this->moduleContainer->create('Symfony2');
$this->moduleContainer->validateConflicts();
}
public function testConflictsForREST()
{
$config = ['modules' =>
['config' => [
'REST' => [
'depends' => 'ZF1',
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('ZF1');
$this->moduleContainer->create('REST');
$this->moduleContainer->validateConflicts();
}
public function testConflictsOnDependentModules()
{
$config = ['modules' =>
['config' => [
'WebDriver' => ['url' => 'localhost', 'browser' => 'firefox'],
'REST' => [
'depends' => 'PhpBrowser',
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('WebDriver');
$this->moduleContainer->create('REST');
$this->moduleContainer->validateConflicts();
}
public function testNoConflictsForPartedModules()
{
$config = ['modules' =>
['config' => [
'Laravel5' => [
'part' => 'ORM',
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('Laravel5');
$this->moduleContainer->create('Symfony2');
$this->moduleContainer->validateConflicts();
}
public function testModuleDependenciesFail()
{
$this->setExpectedException('Codeception\Exception\ModuleRequireException');
$this->moduleContainer->create('Codeception\Lib\DependencyModule');
}
public function testModuleDependencies()
{
$config = ['modules' => [
'enabled' => ['Codeception\Lib\DependencyModule'],
'config' => [
'Codeception\Lib\DependencyModule' => [
'depends' => 'Codeception\Lib\ConflictedModule'
]
]
]];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('Codeception\Lib\DependencyModule');
$this->moduleContainer->hasModule('\Codeception\Lib\DependencyModule');
}
public function testModuleParts1()
{
$config = ['modules' => [
'enabled' => ['\Codeception\Lib\PartedModule'],
'config' => [
'\Codeception\Lib\PartedModule' => [
'part' => 'one'
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('\Codeception\Lib\PartedModule');
$actions = $this->moduleContainer->getActions();
$this->assertArrayHasKey('partOne', $actions);
$this->assertArrayNotHasKey('partTwo', $actions);
}
public function testModuleParts2()
{
$config = ['modules' => [
'enabled' => ['\Codeception\Lib\PartedModule'],
'config' => ['\Codeception\Lib\PartedModule' => [
'part' => ['Two']
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('\Codeception\Lib\PartedModule');
$actions = $this->moduleContainer->getActions();
$this->assertArrayHasKey('partTwo', $actions);
$this->assertArrayNotHasKey('partOne', $actions);
}
public function testShortConfigParts()
{
$config = [
'modules' => [
'enabled' => [
['\Codeception\Lib\PartedModule' => [
'part' => 'one'
]
]
],
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('\Codeception\Lib\PartedModule');
$actions = $this->moduleContainer->getActions();
$this->assertArrayHasKey('partOne', $actions);
$this->assertArrayNotHasKey('partTwo', $actions);
}
public function testShortConfigFormat()
{
$config = [
'modules' =>
['enabled' => [
['Codeception\Lib\StubModule' => [
'firstField' => 'firstValue',
'secondField' => 'secondValue',
]
]
]
]
];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$module = $this->moduleContainer->create('Codeception\Lib\StubModule');
$this->assertEquals('firstValue', $module->_getFirstField());
$this->assertEquals('secondValue', $module->_getSecondField());
}
public function testShortConfigDependencies()
{
$config = ['modules' => [
'enabled' => [['Codeception\Lib\DependencyModule' => [
'depends' => 'Codeception\Lib\ConflictedModule'
]]],
]];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('Codeception\Lib\DependencyModule');
$this->moduleContainer->hasModule('\Codeception\Lib\DependencyModule');
}
public function testInjectModuleIntoHelper()
{
$config = ['modules' => [
'enabled' => ['Codeception\Lib\HelperModule'],
]];
$this->moduleContainer = new ModuleContainer(Stub::make('Codeception\Lib\Di'), $config);
$this->moduleContainer->create('Codeception\Lib\HelperModule');
$this->moduleContainer->hasModule('Codeception\Lib\HelperModule');
}
}
class StubModule extends \Codeception\Module
{
protected $requiredFields = [
'firstField',
'secondField',
];
public function _getFirstField()
{
return $this->config['firstField'];
}
public function _getSecondField()
{
return $this->config['secondField'];
}
}
class HelperModule extends \Codeception\Module
{
public function _inject(ConflictedModule $module)
{
$this->module = $module;
}
}
class ConflictedModule extends \Codeception\Module implements ConflictsWithModule
{
public function _conflicts()
{
return 'Cli';
}
}
class ConflictedModule2 extends \Codeception\Module implements ConflictsWithModule
{
public function _conflicts()
{
return '\Codeception\Module\Cli';
}
}
class ConflictedModule3 extends \Codeception\Module implements ConflictsWithModule
{
public function _conflicts()
{
return 'Codeception\Lib\Interfaces\Web';
}
}
class DependencyModule extends \Codeception\Module implements DependsOnModule
{
public function _depends()
{
return ['Codeception\Lib\ConflictedModule' => 'Error message'];
}
public function _inject()
{
}
}
class PartedModule extends \Codeception\Module implements \Codeception\Lib\Interfaces\PartedModule
{
public function _parts()
{
return ['one'];
}
/**
* @part one
*/
public function partOne()
{
}
/**
* @part two
*/
public function partTwo()
{
}
}