/**
  * @dataProvider provideFetchLanguageCodes
  */
 public function testGetFetchLanguageCodes(array $languages)
 {
     $languagesWithConversion = array();
     foreach ($languages as $language) {
         $languagesWithConversion[] = LanguageWithConversion::factory($language);
     }
     $chain = new LanguageFallbackChain($languagesWithConversion);
     $codes = $chain->getFetchLanguageCodes();
     $this->assertEquals($languages, $codes);
 }
 /**
  * @param string[] $terms
  * @param string[] $fetchLanguages
  *
  * @return TermFallback|null
  */
 private function getTermFallback(array $terms, array $fetchLanguages)
 {
     $extractedData = $this->languageFallbackChain->extractPreferredValue($terms);
     if ($extractedData === null) {
         return null;
     }
     // $fetchLanguages are in order of preference
     $requestLanguage = reset($fetchLanguages);
     // see extractPreferredValue for array keys
     return new TermFallback($requestLanguage, $extractedData['value'], $extractedData['language'], $extractedData['source']);
 }
 private function getPreferredTerm($termsByLanguage)
 {
     if (empty($termsByLanguage)) {
         return null;
     }
     return $this->languageFallback->extractPreferredValueOrAny($termsByLanguage);
 }
 /**
  * @param ParserOutput $parserOutput
  * @param EntityDocument $entity
  */
 private function addTitleTextToParserOutput(ParserOutput $parserOutput, EntityDocument $entity)
 {
     $titleText = null;
     if ($entity instanceof FingerprintProvider) {
         $labels = $entity->getFingerprint()->getLabels()->toTextArray();
         $preferred = $this->languageFallbackChain->extractPreferredValue($labels);
         if (is_array($preferred)) {
             $titleText = $preferred['value'];
         }
     }
     if (!is_string($titleText)) {
         $entityId = $entity->getId();
         if ($entityId instanceof EntityId) {
             $titleText = $entityId->getSerialization();
         }
     }
     $parserOutput->setExtensionData('wikibase-titletext', $titleText);
 }
 private function newClientEntitySerializer()
 {
     return new ClientEntitySerializer($this->dataTypeLookup, array_unique(array_merge($this->termsLanguages->getLanguages(), $this->fallbackChain->getFetchLanguageCodes(), array($this->language->getCode()))), array($this->language->getCode() => $this->fallbackChain));
 }