예제 #1
0
 public function testDispatcher()
 {
     $this->specify("CLI Dispatcher doesn't work with typical parameters", function () {
         $di = new CliFactoryDefault();
         $di->set('data', function () {
             return "data";
         });
         $dispatcher = new Dispatcher();
         $dispatcher->setDI($di);
         $dispatcher->dispatch();
         expect($dispatcher->getTaskName())->equals('main');
         expect($dispatcher->getActionName())->equals('main');
         expect($dispatcher->getParams())->equals([]);
         expect($dispatcher->getReturnedValue())->equals('mainAction');
         $dispatcher->setTaskName('echo');
         $dispatcher->dispatch();
         expect($dispatcher->getTaskName())->equals('echo');
         expect($dispatcher->getActionName())->equals('main');
         expect($dispatcher->getParams())->equals([]);
         expect($dispatcher->getReturnedValue())->equals('echoMainAction');
         $dispatcher->setTaskName('main');
         $dispatcher->setActionName('hello');
         $dispatcher->dispatch();
         expect($dispatcher->getTaskName())->equals('main');
         expect($dispatcher->getActionName())->equals('hello');
         expect($dispatcher->getParams())->equals([]);
         expect($dispatcher->getReturnedValue())->equals('Hello !');
         $dispatcher->setActionName('hello');
         $dispatcher->setParams(array('World', '######'));
         $dispatcher->dispatch();
         expect($dispatcher->getTaskName())->equals('main');
         expect($dispatcher->getActionName())->equals('hello');
         expect($dispatcher->getParams())->equals(array('World', '######'));
         expect($dispatcher->getReturnedValue())->equals('Hello World######');
         $dispatcher->setActionName('hello');
         $dispatcher->setParams(array('hello' => 'World', 'goodbye' => 'Everybody'));
         $dispatcher->dispatch();
         expect($dispatcher->hasParam('hello'))->true();
         expect($dispatcher->hasParam('goodbye'))->true();
         expect($dispatcher->hasParam('salutations'))->false();
         // testing namespace
         try {
             $dispatcher->setDefaultNamespace('Dummy\\');
             $dispatcher->setTaskName('main');
             $dispatcher->setActionName('hello');
             $dispatcher->setParams(array('World'));
             $dispatcher->dispatch();
             expect($dispatcher->getTaskName())->equals('main');
             expect($dispatcher->getActionName())->equals('hello');
             expect($dispatcher->getParams())->equals(array('World'));
             expect($dispatcher->getReturnedValue())->equals('Hello World!');
         } catch (\Exception $e) {
             expect($e->getMessage())->equals('Dummy\\MainTask handler class cannot be loaded');
         }
     });
 }
예제 #2
0
 /**
  * CLI 模式下的 DI 配置
  *
  * @param CLI $di
  */
 protected function cliDI(CLI $di)
 {
     global $argv;
     $di->set('router', function () use($di, $argv) {
         $router = new CLIRouter();
         $router->setDI($di);
         return $router;
     });
     $di->set('output', function () {
         return new ConsoleOutput();
     });
     $di->set('dispatcher', function () use($di, $argv) {
         $dispatcher = new CLIDispatcher();
         $dispatcher->setDI($di);
         $moduleName = array_shift($argv);
         $taskName = array_shift($argv);
         $actionName = 'main';
         if (strpos($taskName, ':') > 0) {
             @(list($taskName, $actionName) = preg_split("/:/", $taskName));
         }
         if ($moduleName) {
             $dispatcher->setTaskName(ucwords($taskName));
             $dispatcher->setActionName($actionName);
             $dispatcher->setParams($argv);
             if ($moduleName == '_current') {
                 $_appName = ucwords($this->getAppName());
                 $dispatcher->setNamespaceName("{$_appName}\\Tasks");
             } else {
                 $dispatcher->setNamespaceName("Eva\\{$moduleName}\\Tasks");
             }
         } else {
             $dispatcher->setTaskName('Main');
             $dispatcher->setParams($argv);
             $dispatcher->setNamespaceName("Eva\\EvaEngine\\Tasks");
         }
         return $dispatcher;
     });
 }