summaryrefslogtreecommitdiff
path: root/www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php')
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php486
1 files changed, 486 insertions, 0 deletions
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php
new file mode 100644
index 00000000..cf1acde5
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php
@@ -0,0 +1,486 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ParamProcessor\Tests\Integration;
+
+use ParamProcessor\Options;
+use ParamProcessor\ParamDefinitionFactory;
+use ParamProcessor\ProcessingResult;
+use ParamProcessor\Processor;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @covers \ParamProcessor\Processor
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ProcessorTest extends TestCase {
+
+ public function newFromOptionsProvider() {
+ $options = [];
+
+ $option = new Options();
+
+ $options[] = clone $option;
+
+ $option->setName( 'foobar' );
+ $option->setLowercaseNames( false );
+
+ $options[] = clone $option;
+
+ return $this->arrayWrap( $options );
+ }
+
+ private function arrayWrap( array $elements ) {
+ return array_map(
+ function( $element ) {
+ return [ $element ];
+ },
+ $elements
+ );
+ }
+
+ public function testNewFromOptions() {
+ $this->assertEquals( new Options(), Processor::newFromOptions( new Options() )->getOptions() );
+ }
+
+ /**
+ * Simple parameter definitions and values that should all pass.
+ *
+ * @return array
+ */
+ private function getSimpleParams() {
+ $params = [
+ 'awesome' => 'yes',
+ 'Howmuch ' => '9001',
+ 'FLOAT' => '4.2',
+ ' page' => 'Ohi there!',
+ ' text ' => 'foo bar baz o_O',
+ ];
+
+ $definitions = [
+ 'awesome' => [
+ 'type' => 'boolean',
+ ],
+ 'howmuch' => [
+ 'type' => 'integer',
+ ],
+ 'float' => [
+ 'type' => 'float',
+ ],
+ 'page' => [
+ 'type' => 'string',
+ 'hastoexist' => false,
+ ],
+ 'text' => [],
+ ];
+
+ $options = new Options();
+
+ $expected = [
+ 'awesome' => true,
+ 'howmuch' => 9001,
+ 'float' => 4.2,
+ 'page' => 'Ohi there!',
+ 'text' => 'foo bar baz o_O',
+ ];
+
+ return [ $params, $definitions, $options, $expected ];
+ }
+
+ /**
+ * Simple parameter definitions with defaults and values
+ * that are invalid or missing and therefore default.
+ *
+ * @return array
+ */
+ private function getDefaultingParams() {
+ $params = [
+ 'awesome' => 'omg!',
+ 'howmuch' => 'omg!',
+ 'float' => 'omg!',
+ 'page' => 42,
+ 'whot?' => 'O_o',
+ 'integerr' => ' 9001 ',
+ ];
+
+ $definitions = [
+ 'awesome' => [
+ 'type' => 'boolean',
+ 'default' => true,
+ ],
+ 'howmuch' => [
+ 'type' => 'integer',
+ 'default' => 9001,
+ ],
+ 'float' => [
+ 'type' => 'float',
+ 'default' => 4.2,
+ ],
+ 'page' => [
+ 'type' => 'string',
+ 'hastoexist' => false,
+ 'default' => 'Ohi there!',
+ ],
+ 'text' => [
+ 'default' => 'foo bar baz o_O',
+ ],
+ 'integerr' => [
+ 'type' => 'integer',
+ 'default' => 42,
+ ],
+ ];
+
+ $options = new Options();
+ $options->setTrimValues( false );
+
+ $expected = [
+ 'awesome' => true,
+ 'howmuch' => 9001,
+ 'float' => 4.2,
+ 'page' => 'Ohi there!',
+ 'text' => 'foo bar baz o_O',
+ 'integerr' => 42,
+ ];
+
+ return [ $params, $definitions, $options, $expected ];
+ }
+
+ /**
+ * Values and definitions in-system parameter handling.
+ * Options set to expect non-raw values.
+ *
+ * @return array
+ */
+ private function getTypedParams() {
+ $params = [
+ 'awesome' => true,
+ 'howmuch' => '42',
+ 'float' => 4.2,
+ 'page' => 'Ohi there!',
+ 'Text' => 'foo bar baz o_O',
+ 'text1 ' => 'foo bar baz o_O',
+ ' text2' => 'foo bar baz o_O',
+ ];
+
+ $definitions = [
+ 'awesome' => [
+ 'type' => 'boolean',
+ ],
+ 'howmuch' => [
+ 'type' => 'integer',
+ 'default' => 9001,
+ ],
+ 'float' => [
+ 'type' => 'float',
+ 'lowerbound' => 9001,
+ 'default' => 9000.1
+ ],
+ 'page' => [
+ 'type' => 'string',
+ 'hastoexist' => false,
+ ],
+ 'text' => [
+ 'default' => 'some text',
+ ],
+ 'text1' => [
+ 'default' => 'some text',
+ ],
+ 'text2' => [
+ 'default' => 'some text',
+ ],
+ ];
+
+ $options = new Options();
+ $options->setRawStringInputs( false );
+ $options->setLowercaseNames( false );
+ $options->setTrimNames( false );
+
+ $expected = [
+ 'awesome' => true,
+ 'howmuch' => 9001,
+ 'float' => 9000.1,
+ 'page' => 'Ohi there!',
+ 'text' => 'some text',
+ 'text1' => 'some text',
+ 'text2' => 'some text',
+ ];
+
+ return [ $params, $definitions, $options, $expected ];
+ }
+
+ /**
+ * Values with capitalization and preceding/tailing spaces to test
+ * of the clean options work.
+ *
+ * @return array
+ */
+ private function getUncleanParams() {
+ $params = [
+ 'awesome' => ' yes ',
+ 'text' => ' FOO bar ',
+ 'integerr' => ' 9001 ',
+ ];
+
+ $definitions = [
+ 'awesome' => [
+ 'type' => 'boolean',
+ ],
+ 'text' => [
+ 'default' => 'bar',
+ ],
+ 'integerr' => [
+ 'type' => 'integer',
+ 'default' => 42,
+ ],
+ ];
+
+ $options = new Options();
+ $options->setLowercaseValues( true );
+ $options->setTrimValues( true );
+
+ $expected = [
+ 'awesome' => true,
+ 'text' => 'foo bar',
+ 'integerr' => 9001,
+ ];
+
+ return [ $params, $definitions, $options, $expected ];
+ }
+
+ /**
+ * List parameters to test if list handling works correctly.
+ *
+ * @return array
+ */
+ private function getListParams() {
+ $params = [
+ 'awesome' => ' yes, no, on, off ',
+ 'float' => ' 9001 ; 42 ; 4.2;0',
+ ];
+
+ $definitions = [
+ 'awesome' => [
+ 'type' => 'boolean',
+ 'islist' => true,
+ ],
+ 'text' => [
+ 'default' => [ 'bar' ],
+ 'islist' => true,
+ ],
+ 'float' => [
+ 'type' => 'float',
+ 'islist' => true,
+ 'delimiter' => ';'
+ ],
+ ];
+
+ $options = new Options();
+ $options->setLowercaseValues( true );
+ $options->setTrimValues( true );
+
+ $expected = [
+ 'awesome' => [ true, false, true, false ],
+ 'text' => [ 'bar' ],
+ 'float' => [ 9001.0, 42.0, 4.2, 0.0 ],
+ ];
+
+ return [ $params, $definitions, $options, $expected ];
+ }
+
+ public function parameterProvider() {
+ // $params, $definitions [, $options]
+ $argLists = [];
+
+ $argLists[] = $this->getSimpleParams();
+
+ $argLists[] = $this->getDefaultingParams();
+
+ $argLists[] = $this->getTypedParams();
+
+ $argLists[] = $this->getUncleanParams();
+
+ $argLists[] = $this->getListParams();
+
+ foreach ( $argLists as &$argList ) {
+ foreach ( $argList[1] as $key => &$definition ) {
+ $definition['message'] = 'test-' . $key;
+ }
+
+ if ( !array_key_exists( 2, $argList ) ) {
+ $argList[2] = new Options();
+ }
+ }
+
+ return $argLists;
+ }
+
+ /**
+ * @dataProvider parameterProvider
+ */
+ public function testSetParameters( array $params, array $definitions, Options $options ) {
+ $validator = Processor::newFromOptions( $options );
+
+ $validator->setParameters( $params, $definitions );
+
+ $this->assertTrue( true ); // TODO
+ }
+
+ /**
+ * @dataProvider parameterProvider
+ */
+ public function testValidateParameters( array $params, array $definitions, Options $options, array $expected = [] ) {
+ $validator = Processor::newFromOptions( $options );
+
+ $validator->setParameters( $params, $definitions );
+
+ $processingResult = $validator->processParameters();
+
+ $actualValues = [];
+
+ foreach ( $processingResult->getParameters() as $param ) {
+ $actualValues[$param->getName()] = $param->getValue();
+ }
+
+ $this->assertEquals( $expected, $actualValues );
+
+
+ }
+
+ public function testProcessParametersOnEmptyOptions() {
+ $processor = Processor::newDefault();
+
+ $this->assertInstanceOf(
+ ProcessingResult::class,
+ $processor->processParameters()
+ );
+ }
+
+ public function testErrorsCanBeRetrievedAfterProcessing() {
+ $processor = Processor::newDefault();
+
+ $this->processWithOneError( $processor );
+
+ $this->assertCount( 1, $processor->getErrors() );
+ }
+
+ private function processWithOneError( Processor $processor ) {
+ $processor->setParameters(
+ [],
+ [
+ 'awesome' => [
+ 'type' => 'boolean',
+ 'message' => 'test-awesome'
+ ],
+ ]
+ );
+
+ // There should be a single "missing required parameter" error.
+ $processor->processParameters();
+ }
+
+ public function testErrorsAreClearedBetweenProcessingRuns() {
+ $processor = Processor::newDefault();
+
+ $this->processWithOneError( $processor );
+ $processor->setParameters( [], [] );
+ $processor->processParameters();
+
+ $this->assertEmpty( $processor->getErrors() );
+ }
+
+ public function testInvalidListElementsAreOmitted() {
+ $processor = Processor::newDefault();
+
+ $processor->setFunctionParams(
+ [
+ 'some-list=1,2,3, ,4,'
+ ],
+ [
+ 'some-list' => [
+ 'type' => 'integer',
+ 'message' => 'test',
+ 'islist' => true
+ ],
+ ]
+ );
+
+ $this->assertSame(
+ [ 1, 2, 3, 4 ],
+ $processor->processParameters()->getParameters()['some-list']->getValue()
+ );
+ }
+
+ public function testListParametersAreNotDefaultedWhenSomeElementsAreInvalid() {
+ $processor = Processor::newDefault();
+
+ $processor->setFunctionParams(
+ [
+ 'some-list=1,nan'
+ ],
+ [
+ 'some-list' => [
+ 'type' => 'integer',
+ 'message' => 'test',
+ 'islist' => true,
+ 'default' => []
+ ],
+ ]
+ );
+
+ $this->assertSame(
+ [ 1 ],
+ $processor->processParameters()->getParameters()['some-list']->getValue()
+ );
+ }
+
+ public function testListParametersAreDefaultedWhenAllElementsAreInvalid() {
+ $processor = Processor::newDefault();
+
+ $processor->setFunctionParams(
+ [
+ 'some-list=such,nan'
+ ],
+ [
+ 'some-list' => [
+ 'type' => 'integer',
+ 'message' => 'test',
+ 'islist' => true,
+ 'default' => [ 42 ]
+ ],
+ ]
+ );
+
+ $this->assertSame(
+ [ 42 ],
+ $processor->processParameters()->getParameters()['some-list']->getValue()
+ );
+ }
+
+ public function testSetParameterDefinitions() {
+ $processor = Processor::newDefault();
+
+ $processor->setFunctionParams( [ 'some-list=42,23,9001' ] );
+
+ $processor->setParameterDefinitions(
+ [
+ ( ParamDefinitionFactory::newDefault() )->newDefinitionFromArray(
+ [
+ 'name' => 'some-list',
+ 'type' => 'integer',
+ 'message' => 'test',
+ 'islist' => true
+ ]
+ )
+ ]
+ );
+
+ $this->assertSame(
+ [ 42, 23, 9001 ],
+ $processor->processParameters()->getParameters()['some-list']->getValue()
+ );
+ }
+
+}