helpers = new HelperRegistry(); $this->helpers->setIo($io); } /** * tearDown */ public function tearDown(): void { unset($this->helpers); parent::tearDown(); } /** * test loading helpers. */ public function testLoad(): void { $result = $this->helpers->load('Simple'); $this->assertInstanceOf(SimpleHelper::class, $result); $this->assertInstanceOf(SimpleHelper::class, $this->helpers->Simple); $result = $this->helpers->loaded(); $this->assertEquals(['Simple'], $result, 'loaded() results are wrong.'); } /** * test loading helpers. */ public function testLoadCommandNamespace(): void { $result = $this->helpers->load('Command'); $this->assertInstanceOf(CommandHelper::class, $result); $this->assertInstanceOf(CommandHelper::class, $this->helpers->Command); $result = $this->helpers->loaded(); $this->assertEquals(['Command'], $result, 'loaded() results are wrong.'); } /** * test triggering callbacks on loaded helpers */ public function testLoadWithConfig(): void { $result = $this->helpers->load('Simple', ['key' => 'value']); $this->assertSame('value', $result->getConfig('key')); } /** * test missing helper exception */ public function testLoadMissingHelper(): void { $this->expectException(MissingHelperException::class); $this->helpers->load('ThisTaskShouldAlwaysBeMissing'); } /** * Tests loading as an alias */ public function testLoadWithAlias(): void { $this->loadPlugins(['TestPlugin']); $result = $this->helpers->load('SimpleAliased', ['className' => 'Simple']); $this->assertInstanceOf(SimpleHelper::class, $result); $this->assertInstanceOf(SimpleHelper::class, $this->helpers->SimpleAliased); $result = $this->helpers->loaded(); $this->assertEquals(['SimpleAliased'], $result, 'loaded() results are wrong.'); $result = $this->helpers->load('SomeHelper', ['className' => 'TestPlugin.Example']); $this->assertInstanceOf(ExampleHelper::class, $result); $this->assertInstanceOf(ExampleHelper::class, $this->helpers->SomeHelper); $result = $this->helpers->loaded(); $this->assertEquals(['SimpleAliased', 'SomeHelper'], $result, 'loaded() results are wrong.'); $this->clearPlugins(); } }