diff options
Diffstat (limited to 'tests/UnitTests/Compile/AttributeCompilerTest.php')
| -rw-r--r-- | tests/UnitTests/Compile/AttributeCompilerTest.php | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/tests/UnitTests/Compile/AttributeCompilerTest.php b/tests/UnitTests/Compile/AttributeCompilerTest.php new file mode 100644 index 00000000..9a8fbf98 --- /dev/null +++ b/tests/UnitTests/Compile/AttributeCompilerTest.php @@ -0,0 +1,193 @@ +<?php + +use Smarty\Compile\AttributeCompiler; +use Smarty\Compiler\Template; + +class AttributeCompilerTest extends PHPUnit\Framework\TestCase +{ + /** + * The template compiler. + */ + private $template_compiler; + + /** + * The attributes + */ + private $attributes = []; + + /** + * @inheritDoc + * Set up attribute compiler class + */ + protected function setUp(): void + { + $this->template_compiler = $this->createMock(Template::class); + + // reset attributes to empty arrays + $this->attributes = [ + 'required_attributes' => [], + 'optional_attributes' => [], + 'shorttag_order' => [], + 'option_flags' => [], + ]; + } + + /** + * Create the attribute compiler for testing. + */ + private function createAttributeCompiler() { + return new AttributeCompiler( + $this->attributes['required_attributes'], + $this->attributes['optional_attributes'], + $this->attributes['shorttag_order'], + $this->attributes['option_flags'] + ); + } + + /** + * Tests shorthand attribute compiling. + */ + public function testAttributeCompiler(): void + { + $this->attributes['shorttag_order'] = ['shorttag']; + $this->attributes['required_attributes'] = ['required']; + $this->attributes['option_flags'] = ['option', 'option_two']; + + $payload = [ + 0 => 'shorttag value', + 1 => [ + 'required' => 'required_value' + ], + 2 => 'option', + ]; + + $this->assertEquals( + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, $payload), + [ + 'shorttag' => 'shorttag value', + 'required' => 'required_value', + 'option' => true, + 'option_two' => false, + ] + ); + } + + /** + * Tests normal optional attribute compiling. + */ + public function testAttributeCompilerOptionalArguments(): void + { + $this->attributes['optional_attributes'] = ['optional']; + + $payload = [ + 0 => [ + 'optional' => 'optional value' + ], + ]; + + $this->assertEquals( + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, $payload), + [ + 'optional' => 'optional value', + ] + ); + + $this->assertEquals( + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, []), + [] + ); + } + + /** + * Tests any attribute compiling. + */ + public function testAttributeCompilerAnyOptionalArguments(): void + { + $this->attributes['optional_attributes'] = ['_any']; + + $payload = [ + 0 => [ + 'optional' => 'optional value' + ], + 1 => [ + 'optional_two' => 'optional value two' + ], + ]; + + $this->assertEquals( + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, $payload), + [ + 'optional' => 'optional value', + 'optional_two' => 'optional value two', + ] + ); + } + + /** + * Test if the attribute compiler tries to throw a too many shorthand attributes error. + */ + public function testAttributeCompilerTooManyShorthands(): void + { + $payload = [ + 0 => 'option one', + ]; + + $this->template_compiler + ->expects(self::once()) + ->method('trigger_template_error') + ->with('too many shorthand attributes', null, true); + + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, $payload); + } + + /** + * Test if the attribute compiler tries to throw a missing required attribute error. + */ + public function testAttributeCompilerWithMissingRequiredAttributes(): void + { + $this->attributes['required_attributes'] = ['required']; + + $this->template_compiler + ->expects(self::once()) + ->method('trigger_template_error') + ->with('missing \'required\' attribute', null, true); + + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, []); + } + + /** + * Test if the attribute compiler tries to throw a illegal value template error. + */ + public function testAttributeCompilerWithInvalidOptionAttribute(): void + { + $this->attributes['option_flags'] = ['option']; + + $this->template_compiler + ->expects(self::once()) + ->method('trigger_template_error') + ->with('illegal value \'\'foo\'\' for options flag \'option\'', null, true); + + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, [0 => ['option' => 'foo']]); + } + + /** + * Test if the attribute compiler tries to throw an unexpected attribute error. + */ + public function testAttributeCompilerWithInvalidUnexpectedAttribute(): void + { + $this->template_compiler + ->expects(self::once()) + ->method('trigger_template_error') + ->with('unexpected \'unexpected\' attribute', null, true); + + $this->createAttributeCompiler() + ->getAttributes($this->template_compiler, [0 => ['unexpected' => 'bar']]); + } +} |
