/**
  * Returns a LabelDescriptionLookup where terms are prefetched for the given
  * entity ids with a language fallback chain applied for the given language.
  *
  * @param Language $language
  * @param EntityId[] $entityIds Array of entity ids that should be prefetched. Only relevant
  *  when a TermBuffer was set in the constructor. Default is no prefetching.
  * @param string[] $termTypes Array with one or more of the types 'label', 'alias' and
  *  'description'. Default is only 'label'.
  *
  * @return LabelDescriptionLookup
  */
 public function newLabelDescriptionLookup(Language $language, array $entityIds = array(), array $termTypes = array('label'))
 {
     $languageFallbackChain = $this->languageFallbackChainFactory->newFromLanguage($language, $this->fallbackMode);
     $languages = $languageFallbackChain->getFetchLanguageCodes();
     $labelDescriptionLookup = new LanguageFallbackLabelDescriptionLookup($this->termLookup, $languageFallbackChain);
     // Optionally prefetch the terms of the entities passed in here
     // $termLookup and $termBuffer should be the same BufferingTermLookup then
     if ($this->termBuffer !== null) {
         $this->termBuffer->prefetchTerms($entityIds, $termTypes, $languages);
     }
     return $labelDescriptionLookup;
 }
 /**
  * @dataProvider providerNewFromLanguage
  */
 public function testNewFromLanguage($lang, $mode, $expected, $disabledVariants = array())
 {
     $this->setupDisabledVariants($disabledVariants);
     $factory = new LanguageFallbackChainFactory();
     $chain = $factory->newFromLanguage(Language::factory($lang), $mode)->getFallbackChain();
     $this->assertChainEquals($expected, $chain);
 }
 /**
  * @dataProvider provideExtractPreferredValueOrAny
  */
 public function testExtractPreferredValueOrAny($languageCode, $mode, $data, $expected)
 {
     $factory = new LanguageFallbackChainFactory();
     $chain = $factory->newFromLanguage(Language::factory($languageCode), $mode);
     $resolved = $chain->extractPreferredValueOrAny($data);
     $this->assertEquals($expected, $resolved);
 }
 /**
  * @param Language $language
  * @param UsageAccumulator $usageAccumulator
  *
  * @return SnakFormatter
  */
 private function newSnakFormatterForLanguage(Language $language, UsageAccumulator $usageAccumulator)
 {
     $languageFallbackChain = $this->languageFallbackChainFactory->newFromLanguage($language, LanguageFallbackChainFactory::FALLBACK_SELF | LanguageFallbackChainFactory::FALLBACK_VARIANTS);
     $options = new FormatterOptions(array(FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN => $languageFallbackChain, ValueFormatter::OPT_LANG => $language->getCode()));
     $snakFormatter = new UsageTrackingSnakFormatter($this->snakFormatterFactory->getSnakFormatter(SnakFormatter::FORMAT_WIKI, $options), $usageAccumulator, $languageFallbackChain->getFetchLanguageCodes());
     return $snakFormatter;
 }
 /**
  * Set service objects to use. Unit tests may call this to substitute mock
  * services.
  */
 public function initServices(DataTypeFactory $dataTypeFactory, PropertyInfoStore $propertyInfoStore, EntityIdFormatterFactory $entityIdFormatterFactory, LanguageFallbackChainFactory $languageFallbackChainFactory, EntityTitleLookup $titleLookup, BufferingTermLookup $bufferingTermLookup)
 {
     $fallbackMode = LanguageFallbackChainFactory::FALLBACK_ALL;
     $this->labelDescriptionLookup = new LanguageFallbackLabelDescriptionLookup($bufferingTermLookup, $languageFallbackChainFactory->newFromLanguage($this->getLanguage(), $fallbackMode));
     $this->dataTypeFactory = $dataTypeFactory;
     $this->propertyInfoStore = $propertyInfoStore;
     $this->entityIdFormatter = $entityIdFormatterFactory->getEntityIdFormatter($this->labelDescriptionLookup);
     $this->titleLookup = $titleLookup;
     $this->bufferingTermLookup = $bufferingTermLookup;
 }
 private function getEntityAccessor(EntityLookup $entityLookup = null, UsageAccumulator $usageAccumulator = null, $langCode = 'en')
 {
     $language = new Language($langCode);
     $propertyDataTypeLookup = $this->getMock('Wikibase\\DataModel\\Services\\Lookup\\PropertyDataTypeLookup');
     $propertyDataTypeLookup->expects($this->any())->method('getDataTypeIdForProperty')->will($this->returnValue('structured-cat'));
     $fallbackChainFactory = new LanguageFallbackChainFactory();
     $fallbackChain = $fallbackChainFactory->newFromLanguage($language, LanguageFallbackChainFactory::FALLBACK_SELF | LanguageFallbackChainFactory::FALLBACK_VARIANTS);
     $termsLanguages = $this->getMock('Wikibase\\Lib\\ContentLanguages');
     $termsLanguages->expects($this->any())->method('getLanguages')->will($this->returnValue(array('de', $langCode, 'es', 'ja')));
     return new EntityAccessor(new BasicEntityIdParser(), $entityLookup ?: new MockRepository(), $usageAccumulator ? $usageAccumulator : new HashUsageAccumulator(), $propertyDataTypeLookup, $fallbackChain, $language, $termsLanguages);
 }
 /**
  * @param Language $language
  *
  * @return LanguageFallbackChain
  */
 private function getLanguageFallbackChain(Language $language)
 {
     // Language fallback must depend ONLY on the target language,
     // so we don't confuse the parser cache with user specific HTML.
     return $this->languageFallbackChainFactory->newFromLanguage($language);
 }
 public function provideApplyLanguageDefaults()
 {
     $languageFallbackFactory = new LanguageFallbackChainFactory();
     $languageFallback = $languageFallbackFactory->newFromLanguage(Language::factory('fr'));
     return array('empty' => array(new FormatterOptions(array()), 'en', 'en'), 'language code set' => array(new FormatterOptions(array(ValueFormatter::OPT_LANG => 'de')), 'de', 'de'), 'language fallback set' => array(new FormatterOptions(array(FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN => $languageFallback)), 'en', 'fr'), 'language code and fallback set' => array(new FormatterOptions(array(ValueFormatter::OPT_LANG => 'de', FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN => $languageFallback)), 'de', 'fr'));
 }
 public function provideNewFormatter_LabelDescriptionLookupOption()
 {
     $labelDescriptionLookup = $this->getMock('Wikibase\\DataModel\\Services\\Lookup\\LabelDescriptionLookup');
     $labelDescriptionLookup->expects($this->any())->method('getLabel')->will($this->returnValue(new Term('xy', 'Custom LabelDescriptionLookup')));
     $fallbackFactory = new LanguageFallbackChainFactory();
     $fallbackChain = $fallbackFactory->newFromLanguage(Language::factory('de-ch'));
     return array('language option' => array('newEntityIdFormatter', new FormatterOptions(array(ValueFormatter::OPT_LANG => 'de')), new EntityIdValue(new ItemId('Q5')), '@>Name für Q5<@'), 'fallback option' => array('newEntityIdFormatter', new FormatterOptions(array(FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN => $fallbackChain)), new EntityIdValue(new ItemId('Q5')), '@>Name für Q5<@'), 'LabelDescriptionLookup option' => array('newEntityIdFormatter', new FormatterOptions(array(FormatterLabelDescriptionLookupFactory::OPT_LABEL_DESCRIPTION_LOOKUP => $labelDescriptionLookup)), new EntityIdValue(new ItemId('Q5')), '@>Custom LabelDescriptionLookup<@'));
 }