. * * @author TechFuze * @copyright Copyright (c) 2013 - 2016, Techfuze. (http://techfuze.net) * @copyright Copyright (c) 1996 - 2015, Free Software Foundation, Inc. (http://www.fsf.org/) * @license http://opensource.org/licenses/GPL-3.0 GPLv3 License * * @link http://techfuze.net/fuzeworks * @since Version 0.0.1 * * @version Version 1.0.0 */ use FuzeWorks\Events; use FuzeWorks\Factory; use FuzeWorks\EventPriority; /** * Class LayoutLoadEventTest. */ class layoutLoadEventTest extends CoreTestAbstract { protected $factory; public function setUp() { // Load the factory first $this->factory = Factory::getInstance(); } /** * Check if the event is fired when it should be. */ public function test_basic() { $mock = $this->getMockBuilder(MockLayoutEventTest::class)->setMethods(['mockMethod'])->getMock(); $mock->expects($this->once())->method('mockMethod'); Events::addListener(array($mock, 'mockMethod'), 'layoutLoadEvent', EventPriority::NORMAL); // And run the test $this->factory->layout->get('home'); } /** * Intercept and change the event. * * @expectedException FuzeWorks\Exception\LayoutException */ public function test_change() { Events::addListener(array($this, 'listener_change'), 'layoutLoadEvent', EventPriority::NORMAL); $this->factory->layout->get('home'); } // Change title from new to other public function listener_change($event) { // This controller should not exist $this->assertTrue(strpos($event->file, 'application'.DS.'Layout'.DS.'layout.home.php') !== false); $this->assertTrue(strpos($event->directory, 'application'.DS.'Layout'.DS) !== false); // It should exist now $event->file = $event->directory . 'layout.test.not_found'; return $event; } /** * Cancel events. */ public function test_cancel() { // Listen for the event and cancel it Events::addListener(array($this, 'listener_cancel'), 'layoutLoadEvent', EventPriority::NORMAL); $this->assertFalse($this->factory->layout->get('home') === true); } // Cancel all calls public function listener_cancel($event) { $event->setCancelled(true); return $event; } } class MockLayoutEventTest { public function MockMethod() {} }