/**
  * Renders a template fragment using its own template engine, its own
  * variable scope and (optional) its own module.
  *
  * @param string      $template The name of template
  * @param array       $values   Optional; the variables to populate in the view
  * @param null|string $module   Optional; the module namespace
  *
  * @return string The result of rendering
  */
 public function __invoke($template, array $values = [], $module = null)
 {
     $model = new ViewModel($values);
     $model->setTemplate($template);
     if (!empty($module)) {
         $model->setModule($module);
     }
     $events = $this->getEvents();
     $event = new ViewEvent($model);
     $events->trigger($event);
     return $event->getResult();
 }
 public function testInvokeOnSuccess()
 {
     $server = new Server();
     $request = $server->getRequest();
     $server->setRequest($request->withAttribute('action', 'foo'));
     $model = new ViewModel();
     $model->setModule(__NAMESPACE__);
     $event = new SystemEvent();
     $event->setResult(SystemEvent::DISPATCH, $model);
     $event->setContext(new FakeController());
     $listener = new InjectTemplateListener();
     $listener->setServer($server);
     $listener($event);
     $this->assertSame('fake/foo', $model->getTemplate());
 }
 public function testInvokeDoesNothingIfModuleIsAlreadySpecifiedInViewModel()
 {
     $modules = new Modules();
     $module = $this->getMock(AbstractModule::CLASS);
     $modules->set(__NAMESPACE__, $module);
     $view = new View();
     $layout = $view->getLayout();
     $layout->setModule('Foo');
     $listener = new InjectModuleListener();
     $listener->setModules($modules);
     $listener->setView($view);
     $event = new SystemEvent();
     $model = new ViewModel();
     $model->setModule('Bar');
     $controller = new FakeController();
     $event->setContext($controller);
     $event->setResult(SystemEvent::DISPATCH, $model);
     $listener($event);
     $this->assertSame('Foo', $layout->getModule());
     $this->assertSame('Bar', $model->getModule());
 }
 public function testGetModule()
 {
     $model = new ViewModel();
     $model->setModule('Foo');
     $this->assertSame('Foo', $model->getModule());
 }
 public function testRenderRendersViewModel()
 {
     $file = $this->files . 'foo.phtml';
     $template = 'foo/foo';
     $module = 'Foo';
     $model = new ViewModel();
     $model->setTemplate($template);
     $model->setModule($module);
     $renderer = new Renderer();
     $resolver = $this->getMock(Resolver::CLASS);
     $renderer->setResolver($resolver);
     $resolver->expects($this->once())->method('resolve')->with($this->identicalTo($template), $this->identicalTo($module))->will($this->returnValue($file));
     $this->assertSame('foo', $renderer->render($model));
 }