[]]; $dispatchParams += $dispatchParamsDefaults; $defaults = ['format' => 'html', 'timeout' => 0]; $options += (array) $request->query + $defaults; $params = compact('request', 'dispatchParams', 'options'); return Filters::run($this, __FUNCTION__, $params, function($params) { $request = $params['request']; $options = $params['options']; $params = $params['dispatchParams']; set_time_limit((integer) $options['timeout']); $group = join('\\', (array) $params['args']); if ($group === "all") { $group = Group::all(); $options['title'] = 'All Tests'; } $this->_saveCtrlContext(); $report = Dispatcher::run($group, $options); $this->_restoreCtrlContext(); $filters = Libraries::locate('test.filter'); $menu = Libraries::locate('tests', null, [ 'filter' => '/cases|integration|functional/', 'exclude' => '/mocks/' ]); sort($menu); $menu = Set::expand(array_combine($menu, $menu), ['separator' => "\\"]); $result = compact('request', 'report', 'filters', 'menu'); return $report->render('layout', $result); }); } protected function _saveCtrlContext() { $this->_context['scope'] = Router::scope(false); $this->_context['routes'] = Router::get(); $this->_context['scopes'] = Router::attached(); Router::reset(); } protected function _restoreCtrlContext() { Router::reset(); foreach ($this->_context['routes'] as $scope => $routes) { Router::scope($scope, function() use ($routes) { foreach ($routes as $route) { Router::connect($route); } }); } foreach ($this->_context['scopes'] as $scope => $attachment) { Router::attach($scope, $attachment); } Router::scope($this->_context['scope']); } } ?>