123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- <?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()
- {
- }
- }
|