From 3e06e04aa6706c87444ff6503596738b8b5bdf57 Mon Sep 17 00:00:00 2001 From: Daniel Lorenz <info@extco.de> Date: Wed, 15 Jun 2016 12:42:57 +0200 Subject: [PATCH] [BUGFIX] EXT:form - Fix broken inArray validator Handle different configuration types and multiselect values. Resolves: #75576 Releases: master, 7.6 Change-Id: I42c0bcbc5f5307d125484149108495ea971a692e Reviewed-on: https://review.typo3.org/47661 Reviewed-by: Bjoern Jacob <bjoern.jacob@tritum.de> Tested-by: Bjoern Jacob <bjoern.jacob@tritum.de> Reviewed-by: Daniel Lorenz <info@extco.de> Tested-by: Daniel Lorenz <info@extco.de> Reviewed-by: Daniel Goerz <ervaude@gmail.com> Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de> Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de> --- .../Domain/Validator/InArrayValidator.php | 66 ++- .../Unit/Validator/InArrayValidatorTest.php | 557 ++++++++++++++++-- 2 files changed, 563 insertions(+), 60 deletions(-) diff --git a/typo3/sysext/form/Classes/Domain/Validator/InArrayValidator.php b/typo3/sysext/form/Classes/Domain/Validator/InArrayValidator.php index 92c7fc4e78df..a96bc414db74 100755 --- a/typo3/sysext/form/Classes/Domain/Validator/InArrayValidator.php +++ b/typo3/sysext/form/Classes/Domain/Validator/InArrayValidator.php @@ -25,7 +25,8 @@ class InArrayValidator extends AbstractValidator protected $supportedOptions = array( 'element' => array('', 'The name of the element', 'string', true), 'errorMessage' => array('', 'The error message', 'array', true), - 'array' => array('', 'The array value', 'array', true), + 'array' => array('', 'The array values from the wizard configuration (array = test1,test2)', 'string', false), + 'array.' => array('', 'The array values from the documented configuration', 'array', false), 'strict' => array('', 'Compare types', 'boolean', false), 'ignorecase' => array('', 'Ignore cases', 'boolean', false) ); @@ -36,9 +37,9 @@ class InArrayValidator extends AbstractValidator protected $charsetConverter; /** - * constructor + * Constructor * - * creates charsetConverter object if option ignorecase is set + * Creates charsetConverter object if option ignorecase is set * * @param array $options * @throws \TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException @@ -59,34 +60,65 @@ class InArrayValidator extends AbstractValidator const LOCALISATION_OBJECT_NAME = 'tx_form_system_validate_inarray'; /** - * Check if $value is valid. If it is not valid, needs to add an error - * to result. + * Check if $value is valid. If it is not valid, add an error to result. * * @param mixed $value * @return void */ public function isValid($value) { - if (empty($value) || !is_string($value)) { + if (empty($value)) { return; } - $allowedOptionsArray = GeneralUtility::trimExplode(',', $this->options['array'], true); + + /** + * A single select results in a string, + * a multiselect in an array. + * In both cases, the operations will be processed on an array. + */ + if (is_string($value)) { + $value = array($value); + } + + /** + * The form wizard generates the following configuration: + * array = test1,test2 + * In this case the string has to be exploded. + * The following configuration was documented: + * array { + * 1 = TYPO3 4.5 LTS + * 2 = TYPO3 6.2 LTS + * 3 = TYPO3 7 LTS + * } + * In this case there is already an array but the "options" key differs. + */ + $allowedOptionsArray = array(); + if (!empty($this->options['array']) && is_string($this->options['array'])) { + $allowedOptionsArray = GeneralUtility::trimExplode(',', $this->options['array'], true); + } elseif (!empty($this->options['array.']) && is_array($this->options['array.'])) { + $allowedOptionsArray = $this->options['array.']; + } + if (!empty($this->options['ignorecase'])) { - $value = $this->charsetConverter->conv_case('utf-8', $value, 'toLower'); + foreach ($value as &$incomingArrayValue) { + $incomingArrayValue = $this->charsetConverter->conv_case('utf-8', $incomingArrayValue, 'toLower'); + } foreach ($allowedOptionsArray as &$option) { $option = $this->charsetConverter->conv_case('utf-8', $option, 'toLower'); } } - if (!in_array($value, $allowedOptionsArray, !empty($this->options['strict']))) { - $this->addError( - $this->renderMessage( - $this->options['errorMessage'][0], - $this->options['errorMessage'][1], - 'error' - ), - 1442002594 - ); + foreach ($value as $incomingArrayValue) { + if (!in_array($incomingArrayValue, $allowedOptionsArray, !empty($this->options['strict']))) { + $this->addError( + $this->renderMessage( + $this->options['errorMessage'][0], + $this->options['errorMessage'][1], + 'error' + ), + 1442002594 + ); + } } } } diff --git a/typo3/sysext/form/Tests/Unit/Validator/InArrayValidatorTest.php b/typo3/sysext/form/Tests/Unit/Validator/InArrayValidatorTest.php index 96d9484bf3f3..40a8be95ad19 100644 --- a/typo3/sysext/form/Tests/Unit/Validator/InArrayValidatorTest.php +++ b/typo3/sysext/form/Tests/Unit/Validator/InArrayValidatorTest.php @@ -31,25 +31,87 @@ class InArrayValidatorTest extends AbstractValidatorTest * * @return array */ - public function validArrayProvider() + public function validArrayForStringConfigurationProvider() { return [ - '12 in (12, 13)' => [ + '12 in (12, 13, 14)' => [ '12', - '12,13', + '12,13,14', ], '1 in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ '1', '5,3234,oOIUoi8,3434,343,34,3,1,333434,1234,ssd,ysdfsa', ], + 'Pizza in (Pizza, Lasange, Strogonvo)' => [ + 'Pizza', + 'Pizza,Lasange,Strogonvo', + ], 'Rißtissen in (Rißtissen, Überligen, Karlsruhe)' => [ 'Rißtissen', 'Rißtissen,Überligen,Karlsruhe', ], - 'Pizza in (Pizza, Lasange, Strogonvo)' => [ - 'Pizza', + + '[12 and 14] in (12, 13, 14)' => [ + ['12', '14'], + '12,13,14', + ], + '[1 and ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ + ['1', 'ssd'], + '5,3234,oOIUoi8,3434,343,34,3,1,333434,1234,ssd,ysdfsa', + ], + '[Pizza and Strogonvo] in (Pizza, Lasange, Strogonvo)' => [ + ['Pizza', 'Strogonvo'], 'Pizza,Lasange,Strogonvo', ], + '[Rißtissen and Karlsruhe] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['Rißtissen', 'Karlsruhe'], + 'Rißtissen,Überligen,Karlsruhe', + ], + ]; + } + + /** + * used for tests with valid input + * will result in no errors returned + * + * @return array + */ + public function validArrayForArrayConfigurationProvider() + { + return [ + '12 in [12, 13, 14]' => [ + '12', + ['12', '13', '14'], + ], + '1 in [5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa]' => [ + '1', + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '1', '333434', '1234', 'ssd', 'ysdfsa'], + ], + 'Pizza in [Pizza, Lasange, Strogonvo]' => [ + ['Pizza', 'Strogonvo'], + ['Pizza', 'Lasange', 'Strogonvo'], + ], + 'Rißtissen in [Rißtissen, Überligen, Karlsruhe]' => [ + ['Rißtissen', 'Karlsruhe'], + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + + '[12 and 14] in [12, 13, 14]' => [ + ['12', '14'], + ['12', '13', '14'], + ], + '[1 and ssd] in [5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa]' => [ + ['1', 'ssd'], + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '1', '333434', '1234', 'ssd', 'ysdfsa'], + ], + '[Pizza and Strogonvo] in [Pizza, Lasange, Strogonvo]' => [ + 'Pizza', + ['Pizza', 'Lasange', 'Strogonvo'], + ], + '[Rißtissen and Karlsruhe] in [Rißtissen, Überligen, Karlsruhe]' => [ + 'Rißtissen', + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], ]; } @@ -59,24 +121,102 @@ class InArrayValidatorTest extends AbstractValidatorTest * * @return array */ - public function invalidArrayProvider() + public function invalidArrayForStringConfigurationProvider() { return [ - '12 in (11, 13)' => [ + '12 in (11, 13, 14)' => [ '12', - '11,13', + '11,13,14', ], '1 in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 333434, 1234, ssd, ysdfsa)' => [ '1', '5,3234,oOIUoi8,3434,343,34,3,333434,1234,ssd,ysdfsa', ], + 'pizza in (Pizza, Lasange, Strogonvo)' => [ + 'pizza', + 'Pizza,Lasange,Strogonvo', + ], 'Eimeldingen in (Rißtissen, Überligen, Karlsruhe)' => [ 'Eimeldingen', 'Rißtissen,Überligen,Karlsruhe', ], + 'überligen in (Rißtissen, Überligen, Karlsruhe)' => [ + 'überligen', + 'Rißtissen,Überligen,Karlsruhe', + ], + + '[12 and 14] in (11, 13, 14)' => [ + ['12', '14'], + '11,13,14', + ], + '[1 and ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 333434, 1234, ssd, ysdfsa)' => [ + ['1', 'ssd'], + '5,3234,oOIUoi8,3434,343,34,3,333434,1234,ssd,ysdfsa', + ], + '[pizza and Lasange] in (Pizza, Lasange, Strogonvo)' => [ + ['pizza', 'Lasange'], + 'Pizza,Lasange,Strogonvo', + ], + '[Eimeldingen and Überligen] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['Eimeldingen', 'Überligen'], + 'Rißtissen,Überligen,Karlsruhe', + ], + '[Eimeldingen and überligen] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['Eimeldingen', 'überligen'], + 'Rißtissen,Überligen,Karlsruhe', + ], + ]; + } + + /** + * used for test with invalid input + * will result in errors returned + * + * @return array + */ + public function invalidArrayForArrayConfigurationProvider() + { + return [ + '12 in (11, 13, 14)' => [ + '12', + ['11', '13', '14'], + ], + '1 in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 333434, 1234, ssd, ysdfsa)' => [ + '1', + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '333434', '1234', 'ssd', 'ysdfsa'], + ], 'pizza in (Pizza, Lasange, Strogonvo)' => [ 'pizza', - 'Pizza,Lasange,Strogonvo', + ['Pizza', 'Lasange', 'Strogonvo'], + ], + 'Eimeldingen in (Rißtissen, Überligen, Karlsruhe)' => [ + 'Eimeldingen', + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + 'überligen in (Rißtissen, Überligen, Karlsruhe)' => [ + 'überligen', + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + + '[12 and 14] in (11, 13, 14)' => [ + ['12', '14'], + ['11', '13', '14'], + ], + '[1 and ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 333434, 1234, ssd, ysdfsa)' => [ + ['1', 'ssd'], + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '333434', '1234', 'ssd', 'ysdfsa'], + ], + '[pizza and Lasange] in (Pizza, Lasange, Strogonvo)' => [ + ['pizza', 'Lasange'], + ['Pizza', 'Lasange', 'Strogonvo'], + ], + '[Eimeldingen and Überligen] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['Eimeldingen', 'Überligen'], + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + '[Eimeldingen and überligen] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['Eimeldingen', 'überligen'], + ['Rißtissen', 'Überligen', 'Karlsruhe'], ], ]; } @@ -88,36 +228,119 @@ class InArrayValidatorTest extends AbstractValidatorTest * * @return array */ - public function validArrayIgnoreCaseProvider() + public function validArrayForStringConfigurationIgnoreCaseProvider() { return [ - '12 in (12, 13)' => [ + '12 in (12, 13, 14)' => [ '12', - '12,13', + '12,13,14', ], '1 in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ '1', '5,3234,oOIUoi8,3434,343,34,3,1,333434,1234,ssd,ysdfsa', ], - 'Rißtissen in (Rißtissen, Überligen, Karlsruhe)' => [ + 'pizza in (Pizza, Lasange, Strogonvo)' => [ + 'pizza', + 'Pizza,Lasange,Strogonvo', + ], + 'Pizza in (pizza, lasange, strogonvo)' => [ + 'Pizza', + 'pizza,lasange,strogonvo', + ], + 'Rißtissen in (rißtissen, Überligen, Karlsruhe)' => [ 'Rißtissen', + 'rißtissen,Überligen,Karlsruhe', + ], + 'überligen in (Rißtissen, Überligen, Karlsruhe)' => [ + 'überligen', 'Rißtissen,Überligen,Karlsruhe', ], - 'überlingen in (Rißtissen, Überligen, Karlsruhe)' => [ - 'überlingen', - 'Rißtissen,Überlingen,Karlsruhe', + + '[12 and 14] in (12, 13, 14)' => [ + ['12', '14'], + '12,13,14', ], - 'Österreich in (österreich, deutschland, schweiz)' => [ - 'Österreich', - 'österreich,deutschland,schweiz', + '[1 and Ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ + ['1', 'Ssd'], + '5,3234,oOIUoi8,3434,343,34,3,1,333434,1234,ssd,ysdfsa', ], - 'pizza in (Pizza, Lasange, Strogonvo)' => [ - 'pizza', + '[pizza and Lasange] in (Pizza, Lasange, Strogonvo)' => [ + ['pizza', 'Lasange'], 'Pizza,Lasange,Strogonvo', ], - 'lasange in (Pizza, Lasange, Strogonvo)' => [ - 'lasange', - 'Pizza,Lasange,Strogonvo', + '[Pizza and lasange] in (pizza, lasange, strogonvo)' => [ + ['Pizza', 'lasange'], + 'pizza,lasange,strogonvo', + ], + '[Rißtissen and Karlsruhe] in (rißtissen, Überligen, Karlsruhe)' => [ + ['Rißtissen', 'Karlsruhe'], + 'rißtissen,Überligen,Karlsruhe', + ], + '[überligen and Karlsruhe] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['überligen', 'Karlsruhe'], + 'Rißtissen,Überligen,Karlsruhe', + ], + ]; + } + + /** + * used for tests with valid input + * ignorecase is set to true + * results in no errors returned + * + * @return array + */ + public function validArrayForArrayConfigurationIgnoreCaseProvider() + { + return [ + '12 in [12, 13, 14]' => [ + '12', + ['12', '13', '14'], + ], + '1 in [5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa]' => [ + '1', + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '1', '333434', '1234', 'ssd', 'ysdfsa'], + ], + 'pizza in [Pizza, Lasange, Strogonvo]' => [ + 'pizza', + ['Pizza', 'Lasange', 'Strogonvo'], + ], + 'Pizza in [pizza, lasange, strogonvo]' => [ + 'Pizza', + ['pizza', 'lasange', 'strogonvo'], + ], + 'Rißtissen in (rißtissen, Überligen, Karlsruhe)' => [ + 'Rißtissen', + ['rißtissen', 'Überligen', 'Karlsruhe'], + ], + 'überligen in (Rißtissen, Überligen, Karlsruhe)' => [ + 'überligen', + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + + '[12 and 14] in (12, 13, 14)' => [ + ['12', '14'], + ['12', '13', '14'], + ], + '[1 and Ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ + ['1', 'Ssd'], + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '1', '333434', '1234', 'ssd', 'ysdfsa'], + ], + '[pizza and Lasange] in (Pizza, Lasange, Strogonvo)' => [ + ['pizza', 'Lasange'], + ['Pizza', 'Lasange', 'Strogonvo'], + ], + '[Pizza and lasange] in (pizza, lasange, strogonvo)' => [ + ['Pizza', 'lasange'], + ['pizza', 'lasange', 'strogonvo'], + ], + '[Rißtissen and Karlsruhe] in (rißtissen, Überligen, Karlsruhe)' => [ + ['Rißtissen', 'Karlsruhe'], + ['rißtissen', 'Überligen', 'Karlsruhe'], + ], + '[überligen and Karlsruhe] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['überligen', 'Karlsruhe'], + ['Rißtissen', 'Überligen', 'Karlsruhe'], ], ]; } @@ -129,12 +352,12 @@ class InArrayValidatorTest extends AbstractValidatorTest * * @return array */ - public function invalidArrayIgnoreCaseProvider() + public function invalidArrayForStringConfigurationIgnoreCaseProvider() { return [ - 'zwölf in (12, 13)' => [ + 'zwölf in (12, 13, 14)' => [ 'zwölf', - '12,13', + '12,13,14', ], '7 in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ '7', @@ -152,22 +375,98 @@ class InArrayValidatorTest extends AbstractValidatorTest 'lusange', 'Pizza,Lasange,Strogonvo', ], + + '[zwölf and 14] in (12, 13, 14)' => [ + ['zwölf', '14'], + '12,13,14', + ], + '[7 and Ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ + ['7', 'Ssd'], + '5,3234,oOIUoi8,3434,343,34,3,1,333434,1234,ssd,ysdfsa', + ], + '[riss and Karlsruhe] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['riss', 'Karlsruhe'], + 'Rißtissen,Überligen,Karlsruhe', + ], + '[pizzas and Lasange] in (Pizza, Lasange, Strogonvo)' => [ + ['pizzas', 'Lasange'], + 'Pizza,Lasange,Strogonvo', + ], + '[lusange and Strogonvo] in (Pizza, Lasange, Strogonvo)' => [ + ['lusange', 'Strogonvo'], + 'Pizza,Lasange,Strogonvo', + ], + ]; + } + + /** + * used for tests with invalid input + * ignorecase is set to true + * results in errors returned + * + * @return array + */ + public function invalidArrayForArrayConfigurationIgnoreCaseProvider() + { + return [ + 'zwölf in (12, 13, 14)' => [ + 'zwölf', + ['12', '13', '14'], + ], + '7 in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ + '7', + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '1', '333434', '1234', 'ssd', 'ysdfsa'], + ], + 'riss in (Rißtissen, Überligen, Karlsruhe)' => [ + 'riss', + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + 'pizzas in (Pizza, Lasange, Strogonvo)' => [ + 'pizzas', + ['Pizza', 'Lasange', 'Strogonvo'], + ], + 'lusange in (Pizza, Lasange, Strogonvo)' => [ + 'lusange', + ['Pizza', 'Lasange', 'Strogonvo'], + ], + + '[zwölf and 14] in (12, 13, 14)' => [ + ['zwölf', '14'], + ['12', '13', '14'], + ], + '[7 and Ssd] in (5, 3234, oOIUoi8, 3434, 343, 34, 3, 1, 333434, 1234, ssd, ysdfsa)' => [ + ['7', 'Ssd'], + ['5', '3234', 'oOIUoi8', '3434', '343', '34', '3', '1', '333434', '1234', 'ssd', 'ysdfsa'], + ], + '[riss and Karlsruhe] in (Rißtissen, Überligen, Karlsruhe)' => [ + ['riss', 'Karlsruhe'], + ['Rißtissen', 'Überligen', 'Karlsruhe'], + ], + '[pizzas and Lasange] in (Pizza, Lasange, Strogonvo)' => [ + ['pizzas', 'Lasange'], + ['Pizza', 'Lasange', 'Strogonvo'], + ], + '[lusange and Strogonvo] in (Pizza, Lasange, Strogonvo)' => [ + ['lusange', 'Strogonvo'], + ['Pizza', 'Lasange', 'Strogonvo'], + ], ]; } /** * @test - * @dataProvider validArrayProvider + * @dataProvider validArrayForStringConfigurationProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForValidInputReturnsNoErrors($value, $allowedOptionsString) + public function validateForValidInputOnStringConfigurationReturnsNoErrors($value, $allowedOptionsString) { $options = [ 'element' => uniqid('test'), 'errorMessage' => uniqid('error'), ]; + $options['array'] = $allowedOptionsString; $subject = $this->createSubject($options); @@ -176,12 +475,31 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider invalidArrayProvider + * @dataProvider validArrayForArrayConfigurationProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForValidInputOnArrayConfigurationReturnsNoErrors($value, $allowedOptionsString) + { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $subject = $this->createSubject($options); + + $this->assertFalse($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider invalidArrayForStringConfigurationProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForInvalidInputReturnsErrors($value, $allowedOptionsString) + public function validateForInvalidInputOnStringConfigurationReturnsErrors($value, $allowedOptionsString) { $options = [ 'element' => uniqid('test'), @@ -195,12 +513,31 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider validArrayProvider + * @dataProvider invalidArrayForArrayConfigurationProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForValidInputWithStrictComparisonReturnsNoErrors( + public function validateForInvalidInputOnArrayConfigurationReturnsErrors($value, $allowedOptionsString) + { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $subject = $this->createSubject($options); + + $this->assertTrue($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider validArrayForStringConfigurationProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForValidInputOnStringConfigurationWithStrictComparisonReturnsNoErrors( $value, $allowedOptionsString ) { @@ -217,12 +554,34 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider invalidArrayProvider + * @dataProvider validArrayForArrayConfigurationProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForInvalidInputWithStrictComparisonReturnsErrors( + public function validateForValidInputOnArrayConfigurationWithStrictComparisonReturnsNoErrors( + $value, + $allowedOptionsString + ) { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $options['strict'] = true; + $subject = $this->createSubject($options); + + $this->assertFalse($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider invalidArrayForStringConfigurationProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForInvalidInputOnStringConfigurationWithStrictComparisonReturnsErrors( $value, $allowedOptionsString ) { @@ -239,12 +598,34 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider validArrayIgnoreCaseProvider + * @dataProvider invalidArrayForArrayConfigurationProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForInvalidInputOnArrayConfigurationWithStrictComparisonReturnsErrors( + $value, + $allowedOptionsString + ) { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $options['strict'] = true; + $subject = $this->createSubject($options); + + $this->assertTrue($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider validArrayForStringConfigurationIgnoreCaseProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForValidInputWithIgnoreCaseReturnsNoErrors( + public function validateForValidInputOnStringConfigurationWithIgnoreCaseReturnsNoErrors( $value, $allowedOptionsString ) { @@ -261,12 +642,34 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider invalidArrayIgnoreCaseProvider + * @dataProvider validArrayForArrayConfigurationIgnoreCaseProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForValidInputOnArrayConfigurationWithIgnoreCaseReturnsNoErrors( + $value, + $allowedOptionsString + ) { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $options['ignorecase'] = true; + $subject = $this->createSubject($options); + + $this->assertFalse($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider invalidArrayForStringConfigurationIgnoreCaseProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForInvalidInputWithIgnoreCaseReturnsErrors( + public function validateForInvalidInputOnStringConfigurationWithIgnoreCaseReturnsErrors( $value, $allowedOptionsString ) { @@ -283,12 +686,34 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider validArrayIgnoreCaseProvider + * @dataProvider invalidArrayForArrayConfigurationIgnoreCaseProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForValidInputWithIgnoreCaseAndStrictReturnsNoErrors( + public function validateForInvalidInputOnArrayConfigurationWithIgnoreCaseReturnsErrors( + $value, + $allowedOptionsString + ) { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $options['ignorecase'] = true; + $subject = $this->createSubject($options); + + $this->assertTrue($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider validArrayForStringConfigurationIgnoreCaseProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForValidInputOnStringConfigurationWithIgnoreCaseAndStrictReturnsNoErrors( $value, $allowedOptionsString ) { @@ -306,12 +731,35 @@ class InArrayValidatorTest extends AbstractValidatorTest /** * @test - * @dataProvider invalidArrayIgnoreCaseProvider + * @dataProvider validArrayForArrayConfigurationIgnoreCaseProvider * * @param string $value * @param string $allowedOptionsString */ - public function validateForInvalidInputWithIgnoreCaseAndStrictReturnsErrors( + public function validateForValidInputOnArrayConfigurationWithIgnoreCaseAndStrictReturnsNoErrors( + $value, + $allowedOptionsString + ) { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $options['ignorecase'] = true; + $options['strict'] = true; + $subject = $this->createSubject($options); + + $this->assertFalse($subject->validate($value)->hasErrors()); + } + + /** + * @test + * @dataProvider invalidArrayForStringConfigurationIgnoreCaseProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForInvalidInputOnStringConfigurationWithIgnoreCaseAndStrictReturnsErrors( $value, $allowedOptionsString ) { @@ -326,4 +774,27 @@ class InArrayValidatorTest extends AbstractValidatorTest $this->assertTrue($subject->validate($value)->hasErrors()); } + + /** + * @test + * @dataProvider invalidArrayForArrayConfigurationIgnoreCaseProvider + * + * @param string $value + * @param string $allowedOptionsString + */ + public function validateForInvalidInputOnArrayConfigurationWithIgnoreCaseAndStrictReturnsErrors( + $value, + $allowedOptionsString + ) { + $options = [ + 'element' => uniqid('test'), + 'errorMessage' => uniqid('error'), + ]; + $options['array.'] = $allowedOptionsString; + $options['ignorecase'] = true; + $options['strict'] = true; + $subject = $this->createSubject($options); + + $this->assertTrue($subject->validate($value)->hasErrors()); + } } -- GitLab