phug-php/tester

View on GitHub
src/Phug/Tester/TestCaseTrait.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Phug\Tester;

use Phug\Renderer;

trait TestCaseTrait
{
    /**
     * @var Renderer
     */
    protected $renderer;

    /**
     * @param string     $file
     * @param array      $locals
     * @param array|null $options
     *
     * @throws \Phug\RendererException
     *
     * @return string
     */
    protected function renderFile($file, $locals = [], $options = null): string
    {
        if ($options) {
            $this->renderer->setOptions($options);
            $this->renderer->initCompiler();
            $this->renderer->initAdapter();
        }

        return $this->renderer->renderFile($file, $locals);
    }

    /**
     * @return array
     */
    protected function getPaths()
    {
        return ['views'];
    }

    /**
     * @return array
     */
    protected function getExtensions()
    {
        return ['', '.pug', '.jade'];
    }

    /**
     * @return Renderer|string
     */
    protected function getRenderer()
    {
        return Renderer::class;
    }

    /**
     * @param string|null $cacheDirectory
     *
     * @return array
     */
    protected function getRendererOptions($cacheDirectory = null)
    {
        return [
            'extensions' => (array) $this->getExtensions(),
            'paths'      => (array) $this->getPaths(),
            'debug'      => true,
            'cache_dir'  => $cacheDirectory ?: sys_get_temp_dir().'/pug-cache-'.mt_rand(0, 9999999),
        ];
    }

    /**
     * @throws \Phug\RendererException
     */
    protected function setUpCoverage(): void
    {
        $this->renderer = Coverage::get()->createRenderer($this->getRenderer(), $this->getRendererOptions());
    }

    protected function tearDownCoverage(): void
    {
        Coverage::get()->storeCoverage(xdebug_get_code_coverage());
    }

    /**
     * @throws \Phug\RendererException
     */
    protected function setUp(): void
    {
        if (method_exists(parent::class, 'setUp')) {
            parent::setUp();
        }
        $this->setUpCoverage();
    }

    protected function tearDown(): void
    {
        if (method_exists(parent::class, 'tearDown')) {
            parent::tearDown();
        }
        $this->tearDownCoverage();
    }
}