public function setUp() { parent::setUp(); Piece_Right_Filter_Factory::clearInstances(); Piece_Right_Validator_Factory::clearInstances(); $this->exclusiveDirectory = dirname(__FILE__) . '/' . basename(__FILE__, '.php'); }
/** * Validates a field value by the given validations. * * @param string $fieldName * @param string $value * @param boolean $isFinals * @since Method available since Release 0.3.0 */ function _validateField($fieldName, $value, $isFinals) { foreach ($this->_config->getValidations($fieldName) as $validation) { if ($validation['useInFinals'] != $isFinals) { continue; } $validator =& Piece_Right_Validator_Factory::factory($validation['validator']); if (Piece_Right_Error::hasErrors()) { return; } if (is_array($value) && !$validator->isArrayable()) { trigger_error("The value of the field [ {$fieldName} ] is an array, but the validator [ {$validation['validator']} ] is not arrayable. This validation is skipped.", E_USER_WARNING); $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage()); continue; } $validator->setResults($this->_results); $validator->setRules($validation['rules']); $validator->setMessage($validation['message']); $validator->setPayload($this->_payload); if (!$validator->validate($value)) { $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage()); if (!$this->_config->forceValidation($fieldName)) { return; } } } }
/** * @since Method available since Release 1.3.0 */ function testPayload() { $oldValidatorDirectories = $GLOBALS['PIECE_RIGHT_Validator_Directories']; Piece_Right_Validator_Factory::addValidatorDirectory($this->_cacheDirectory); $config =& new Piece_Right_Config(); $config->addValidation('email', 'ScriptPayloadTest'); $container =& new stdClass(); $payload =& new stdClass(); $script =& new Piece_Right_Validation_Script($this->_cacheDirectory, $this->_cacheDirectory, null, array(&$this, 'turnOnPostRunCallbackCalled')); $script->setPayload($payload); $results = $script->run('Script', $container, $config); $this->assertEquals(0, $results->countErrors()); $this->assertTrue(array_key_exists('foo', $payload)); $this->assertEquals('bar', $payload->foo); $GLOBALS['PIECE_RIGHT_Validator_Directories'] = $oldValidatorDirectories; }
/** * Validates a field value by the given validations. * * @param string $fieldName * @param string $value * @param boolean $isFinals * @throws PIECE_RIGHT_ERROR_NOT_FOUND * @throws PIECE_RIGHT_ERROR_INVALID_VALIDATOR * @throws PIECE_RIGHT_ERROR_CANNOT_READ * @throws PIECE_RIGHT_ERROR_NOT_READABLE * @since Method available since Release 0.3.0 */ function _validateField($fieldName, $value, $isFinals) { foreach ($this->_config->getValidations($fieldName) as $validation) { if ($validation['useInFinals'] != $isFinals) { continue; } $validator =& Piece_Right_Validator_Factory::factory($validation['validator']); if (Piece_Right_Error::hasErrors('exception')) { return; } if (is_array($value) && !$validator->isArrayable()) { Piece_Right_Error::pushCallback(create_function('$error', 'return ' . PEAR_ERRORSTACK_PUSHANDLOG . ';')); Piece_Right_Error::push(PIECE_RIGHT_ERROR_NOT_ARRAYABLE, "The value of the field [ {$fieldName} ] is an array, but the validator [ {$validation['validator']} ] is not arrayable. This validation is skipped.", 'warning'); Piece_Right_Error::popCallback(); $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage()); continue; } $validator->setResults($this->_results); $validator->setRules($validation['rules']); $validator->setMessage($validation['message']); $validator->setPayload($this->_payload); if (!$validator->validate($value)) { $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage()); } } }
/** * Adds a prefix for a validator. * * @param string $validatorPrefix */ function addValidatorPrefix($validatorPrefix) { Piece_Right_Validator_Factory::addValidatorPrefix($validatorPrefix); }
/** * Creates a validator object from the validator directories. * * @param string $validatorName * @return mixed * @throws PIECE_RIGHT_ERROR_NOT_FOUND * @throws PIECE_RIGHT_ERROR_INVALID_VALIDATOR * @throws PIECE_RIGHT_ERROR_CANNOT_READ */ function &factory($validatorName) { if (!array_key_exists($validatorName, $GLOBALS['PIECE_RIGHT_Validator_Instances'])) { $found = false; foreach ($GLOBALS['PIECE_RIGHT_Validator_Prefixes'] as $prefixAlias) { $validatorClass = Piece_Right_Validator_Factory::_getValidatorClass($validatorName, $prefixAlias); if (Piece_Right_ClassLoader::loaded($validatorClass)) { $found = true; break; } } if (!$found) { foreach ($GLOBALS['PIECE_RIGHT_Validator_Directories'] as $validatorDirectory) { foreach ($GLOBALS['PIECE_RIGHT_Validator_Prefixes'] as $prefixAlias) { $validatorClass = Piece_Right_Validator_Factory::_getValidatorClass($validatorName, $prefixAlias); Piece_Right_Error::disableCallback(); Piece_Right_ClassLoader::load($validatorClass, $validatorDirectory); Piece_Right_Error::enableCallback(); if (Piece_Right_Error::hasErrors()) { $error = Piece_Right_Error::pop(); if ($error['code'] == PIECE_RIGHT_ERROR_NOT_FOUND) { continue; } Piece_Right_Error::push(PIECE_RIGHT_ERROR_CANNOT_READ, "Failed to read the validator [ {$validatorName} ] for any reasons.", 'exception', array(), $error); $return = null; return $return; } if (Piece_Right_ClassLoader::loaded($validatorClass)) { $found = true; break 2; } } } if (!$found) { Piece_Right_Error::push(PIECE_RIGHT_ERROR_NOT_FOUND, "The validator [ {$validatorName} ] is not found in the following directories:\n" . implode("\n", $GLOBALS['PIECE_RIGHT_Validator_Directories'])); $return = null; return $return; } } $validator =& new $validatorClass($prefixAlias); if (!is_subclass_of($validator, 'Piece_Right_Validator_Common')) { Piece_Right_Error::push(PIECE_RIGHT_ERROR_INVALID_VALIDATOR, "The validator [ {$validatorName} ] is invalid."); $return = null; return $return; } $GLOBALS['PIECE_RIGHT_Validator_Instances'][$validatorName] =& $validator; } else { $GLOBALS['PIECE_RIGHT_Validator_Instances'][$validatorName]->clear(); } return $GLOBALS['PIECE_RIGHT_Validator_Instances'][$validatorName]; }
function testValidatorPrefixes() { $oldValidatorPrefixes = $GLOBALS['PIECE_RIGHT_Validator_Prefixes']; $oldValidatorDirectories = $GLOBALS['PIECE_RIGHT_Validator_Directories']; $config =& new Piece_Unity_Config(); $config->setConfiguration('KernelConfigurator', 'validationValidatorPrefixes', array('KernelConfiguratorTestCaseAlias')); $config->setConfiguration('KernelConfigurator', 'validationValidatorDirectories', array(dirname(__FILE__) . '/KernelConfiguratorTestCase')); $context =& Piece_Unity_Context::singleton(); $context->setConfiguration($config); $configurator =& new Piece_Unity_Plugin_KernelConfigurator(); $configurator->invoke(); $foo =& Piece_Right_Validator_Factory::factory('FooValidator'); $this->assertTrue(is_object($foo)); $this->assertTrue(is_a($foo, 'KernelConfiguratorTestCaseAlias_FooValidator')); Piece_Right_Validator_Factory::clearInstances(); $GLOBALS['PIECE_RIGHT_Validator_Directories'] = $oldValidatorDirectories; $GLOBALS['PIECE_RIGHT_Validator_Prefixes'] = $oldValidatorPrefixes; }
function tearDown() { foreach (array_keys($_POST) as $field) { unset($_POST[$field]); } unset($_SERVER['REQUEST_METHOD']); Piece_Right_Validator_Factory::clearInstances(); $GLOBALS['PIECE_RIGHT_Validator_Directories'] = $this->_oldValidatorDirectories; Piece_Right_Filter_Factory::clearInstances(); $GLOBALS['PIECE_RIGHT_Filter_Directories'] = $this->_oldFilterDirectories; $cache =& new Cache_Lite_File(array('cacheDir' => "{$this->_cacheDirectory}/", 'masterFile' => '', 'automaticSerialization' => true, 'errorHandlingAPIBreak' => true)); $cache->clean(); Piece_Right_Error::clearErrors(); Piece_Right_Error::popCallback(); }