/** * @dataProvider provideExtractPreferredValue */ public function testExtractPreferredValue($languageCode, $mode, $data, $expected) { $factory = new LanguageFallbackChainFactory(); $chain = $factory->newFromLanguageCode($languageCode, $mode); $resolved = $chain->extractPreferredValue($data); $this->assertEquals($expected, $resolved); }
private function newFormatterOptions($lang = 'en') { $fallbackMode = LanguageFallbackChainFactory::FALLBACK_ALL; $fallbackChainFactory = new LanguageFallbackChainFactory(); $fallbackChain = $fallbackChainFactory->newFromLanguageCode($lang, $fallbackMode); return new FormatterOptions(array(ValueFormatter::OPT_LANG => $lang, FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN => $fallbackChain)); }
/** * @param string[] $languageCodes * * @return string[] */ private function addFallbackLanguageCodes(array $languageCodes) { $languageCodesWithFallback = array(); foreach ($languageCodes as $languageCode) { $fallbackChain = $this->languageFallbackChainFactory->newFromLanguageCode($languageCode); $languageCodesWithFallback = array_merge($languageCodesWithFallback, $fallbackChain->getFetchLanguageCodes()); } return array_unique($languageCodesWithFallback); }
/** * @param array $params * * @return array * 0 => string[] languageCodes that the user wants returned * 1 => LanguageFallbackChain[] Keys are requested lang codes */ private function getLanguageCodesAndFallback(array $params) { $languageCodes = is_array($params['languages']) ? $params['languages'] : array(); $fallbackChains = array(); if ($params['languagefallback']) { $fallbackMode = LanguageFallbackChainFactory::FALLBACK_ALL; foreach ($languageCodes as $languageCode) { $fallbackChains[$languageCode] = $this->languageFallbackChainFactory->newFromLanguageCode($languageCode, $fallbackMode); } } return array(array_unique($languageCodes), $fallbackChains); }
/** * Initializes the options keys ValueFormatter::OPT_LANG and * FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN if they are not yet set. * * @param FormatterOptions $options The options to modify. * * @throws InvalidArgumentException * @todo : Sort out how the desired language is specified. We have two language options, * each accepting different ways of specifying the language. That's not good. * @todo: this shouldn't be public at all. Perhaps factor it out into a helper class. */ public function applyLanguageDefaults(FormatterOptions $options) { $options->defaultOption(ValueFormatter::OPT_LANG, $this->defaultLanguage->getCode()); $lang = $options->getOption(ValueFormatter::OPT_LANG); if (!is_string($lang)) { throw new InvalidArgumentException('The value of OPT_LANG must be a language code. For a fallback chain, use OPT_LANGUAGE_FALLBACK_CHAIN.'); } $fallbackOption = FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN; if (!$options->hasOption($fallbackOption)) { $fallbackMode = LanguageFallbackChainFactory::FALLBACK_ALL; $options->setOption($fallbackOption, $this->languageFallbackChainFactory->newFromLanguageCode($lang, $fallbackMode)); } if (!$options->getOption($fallbackOption) instanceof LanguageFallbackChain) { throw new InvalidArgumentException('The value of OPT_LANGUAGE_FALLBACK_CHAIN must be ' . 'an instance of LanguageFallbackChain.'); } }
/** * @dataProvider provideNewFromLanguageCodeException * @expectedException MWException */ public function testNewFromLanguageCodeException($langCode) { $factory = new LanguageFallbackChainFactory(); $factory->newFromLanguageCode($langCode); }
/** * @dataProvider provideTestAddEntityRevisionFallback */ public function testAddEntityRevisionFallback($addMetaData, array $expected) { $item = new Item(new ItemId('Q123101')); $item->getFingerprint()->setLabel('de', 'Oslo-de'); $item->getFingerprint()->setLabel('en', 'Oslo-en'); $item->getFingerprint()->setDescription('es', 'desc-es'); $item->getFingerprint()->setDescription('zh-sg', 'desc-zh-sg'); $entityRevision = new EntityRevision($item); $fallbackChainFactory = new LanguageFallbackChainFactory(); $fallbackMode = LanguageFallbackChainFactory::FALLBACK_ALL; $fallbackChains = array('de-formal' => $fallbackChainFactory->newFromLanguageCode('de-formal', $fallbackMode), 'es' => $fallbackChainFactory->newFromLanguageCode('es', $fallbackMode), 'qug' => $fallbackChainFactory->newFromLanguageCode('qug', $fallbackMode), 'zh-my' => $fallbackChainFactory->newFromLanguageCode('zh-my', $fallbackMode)); $filterLangCodes = array_keys($fallbackChains); $result = $this->getDefaultResult(); $resultBuilder = $this->getResultBuilder($result, $addMetaData); $resultBuilder->addEntityRevision(null, $entityRevision, array('labels', 'descriptions'), array(), $filterLangCodes, $fallbackChains); $data = $result->getResultData(); $this->assertEquals($expected, $data); }