diff options
Diffstat (limited to 'www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php')
-rw-r--r-- | www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php new file mode 100644 index 00000000..64ac9004 --- /dev/null +++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php @@ -0,0 +1,166 @@ +<?php + +namespace ParamProcessor\Tests\Integration\Definitions; + +use ParamProcessor\IParamDefinition; +use ParamProcessor\Options; +use ParamProcessor\PackagePrivate\Param; +use ParamProcessor\ParamDefinition; +use ParamProcessor\ParamDefinitionFactory; +use PHPUnit\Framework\TestCase; + +/** + * @licence GNU GPL v2+ + * @author Jeroen De Dauw < jeroendedauw@gmail.com > + */ +abstract class ParamDefinitionTest extends TestCase { + + /** + * Returns a list of arrays that hold values to test handling of. + * Each array holds the following unnamed elements: + * - value (mixed, required) + * - valid (boolean, required) + * - expected (mixed, optional) + * + * ie array( '42', true, 42 ) + * + * @since 0.1 + * + * @param boolean $stringlyTyped + * + * @return array + */ + public abstract function valueProvider( $stringlyTyped = true ); + + public abstract function getType(); + + public function getDefinitions() { + $params = []; + + $params['empty'] = []; + + $params['values'] = [ + 'values' => [ 'foo', '1', '0.1', 'yes', 1, 0.1 ] + ]; + + return $params; + } + + public function definitionProvider() { + $definitions = $this->getDefinitions(); + + foreach ( $definitions as &$definition ) { + $definition['type'] = $this->getType(); + } + + return $definitions; + } + + public function getEmptyInstance() { + return ParamDefinitionFactory::singleton()->newDefinitionFromArray( [ + 'name' => 'empty', + 'message' => 'test-empty', + 'type' => $this->getType(), + ] ); + } + + public function instanceProvider() { + $definitions = []; + + foreach ( $this->definitionProvider() as $name => $definition ) { + if ( !array_key_exists( 'message', $definition ) ) { + $definition['message'] = 'test-' . $name; + } + + $definition['name'] = $name; + $definitions[] = [ ParamDefinitionFactory::singleton()->newDefinitionFromArray( $definition ) ]; + } + + return $definitions; + } + + /** + * @dataProvider instanceProvider + */ + public function testGetType( IParamDefinition $definition ) { + $this->assertEquals( $this->getType(), $definition->getType() ); + } + + /** + * @dataProvider instanceProvider + */ + public function testValidate( IParamDefinition $definition ) { + foreach ( [ true, false ] as $stringlyTyped ) { + $values = $this->valueProvider( $stringlyTyped ); + $options = new Options(); + $options->setRawStringInputs( $stringlyTyped ); + + foreach ( $values[$definition->getName()] as $data ) { + list( $input, $valid, ) = $data; + + $param = new Param( $definition ); + $param->setUserValue( $definition->getName(), $input, $options ); + $definitions = []; + $param->process( $definitions, [], $options ); + + $this->assertEquals( + $valid, + $param->getErrors() === [], + 'The validation process should ' . ( $valid ? '' : 'not ' ) . 'pass' + ); + } + } + + $this->assertTrue( true ); + } + + /** + * @dataProvider instanceProvider + */ + public function testFormat( IParamDefinition $sourceDefinition ) { + $values = $this->valueProvider(); + $options = new Options(); + + foreach ( $values[$sourceDefinition->getName()] as $data ) { + $definition = clone $sourceDefinition; + + list( $input, $valid, ) = $data; + + $param = new Param( $definition ); + $param->setUserValue( $definition->getName(), $input, $options ); + + if ( $valid && array_key_exists( 2, $data ) ) { + $defs = []; + $param->process( $defs, [], $options ); + + $this->assertEquals( + $data[2], + $param->getValue() + ); + } + } + + $this->assertTrue( true ); + } + + protected function validate( ParamDefinition $definition, $testValue, $validity, Options $options = null ) { + $def = clone $definition; + $options = $options === null ? new Options() : $options; + + $param = new Param( $def ); + $param->setUserValue( $def->getName(), $testValue, $options ); + + $defs = []; + $param->process( $defs, [], $options ); + + $this->assertEquals( $validity, $param->getErrors() === [] ); + } + + public function testConstructingWithoutMessageLeadsToDefaultMessage() { + $this->assertSame( + 'validator-message-nodesc', + ( new ParamDefinition( 'type', 'name' ) )->getMessage() + ); + } + +}
\ No newline at end of file |