diff --git a/tests/Fixtures/child-template.php b/tests/Fixtures/nested-template.php similarity index 100% rename from tests/Fixtures/child-template.php rename to tests/Fixtures/nested-template.php diff --git a/tests/Fixtures/root-template.php b/tests/Fixtures/root-template.php index b4e0f033659ce14df4603796efd5211e2f91d44c..a88c0b246eb29ff30d473c35b506ad88d9cf09f1 100644 --- a/tests/Fixtures/root-template.php +++ b/tests/Fixtures/root-template.php @@ -1 +1 @@ -This is a content of nested template: <?php $this->output_render('child-template'); ?> +This is a content of nested template: <?php $this->output_render('nested-template'); ?> diff --git a/tests/Fixtures/simple.php b/tests/Fixtures/simple.php new file mode 100644 index 0000000000000000000000000000000000000000..50503d9a1674f316c6dcf7a07967a280b0a3bcde --- /dev/null +++ b/tests/Fixtures/simple.php @@ -0,0 +1,2 @@ +<?php + echo 'outputText'; diff --git a/tests/Fixtures/some_template.php b/tests/Fixtures/some_template.php new file mode 100644 index 0000000000000000000000000000000000000000..d5dc4cfd49620945fc2533277ca40be6028267ba --- /dev/null +++ b/tests/Fixtures/some_template.php @@ -0,0 +1 @@ +this is dummy text diff --git a/tests/Fixtures/theme-template/child-template.php b/tests/Fixtures/theme-template/child-template.php new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/Fixtures/with-parameter.php b/tests/Fixtures/with-parameter.php new file mode 100644 index 0000000000000000000000000000000000000000..6d12c577a66cb543b6feab1a4f798b0a4cc2144e --- /dev/null +++ b/tests/Fixtures/with-parameter.php @@ -0,0 +1 @@ +passed parameter: <?php echo $params['custom_parameter']; diff --git a/tests/Fixtures/with-variable.php b/tests/Fixtures/with-variable.php new file mode 100644 index 0000000000000000000000000000000000000000..f953d678fc84ae9c2b035ca9eefa8298fdec48d6 --- /dev/null +++ b/tests/Fixtures/with-variable.php @@ -0,0 +1 @@ +passed variable: <?php echo $custom_variable; diff --git a/tests/Renderer/TestSimplePhpRenderer.php b/tests/Renderer/TestSimplePhpRenderer.php index b647beab8f4beebe5e2afdb856e5e9d794e2cdba..1cedb6f6aa96ca54ff2d55dad3f5cdf21e7777c0 100644 --- a/tests/Renderer/TestSimplePhpRenderer.php +++ b/tests/Renderer/TestSimplePhpRenderer.php @@ -1,37 +1,68 @@ <?php -namespace WPDesk\View\Tests; +namespace WPDesk\View\Tests\Resolver; +use WPDesk\View\Renderer\SimplePhpRenderer; use WPDesk\View\Resolver\ChainResolver; use WPDesk\View\Resolver\DirResolver; use WPDesk\View\Resolver\Exception\CanNotResolve; use WPDesk\View\Resolver\NullResolver; +use WPDesk\View\Tests\TestCase; -class TestSimplePhpRenderer extends \PHPUnit\Framework\TestCase +class TestSimplePhpRenderer extends TestCase { - const TEXT_IN_TEMPLATE = 'outputText'; - - const TEMPLATE_NAME = 'some_template'; - - const TEMPLATE_DIR = '/templates'; - public function testThrowsExceptionWhenCannotFindTemplate() { $this->expectException(CanNotResolve::class); - $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver('')); + $renderer = new SimplePhpRenderer(new DirResolver('whatever')); $renderer->render('anything'); } - public function testRenderWithDirResolver() - { - $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(__DIR__ . self::TEMPLATE_DIR)); - $this->assertEquals(self::TEXT_IN_TEMPLATE, $renderer->render(self::TEMPLATE_NAME)); + /** + * @dataProvider templatesWithContent + */ + public function testRenderingTemplates(string $template, string $content, array $parameters): void { + $renderer = new SimplePhpRenderer( new DirResolver(self::getTemplatesPath())); + $this->assertStringContainsString($content, $renderer->render($template, $parameters)); } - public function testCanRenderNestedTemplates(): void - { - $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(__DIR__ . '/../Fixtures')); - $this->assertStringContainsString('This is a content of nested template: Hello World!', $renderer->render('root-template')); + /** + * @dataProvider templatesWithContent + */ + public function testOutputtingTemplates(string $template, string $content, array $parameters): void { + $this->expectOutputString($content); + $renderer = new SimplePhpRenderer(new DirResolver(self::getTemplatesPath())); + $renderer->output_render($template, $parameters); + } + + public function templatesWithContent(): iterable { + yield 'simple template' => [ + 'template' => 'simple', + 'content' => 'outputText', + 'parameters' => [] + ]; + + yield 'nested template' => [ + 'template' => 'root-template', + 'content' => "This is a content of nested template: Hello World!\n", + 'parameters' => [] + ]; + + yield 'access parameters with $param variable' => [ + 'template' => 'with-parameter', + 'content' => 'passed parameter: custom_parameter', + 'parameters' => [ + 'custom_parameter' => 'custom_parameter' + ] + ]; + + yield 'access parameters directly through variable' => [ + 'template' => 'with-variable', + 'content' => 'passed variable: custom_variable', + 'parameters' => [ + 'custom_variable' => 'custom_variable' + ] + ]; } -} \ No newline at end of file +} diff --git a/tests/Renderer/templates/some_template.php b/tests/Renderer/templates/some_template.php deleted file mode 100644 index fcd781aa62d0947505006ff55743136fd003c5d2..0000000000000000000000000000000000000000 --- a/tests/Renderer/templates/some_template.php +++ /dev/null @@ -1,2 +0,0 @@ -<?php - echo 'outputText'; \ No newline at end of file diff --git a/tests/Resolver/TestChainResolver.php b/tests/Resolver/TestChainResolver.php index b68c1f954e2056ae42781d29b6f337a9986a8dd7..0a8012e7ed91d603820bf567ea1d3d7bdef891c4 100644 --- a/tests/Resolver/TestChainResolver.php +++ b/tests/Resolver/TestChainResolver.php @@ -1,27 +1,18 @@ <?php -namespace WPDesk\View\Tests; +namespace WPDesk\View\Tests\Resolver; use WPDesk\View\Resolver\ChainResolver; use WPDesk\View\Resolver\Exception\CanNotResolve; use WPDesk\View\Resolver\NullResolver; +use WPDesk\View\Tests\TestCase; -class TestChainResolver extends \PHPUnit\Framework\TestCase +class TestChainResolver extends TestCase { const RESPONSE_OF_RESOLVER = 'response'; const RESOLVE_METHOD_NAME = 'resolve'; - public function setUp(): void - { - \WP_Mock::setUp(); - } - - public function tearDown(): void - { - \WP_Mock::tearDown(); - } - public function testUseSecondResolverWhenFirstFailed() { $validResolver = \Mockery::mock(NullResolver::class); diff --git a/tests/Resolver/TestDirResolver.php b/tests/Resolver/TestDirResolver.php index 42cfcfaa0047b10ea1a8de27d0ec2e328c8e2782..96e254a879b3d13f799bcb2e4992d5d68c9af5bf 100644 --- a/tests/Resolver/TestDirResolver.php +++ b/tests/Resolver/TestDirResolver.php @@ -1,39 +1,35 @@ <?php -namespace WPDesk\View\Tests; +namespace WPDesk\View\Tests\Resolver; +use WPDesk\View\Resolver\DirResolver; use WPDesk\View\Resolver\Exception\CanNotResolve; +use WPDesk\View\Tests\TestCase; -class TestDirResolver extends \PHPUnit\Framework\TestCase -{ - const TEMPLATE_NAME = 'some_template.php'; - const TEMPLATE_FILE = 'some_template.php'; - const TEMPLATE_SUBDIR = 'templates'; +class TestDirResolver extends TestCase { - public function setUp(): void - { - \WP_Mock::setUp(); - } + public function testCanFindInDirPath(): void { + $resolver = new DirResolver(self::getTemplatesPath()); - public function tearDown(): void - { - \WP_Mock::tearDown(); + $this->assertEquals( + self::getTemplatesPath() . '/some_template.php', + $resolver->resolve('some_template.php'), + 'Template should be found in dir' + ); } - public function testCanFindInDirPath() - { - $dir = __DIR__ . '/' . self::TEMPLATE_SUBDIR; - $resolver = new \WPDesk\View\Resolver\DirResolver($dir); + public function testThrowExceptionWhenCannotFind(): void { + $this->expectException(CanNotResolve::class); - $this->assertStringEndsWith(self::TEMPLATE_FILE, $resolver->resolve(self::TEMPLATE_NAME), - 'Template should be found in dir'); - } + $resolver = new DirResolver('whatever'); + $resolver->resolve('whatever2'); + } - public function testThrowExceptionWhenCannotFind() - { - $this->expectException(CanNotResolve::class); + public function testResolvingFromCurrentPath(): void { + $this->expectException(CanNotResolve::class); + $this->expectExceptionMessage('Denying to search in system\'s root path.'); - $resolver = new \WPDesk\View\Resolver\DirResolver('whatever'); - $resolver->resolve('whatever2'); - } -} \ No newline at end of file + $resolver = new DirResolver(null); + $resolver->resolve('whatever2'); + } +} diff --git a/tests/Resolver/TestWpThemeResolver.php b/tests/Resolver/TestWpThemeResolver.php index c3fb0a2f06bb484b681616dc12ecf0e4e0e37d20..b5b06a54d0af9c73ba616474e749c4458c9e5d23 100644 --- a/tests/Resolver/TestWpThemeResolver.php +++ b/tests/Resolver/TestWpThemeResolver.php @@ -1,70 +1,53 @@ <?php -namespace WPDesk\View\Tests; +namespace WPDesk\View\Tests\Resolver; use WPDesk\View\Resolver\Exception\CanNotResolve; +use WPDesk\View\Resolver\WPThemeResolver; +use WPDesk\View\Tests\TestCase; -class TestThemeResolver extends \PHPUnit\Framework\TestCase +class TestWpThemeResolver extends TestCase { - const TEMPLATE_NAME = 'some_template.php'; - const TEMPLATE_FILE = 'some_template.php'; - const TEMPLATE_SUBDIR = 'templates'; - - public function setUp(): void - { - \WP_Mock::setUp(); - - \WP_Mock::userFunction('locate_template', [ - 'return' => function ($template_names, $load = false, $require_once = true) { - $located = ''; - foreach ((array)$template_names as $template_name) { - if ( ! $template_name) { - continue; - } - if (file_exists(STYLESHEETPATH . '/' . $template_name)) { - $located = STYLESHEETPATH . '/' . $template_name; - break; - } - } - - return $located; - } - ]); - - \WP_Mock::userFunction('trailingslashit', [ - 'return' => function ($string) { - return rtrim($string, '/\\') . '/'; - } - ]); - - \WP_Mock::userFunction('untrailingslashit', [ - 'return' => function ($string) { - return rtrim($string, '/\\'); - } - ]); - } - - public function tearDown(): void - { - \WP_Mock::tearDown(); - } - - public function testCanFindInStyleSheetPath() - { - define('STYLESHEETPATH', __DIR__); - - $template_base_path = self::TEMPLATE_SUBDIR; - $resolver = new \WPDesk\View\Resolver\WPThemeResolver($template_base_path); - - $this->assertStringEndsWith(self::TEMPLATE_FILE, $resolver->resolve(self::TEMPLATE_NAME), - 'Template should be found in stylesheetpath'); - } - - public function testThrowExceptionWhenCannotFind() - { - $this->expectException(CanNotResolve::class); - - $resolver = new \WPDesk\View\Resolver\WPThemeResolver('whatever'); - $resolver->resolve('whatever2'); - } -} \ No newline at end of file + public function setUp(): void + { + parent::setUp(); + + \WP_Mock::userFunction('locate_template', [ + 'return' => function ($template_names, $load = false, $require_once = true) { + $located = ''; + foreach ((array)$template_names as $template_name) { + if ( ! $template_name) { + continue; + } + if (file_exists(STYLESHEETPATH . '/' . $template_name)) { + $located = STYLESHEETPATH . '/' . $template_name; + break; + } + } + + return $located; + } + ]); + } + + public function testCanFindInStyleSheetPath() + { + define('STYLESHEETPATH', self::getTemplatesPath()); + + $resolver = new WPThemeResolver('theme-template'); + + $this->assertEquals( + self::getTemplatesPath() . '/theme-template/child-template.php', + $resolver->resolve('child-template.php'), + 'Template should be found in stylesheetpath' + ); + } + + public function testThrowExceptionWhenCannotFind() + { + $this->expectException(CanNotResolve::class); + + $resolver = new WPThemeResolver('whatever'); + $resolver->resolve('whatever2'); + } +} diff --git a/tests/Resolver/templates/some_template.php b/tests/Resolver/templates/some_template.php index dd6143c8fc25443943e50fe4b90f5e86d6331a8e..d5dc4cfd49620945fc2533277ca40be6028267ba 100644 --- a/tests/Resolver/templates/some_template.php +++ b/tests/Resolver/templates/some_template.php @@ -1 +1 @@ -this is dummy text \ No newline at end of file +this is dummy text diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000000000000000000000000000000000000..8508c0799fdae3da1c96fae338ea37ac989de370 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,31 @@ +<?php + +namespace WPDesk\View\Tests; + +abstract class TestCase extends \PHPUnit\Framework\TestCase { + + public function setUp(): void { + \WP_Mock::setUp(); + + \WP_Mock::userFunction('trailingslashit', [ + 'return' => function ($string) { + return rtrim($string, '/\\') . '/'; + } + ]); + + \WP_Mock::userFunction('untrailingslashit', [ + 'return' => function ($string) { + return rtrim($string, '/\\'); + } + ]); + } + + public function tearDown(): void { + \WP_Mock::tearDown(); + } + + + public static function getTemplatesPath(): string { + return __DIR__ . '/Fixtures'; + } +} diff --git a/tests/TestPluginViewBuilder.php b/tests/TestPluginViewBuilder.php index 9b9ea8ccc6cad47cc9c152dab6a86d0a907896b8..b58a4797c73d5027143e4e294dc96a5d6e838ead 100644 --- a/tests/TestPluginViewBuilder.php +++ b/tests/TestPluginViewBuilder.php @@ -4,21 +4,7 @@ namespace WPDesk\View\Tests; use WPDesk\View\PluginViewBuilder; -class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase { - public function setUp(): void { - \WP_Mock::setUp(); - - \WP_Mock::userFunction('trailingslashit', [ - 'return' => function ($string) { - return rtrim($string, '/\\') . '/'; - } - ]); - } - - public function tearDown(): void - { - \WP_Mock::tearDown(); - } +class TestPluginViewBuilder extends TestCase { public function testCanRenderUsingDir() { $builder = new PluginViewBuilder( __DIR__ . '/Fixtures', 'template' ); @@ -27,11 +13,11 @@ class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase { $val = 'val to render'; $args = [ 'singleArg' => $val ]; $content = $renderer->render( 'file', $args ); - $this->assertRegExp( '/template content/', $content, 'Content from Fixtures/template/file.php should be renderer' ); - $this->assertRegExp( "/{$val}/", $content, 'Content from Fixtures/template/file.php should contain $val' ); + $this->assertMatchesRegularExpression( '/template content/', $content, 'Content from Fixtures/template/file.php should be renderer' ); + $this->assertMatchesRegularExpression( "/{$val}/", $content, 'Content from Fixtures/template/file.php should contain $val' ); $contentUsingOtherMethod = $builder->loadTemplate( 'file', '.', $args ); $this->assertEquals( $content, $contentUsingOtherMethod, 'Content should be the same no matter the method of render' ); } -} \ No newline at end of file +}