View = new View(); $this->Events = $this->View->eventManager(); $this->Helpers = new HelperRegistry($this->View); } /** * tearDown * * @return void */ public function tearDown() { Plugin::unload(); unset($this->Helpers, $this->View); parent::tearDown(); } /** * test loading helpers. * * @return void */ public function testLoad() { $result = $this->Helpers->load('Html'); $this->assertInstanceOf('Cake\View\Helper\HtmlHelper', $result); $this->assertInstanceOf('Cake\View\Helper\HtmlHelper', $this->Helpers->Html); $result = $this->Helpers->loaded(); $this->assertEquals(array('Html'), $result, 'loaded() results are wrong.'); } /** * test lazy loading of helpers * * @return void */ public function testLazyLoad() { $result = $this->Helpers->Html; $this->assertInstanceOf('Cake\View\Helper\HtmlHelper', $result); $result = $this->Helpers->Form; $this->assertInstanceOf('Cake\View\Helper\FormHelper', $result); $this->View->plugin = 'TestPlugin'; Plugin::load(array('TestPlugin')); $result = $this->Helpers->OtherHelper; $this->assertInstanceOf('TestPlugin\View\Helper\OtherHelperHelper', $result); } /** * test lazy loading of helpers * * @expectedException \Cake\View\Exception\MissingHelperException * @return void */ public function testLazyLoadException() { $this->Helpers->NotAHelper; } /** * Test that loading helpers subscribes to events. * * @return void */ public function testLoadSubscribeEvents() { $this->Helpers->load('Html', array('className' => __NAMESPACE__ . '\HtmlAliasHelper')); $result = $this->Events->listeners('View.afterRender'); $this->assertCount(1, $result); } /** * Tests loading as an alias * * @return void */ public function testLoadWithAlias() { $result = $this->Helpers->load('Html', array('className' => __NAMESPACE__ . '\HtmlAliasHelper')); $this->assertInstanceOf(__NAMESPACE__ . '\HtmlAliasHelper', $result); $this->assertInstanceOf(__NAMESPACE__ . '\HtmlAliasHelper', $this->Helpers->Html); $result = $this->Helpers->loaded(); $this->assertEquals(array('Html'), $result, 'loaded() results are wrong.'); $result = $this->Helpers->load('Html'); $this->assertInstanceOf(__NAMESPACE__ . '\HtmlAliasHelper', $result); } /** * Test loading helpers with aliases and plugins. * * @return void */ public function testLoadWithAliasAndPlugin() { Plugin::load('TestPlugin'); $result = $this->Helpers->load('SomeOther', array('className' => 'TestPlugin.OtherHelper')); $this->assertInstanceOf('TestPlugin\View\Helper\OtherHelperHelper', $result); $this->assertInstanceOf('TestPlugin\View\Helper\OtherHelperHelper', $this->Helpers->SomeOther); $result = $this->Helpers->loaded(); $this->assertEquals(['SomeOther'], $result, 'loaded() results are wrong.'); } /** * test that the enabled setting disables the helper. * * @return void */ public function testLoadWithEnabledFalse() { $result = $this->Helpers->load('Html', array('enabled' => false)); $this->assertInstanceOf('Cake\View\Helper\HtmlHelper', $result); $this->assertInstanceOf('Cake\View\Helper\HtmlHelper', $this->Helpers->Html); $this->assertEmpty($this->Events->listeners('View.beforeRender')); } /** * test missinghelper exception * * @expectedException \Cake\View\Exception\MissingHelperException * @return void */ public function testLoadMissingHelper() { $this->Helpers->load('ThisHelperShouldAlwaysBeMissing'); } /** * test loading a plugin helper. * * @return void */ public function testLoadPluginHelper() { Plugin::load(array('TestPlugin')); $result = $this->Helpers->load('TestPlugin.OtherHelper'); $this->assertInstanceOf('TestPlugin\View\Helper\OtherHelperHelper', $result, 'Helper class is wrong.'); $this->assertInstanceOf('TestPlugin\View\Helper\OtherHelperHelper', $this->Helpers->OtherHelper, 'Class is wrong'); } /** * Test reset. * * @return void */ public function testReset() { Configure::write('App.namespace', 'TestApp'); $instance = $this->Helpers->load('EventListenerTest'); $this->assertSame( $instance, $this->Helpers->EventListenerTest, 'Instance in registry should be the same as previously loaded' ); $this->assertCount(1, $this->Events->listeners('View.beforeRender')); $this->assertNull($this->Helpers->reset(), 'No return expected'); $this->assertCount(0, $this->Events->listeners('View.beforeRender')); $this->assertNotSame($instance, $this->Helpers->load('EventListenerTest')); } /** * Test unloading. * * @return void */ public function testUnload() { Configure::write('App.namespace', 'TestApp'); $instance = $this->Helpers->load('EventListenerTest'); $this->assertSame( $instance, $this->Helpers->EventListenerTest, 'Instance in registry should be the same as previously loaded' ); $this->assertCount(1, $this->Events->listeners('View.beforeRender')); $this->assertNull($this->Helpers->unload('EventListenerTest'), 'No return expected'); $this->assertCount(0, $this->Events->listeners('View.beforeRender')); } /** * Loading a helper with no config should "just work" * * @return void */ public function testLoadMultipleTimesNoConfig() { $this->Helpers->load('Html'); $this->Helpers->load('Html'); $this->assertTrue(true, 'Unable to load the same helper with no config'); } /** * Loading a helper with bespoke config, where the subsequent load specifies no * config should "just work" * * @return void */ public function testLoadMultipleTimesAlreadyConfigured() { $this->Helpers->load('Html', ['same' => 'stuff']); $this->Helpers->load('Html'); $this->assertTrue(true, 'Unable to load an already-configured helper with no config'); } /** * Loading a helper with different config, should bark * * @expectedException RuntimeException * @return void */ public function testLoadMultipleTimesDifferentConfigured() { $this->Helpers->load('Html'); $this->Helpers->load('Html', ['same' => 'stuff']); } }