[FEATURE] Introducing a BooleanValidator.
authorPascal Dürsteler <pascal.duersteler@gmail.com>
Wed, 27 Feb 2013 12:00:34 +0000 (13:00 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Sun, 3 Mar 2013 08:35:09 +0000 (09:35 +0100)
A validator for boolean fields, which takes an option to set expectations.

Resolves: #45880
Releases: 6.1
Change-Id: I2aaf7bec8847483646a8562e7ea3da416d088381
Reviewed-on: https://review.typo3.org/18512
Reviewed-by: Stefan Froemken
Tested-by: Stefan Froemken
Reviewed-by: Anja Leichsenring
Tested-by: Anja Leichsenring
typo3/sysext/extbase/Classes/Validation/Validator/BooleanValidator.php [new file with mode: 0644]
typo3/sysext/extbase/Tests/Unit/Validation/Validator/BooleanValidatorTest.php [new file with mode: 0644]

diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/BooleanValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/BooleanValidator.php
new file mode 100644 (file)
index 0000000..e17dd6d
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+namespace TYPO3\CMS\Extbase\Validation\Validator;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Pascal Dürsteler <pascal.duersteler@gmail.com>
+ *  Extbase is a backport of TYPO3 Flow. All credits go to the TYPO3 Flow team.
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+/**
+ * Validator for boolean values
+ */
+class BooleanValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
+
+       /**
+        * Returns TRUE if the given property value is a boolean matching the expectation.
+        *
+        * If at least one error occurred, the result is FALSE.
+        *
+        * Also testing for '1' (true), '0' and '' (false) because casting varies between
+        * tests and actual usage. This makes the validator loose but still keeping functionality.
+        *
+        * @param mixed $value The value that should be validated
+        * @return boolean TRUE if the value is within the range, otherwise FALSE
+        */
+       public function isValid($value) {
+               switch (strtolower((string)$this->options['is'])) {
+                       case 'true':
+                       case '1':
+                               $expectation = TRUE;
+                               break;
+                       case 'false':
+                       case '':
+                       case '0':
+                               $expectation = FALSE;
+                               break;
+                       default:
+                               $this->addError('The given expectation is not valid.', 1361959227);
+                               return FALSE;
+               }
+
+               if ($value === $expectation) {
+                       return TRUE;
+               } else {
+                       if (!is_bool($value)) {
+                               $this->addError('The given subject is not true.', 1361959230);
+                       } else {
+                               if ($expectation) {
+                                       $this->addError('The given subject is not true.', 1361959228);
+                               } else {
+                                       $this->addError('The given subject is not false.', 1361959229);
+                               }
+                       }
+                       return FALSE;
+               }
+       }
+
+}
+
+?>
diff --git a/typo3/sysext/extbase/Tests/Unit/Validation/Validator/BooleanValidatorTest.php b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/BooleanValidatorTest.php
new file mode 100644 (file)
index 0000000..78b6f72
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+namespace TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator;
+
+/*                                                                        *
+ * This script belongs to the Extbase framework.                            *
+ *                                                                        *
+ * It is free software; you can redistribute it and/or modify it under    *
+ * the terms of the GNU Lesser General Public License as published by the *
+ * Free Software Foundation, either version 3 of the License, or (at your *
+ * option) any later version.                                             *
+ *                                                                        *
+ * This script is distributed in the hope that it will be useful, but     *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-    *
+ * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser       *
+ * General Public License for more details.                               *
+ *                                                                        *
+ * You should have received a copy of the GNU Lesser General Public       *
+ * License along with the script.                                         *
+ * If not, see http://www.gnu.org/licenses/lgpl.html                      *
+ *                                                                        *
+ * The TYPO3 project - inspiring people to share!                         *
+ *                                                                        */
+require_once 'AbstractValidatorTestcase.php';
+
+/**
+ * Testcase for the number range validator
+ *
+ * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
+ */
+class BooleanValidatorTest extends \TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator\AbstractValidatorTestcase {
+
+       protected $validatorClassName = 'TYPO3\\CMS\\Extbase\\Validation\\Validator\\BooleanValidator';
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsNoErrorForAFalseStringExpectation() {
+               $this->validatorOptions(array('is' => 'false'));
+               $this->assertFalse($this->validator->validate(FALSE)->hasErrors());
+       }
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsNoErrorForATrueStringExpectation() {
+               $this->validatorOptions(array('is' => 'true'));
+               $this->assertFalse($this->validator->validate(TRUE)->hasErrors());
+       }
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsNoErrorForATrueExpectation() {
+               $this->validatorOptions(array('is' => TRUE));
+               $this->assertFalse($this->validator->validate(TRUE)->hasErrors());
+       }
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsNoErrorForAFalseExpectation() {
+               $this->validatorOptions(array('is' => FALSE));
+               $this->assertFalse($this->validator->validate(FALSE)->hasErrors());
+       }
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsErrorForTrueWhenFalseExpected() {
+               $this->validatorOptions(array('is' => FALSE));
+               $this->assertTrue($this->validator->validate(TRUE)->hasErrors());
+       }
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsErrorForFalseWhenTrueExpected() {
+               $this->validatorOptions(array('is' => TRUE));
+               $this->assertTrue($this->validator->validate(FALSE)->hasErrors());
+       }
+
+       /**
+        * @test
+        * @author Pascal Dürsteler <pascal.duersteler@gmail.com>
+        */
+       public function booleanValidatorReturnsErrorForAString() {
+               $this->validatorOptions(array('is' => TRUE));
+               $this->assertTrue($this->validator->validate('a string')->hasErrors());
+       }
+}
+
+?>