|
|
- <?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'));
- }
- }
|