/**
  * @param ValueParser $parser
  * @param string $value
  * @param ValueValidator|null $validator
  *
  * @return array
  */
 private function parseStringValue(ValueParser $parser, $value, ValueValidator $validator = null)
 {
     $result = array('raw' => $value);
     try {
         $parseResult = $parser->parse($value);
     } catch (ParseException $parseError) {
         $this->addParseErrorToResult($result, $parseError);
         return $result;
     }
     if ($parseResult instanceof DataValue) {
         $result['value'] = $parseResult->getArrayValue();
         $result['type'] = $parseResult->getType();
     } else {
         $result['value'] = $parseResult;
     }
     if ($validator) {
         $validatorResult = $validator->validate($parseResult);
         $validationStatus = $this->validatorErrorLocalizer->getResultStatus($validatorResult);
         $result['valid'] = $validationStatus->isOK();
         if (!$validationStatus->isOK()) {
             $result['error'] = 'ValidationError';
             $this->errorReporter->addStatusToResult($validationStatus, $result);
             $result['validation-errors'] = $this->getValidatorErrorCodes($validatorResult->getErrors());
         }
     }
     return $result;
 }
 /**
  * @dataProvider provideGetResultStatus()
  */
 public function testGetResultStatus(Result $result)
 {
     $localizer = new ValidatorErrorLocalizer($this->getMockFormatter());
     $status = $localizer->getResultStatus($result);
     $this->assertInstanceOf('Status', $status);
     $this->assertEquals($result->isValid(), $status->isOk(), 'isOK()');
     $this->assertEquals(count($result->getErrors()), count($status->getErrorsArray()), 'Error count:');
 }