/**
  * @see SnakFormatter::formatSnak
  *
  * @param Snak $snak
  *
  * @throws InvalidArgumentException
  * @throws FormattingException
  * @return string Either plain text, wikitext or HTML, depending on the SnakFormatter provided.
  */
 public function formatSnak(Snak $snak)
 {
     try {
         return $this->snakFormatter->formatSnak($snak);
     } catch (MismatchingDataValueTypeException $ex) {
         if ($ex->getDataValueType() === UnDeserializableValue::getType()) {
             $warningText = $this->formatWarning('wikibase-undeserializable-value');
         } else {
             $warningText = $this->formatWarning('wikibase-snakformatter-valuetype-mismatch', $ex->getDataValueType(), $ex->getExpectedValueType());
         }
     } catch (PropertyDataTypeLookupException $ex) {
         $warningText = $this->formatWarning('wikibase-snakformatter-property-not-found', $snak->getPropertyId()->getSerialization());
     } catch (FormattingException $ex) {
         $warningText = $this->formatWarning('wikibase-snakformatter-formatting-exception', $ex->getMessage());
     }
     if ($snak instanceof PropertyValueSnak && $this->fallbackFormatter) {
         $value = $snak->getDataValue();
         $valueText = $this->fallbackFormatter->format($value);
         if ($valueText !== '') {
             return $valueText . ' ' . $warningText;
         }
     }
     return $warningText;
 }
 /**
  * @dataProvider instanceProvider
  *
  * @param UnDeserializableValue $value
  * @param array $arguments
  */
 public function testGetTargetType(UnDeserializableValue $value, array $arguments)
 {
     $this->assertEquals($arguments[1], $value->getTargetType());
 }
 /**
  * @param DataValue $value
  *
  * @return boolean
  */
 private function isUnDeserializableValue(DataValue $value)
 {
     return $value->getType() === UnDeserializableValue::getType();
 }