renderer = (new RendererFactory())->getRenderer(); } public function testItUsesCorrectAssetsManifestFilenames() { $renderer = Stub::make( new Renderer( false, Env::$cachePath, new TwigFileSystem(Env::$viewsPath) ), ['getAssetManifest' => function($manifest) { return $manifest; }] ); $renderer->__construct( false, Env::$cachePath, new TwigFileSystem(Env::$viewsPath) ); verify($renderer->assetsManifestJs)->equals(Env::$assetsPath . '/dist/js/manifest.json'); verify($renderer->assetsManifestCss)->equals(Env::$assetsPath . '/dist/css/manifest.json'); } public function testItGetsAssetManifest() { $assetsManifestJs = [ 'script1.js' => 'script1.hash.js', 'script2.js' => 'script2.hash.js', ]; $assetsManifestCss = [ 'style1.css' => 'style1.hash.css', 'style2.css' => 'style2.hash.css', ]; file_put_contents(Env::$tempPath . '/js.json', json_encode($assetsManifestJs)); file_put_contents(Env::$tempPath . '/css.json', json_encode($assetsManifestCss)); verify($this->renderer->getAssetManifest(Env::$tempPath . '/js.json'))->equals($assetsManifestJs); verify($this->renderer->getAssetManifest(Env::$tempPath . '/css.json'))->equals($assetsManifestCss); } public function testItReturnsFalseAssetManifestDoesNotExist() { verify($this->renderer->getAssetManifest(Env::$tempPath . '/js.json'))->false(); } public function testItCanGetCssAsset() { $assetsManifestCss = [ 'style1.css' => 'style1.hash.css', 'style2.css' => 'style2.hash.css', ]; $renderer = $this->renderer; $renderer->assetsManifestCss = $assetsManifestCss; verify($renderer->getCssAsset('style1.css'))->equals('style1.hash.css'); verify($renderer->getCssAsset('style2.css'))->equals('style2.hash.css'); } public function testItCanGetJsAsset() { $assetsManifestJs = [ 'script1.js' => 'script1.hash.js', 'script2.js' => 'script2.hash.js', ]; $renderer = $this->renderer; $renderer->assetsManifestJs = $assetsManifestJs; verify($renderer->getJsAsset('script1.js'))->equals('script1.hash.js'); verify($renderer->getJsAsset('script2.js'))->equals('script2.hash.js'); } public function testItDelegatesRenderingToTwig() { $env = Stub::makeEmpty(TwigEnvironment::class); $template = new class($env) extends TwigTemplate { public function getTemplateName() { return 'non-existing-template.html'; } public function render(array $context): string { return 'test render'; } public function getDebugInfo() { // must be implemented (abstract in parent) return []; } public function getSourceContext() { // must be implemented (abstract in parent) return new Source('', ''); } protected function doDisplay(array $context, array $blocks = []) { // must be implemented (abstract in parent) } }; $renderer = Stub::construct( $this->renderer, [ false, Env::$cachePath, new TwigFileSystem(Env::$viewsPath), ], [ 'renderer' => Stub::makeEmpty( TwigEnvironment::class, [ 'load' => Expected::atLeastOnce( new TemplateWrapper($env, $template) ), ], $this ), ] ); verify($renderer->render(['somekey' => 'someval']))->equals('test render'); } public function _after() { parent::_after(); $this->_removeAssetsManifests(); } public function _removeAssetsManifests() { if (is_readable(Env::$tempPath . '/js.json')) unlink(Env::$tempPath . '/js.json'); if (is_readable(Env::$tempPath . '/css.json')) unlink(Env::$tempPath . '/css.json'); } }