| <?php | |
| /** | |
|  * Flight: An extensible micro-framework. | |
|  * | |
|  * @copyright   Copyright (c) 2012, Mike Cao <mike@mikecao.com> | |
|  * @license     MIT, http://flightphp.com/license | |
|  */ | |
| 
 | |
| require_once 'vendor/autoload.php'; | |
| require_once __DIR__.'/classes/Hello.php'; | |
| 
 | |
| class DispatcherTest extends PHPUnit_Framework_TestCase | |
| { | |
|     /** | |
|      * @var \flight\core\Dispatcher | |
|      */ | |
|     private $dispatcher; | |
| 
 | |
|     function setUp(){ | |
|         $this->dispatcher = new \flight\core\Dispatcher(); | |
|     } | |
| 
 | |
|     // Map a closure | |
|     function testClosureMapping(){ | |
|         $this->dispatcher->set('map1', function(){ | |
|             return 'hello'; | |
|         }); | |
| 
 | |
|         $result = $this->dispatcher->run('map1'); | |
| 
 | |
|         $this->assertEquals('hello', $result); | |
|     } | |
| 
 | |
|     // Map a function | |
|     function testFunctionMapping(){ | |
|         $this->dispatcher->set('map2', function(){ | |
|             return 'hello'; | |
|         }); | |
| 
 | |
|         $result = $this->dispatcher->run('map2'); | |
| 
 | |
|         $this->assertEquals('hello', $result); | |
|     } | |
| 
 | |
|     // Map a class method | |
|     function testClassMethodMapping(){ | |
|         $h = new Hello(); | |
| 
 | |
|         $this->dispatcher->set('map3', array($h, 'sayHi')); | |
| 
 | |
|         $result = $this->dispatcher->run('map3'); | |
| 
 | |
|         $this->assertEquals('hello', $result); | |
|     } | |
| 
 | |
|     // Map a static class method | |
|     function testStaticClassMethodMapping(){ | |
|         $this->dispatcher->set('map4', array('Hello', 'sayBye')); | |
| 
 | |
|         $result = $this->dispatcher->run('map4'); | |
| 
 | |
|         $this->assertEquals('goodbye', $result); | |
|     } | |
| 
 | |
|     // Run before and after filters | |
|     function testBeforeAndAfter() { | |
|         $this->dispatcher->set('hello', function($name){ | |
|             return "Hello, $name!"; | |
|         }); | |
| 
 | |
|         $this->dispatcher->hook('hello', 'before', function(&$params, &$output){ | |
|             // Manipulate the parameter | |
|             $params[0] = 'Fred'; | |
|         }); | |
| 
 | |
|         $this->dispatcher->hook('hello', 'after', function(&$params, &$output){ | |
|             // Manipulate the output | |
|             $output .= " Have a nice day!"; | |
|         }); | |
| 
 | |
|         $result = $this->dispatcher->run('hello', array('Bob')); | |
| 
 | |
|         $this->assertEquals('Hello, Fred! Have a nice day!', $result); | |
|     } | |
| 
 | |
|     // Test an invalid callback | |
|     function testInvalidCallback() { | |
|         $this->setExpectedException('Exception', 'Invalid callback specified.'); | |
| 
 | |
|         $this->dispatcher->execute(array('NonExistentClass', 'nonExistentMethod')); | |
|     } | |
| }
 |