/**
  * Is validator check valid?
  *
  * @see WirecardCEE_Stdlib_Validate_Interface::isValid()
  */
 public function isValid($value, $context = null)
 {
     $context = array_change_key_case($context, CASE_LOWER);
     switch ($this->hashAlgorithm) {
         case WirecardCEE_Stdlib_Fingerprint::HASH_ALGORITHM_HMAC_SHA512:
         case WirecardCEE_Stdlib_Fingerprint::HASH_ALGORITHM_SHA512:
             $stringLength = 128;
             break;
         case WirecardCEE_Stdlib_Fingerprint::HASH_ALGORITHM_MD5:
             $stringLength = 32;
             break;
         default:
             throw new WirecardCEE_Stdlib_Exception_UnexpectedValueException(sprintf("Used hash algorithm '%s' is not supported. MD5, SHA512, or HMAC_SHA512 are currently supported.", $this->hashAlgorithm));
             break;
     }
     if (strlen($value) != $stringLength) {
         return false;
     }
     if ($this->fingerprintOrderType == self::TYPE_FIXED) {
         $fingerprintOrder = $this->fingerprintOrder;
     } else {
         if (array_key_exists($this->fingerprintOrderField, $context)) {
             $fingerprintOrder = new WirecardCEE_Stdlib_FingerprintOrder(strtolower($context[$this->fingerprintOrderField]));
         } else {
             $this->_error(self::FINGERPRINTORDER_MISSING);
             return false;
         }
     }
     $fingerprintOrder->setOrder(array_map('strtolower', $this->fingerprintOrder->__toArray()));
     if (!in_array('secret', $fingerprintOrder->__toArray())) {
         throw new WirecardCEE_Stdlib_Exception_UnexpectedValueException();
     }
     $fingerprintFields = array();
     foreach ($fingerprintOrder as $fingerprintFieldKey) {
         if ($fingerprintFieldKey == 'secret') {
             $fingerprintFields[$fingerprintFieldKey] = $this->secret;
         } else {
             $fingerprintFields[$fingerprintFieldKey] = isset($context[$fingerprintFieldKey]) ? $context[$fingerprintFieldKey] : '';
         }
     }
     if (!WirecardCEE_Stdlib_Fingerprint::compare($fingerprintFields, $fingerprintOrder, $value)) {
         $this->_error(self::INVALID);
         return false;
     }
     return true;
 }
 public function testOffsetUnset()
 {
     $this->object['foo'] = 'bar';
     $this->object->offsetUnset('foo');
     $this->assertArrayNotHasKey('foo', (array) $this->object);
 }