diff --git a/core/modules/locale/tests/Drupal/locale/Tests/LocaleStringFallbackTest.php b/core/modules/locale/tests/Drupal/locale/Tests/LocaleStringFallbackTest.php index 013011e..558047f 100644 --- a/core/modules/locale/tests/Drupal/locale/Tests/LocaleStringFallbackTest.php +++ b/core/modules/locale/tests/Drupal/locale/Tests/LocaleStringFallbackTest.php @@ -7,17 +7,17 @@ namespace Drupal\locale\Tests; +use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\locale\LocaleTranslation; use Drupal\Tests\UnitTestCase; /** * Tests locale translation language fallback. * - * @group locale + * @group Drupal + * @group Locale * - * @ingroup phpunit - * - * @see \Drupal\locale\LocaleLookup + * @coversDefaultClass \Drupal\locale\LocaleLookup */ class LocaleStringFallbackTest extends UnitTestCase { @@ -29,6 +29,16 @@ class LocaleStringFallbackTest extends UnitTestCase { protected $storage; /** + * @var \Drupal\Core\Cache\CacheBackendInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $cache; + + /** + * @var \Drupal\Core\Lock\LockBackendInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $lock; + + /** * The translation. * * @var \Drupal\locale\LocaleTranslation @@ -43,25 +53,18 @@ class LocaleStringFallbackTest extends UnitTestCase { protected $user; /** - * A mocked container object built from ContainerInterface. - * - * @var \Symfony\Component\DependencyInjection\ContainerInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $container; - - /** * A mocked config factory built with UnitTestCase::getConfigFactoryStub(). * * @var \Drupal\Core\Config\ConfigFactory|\PHPUnit_Framework_MockObject_MockBuilder */ - protected $config_factory; + protected $configFactory; /** * A mocked language manager built from LanguageManagerInterface. * * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $language_manager; + protected $languageManager; /** * {@inheritdoc} @@ -87,30 +90,18 @@ protected function setUp() { ->method('getRoles') ->will($this->returnValue(array('anonymous'))); - $this->config_factory = $this->getConfigFactoryStub(array('locale.settings' => array('translate_english' => TRUE, 'cache_strings' => FALSE))); + $this->configFactory = $this->getConfigFactoryStub(array('locale.settings' => array('translate_english' => TRUE, 'cache_strings' => FALSE))); - $this->language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); + $this->languageManager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface'); - $this->container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface'); + $container = new ContainerBuilder(); + $container->set('current_user', $this->user); + $container->set('config.factory', $this->configFactory); + $container->set('language_manager', $this->languageManager); - $user = $this->user; - $config_factory = $this->config_factory; - $language_manager = $this->language_manager; + \Drupal::setContainer($container); - $this->container->expects($this->any()) - ->method('get') - ->will($this->returnCallback(function ($arg) use ($user, $config_factory, $language_manager) { - $map = array( - 'current_user' => $user, - 'config.factory' => $config_factory, - 'language_manager' => $language_manager, - ); - return $map[$arg]; - })); - - \Drupal::setContainer($this->container); - - $this->translation = new LocaleTranslation($this->storage, $this->cache, $this->lock, $this->config_factory); + $this->translation = new LocaleTranslation($this->storage, $this->cache, $this->lock, $this->configFactory); } /** @@ -145,65 +136,6 @@ public function testStringTranslationWithoutFallback() { public function testStringTranslationWithFallback() { $languages = array('en', 'pl', 'cs'); - - $this->storage->expects($this->any()) - ->method('findTranslation') - ->will($this->returnCallback('Drupal\locale\Tests\LocaleStringFallbackTest::stringStorageMockFindTranslation')); - - // Dry run test with untranslated strings. - foreach ($languages as $lang) { - $this->assertEquals(FALSE, $this->translation->getStringTranslation($lang, 'not translated', 'irrelevant')); - } - - $this->language_manager->expects($this->any()) - ->method('getFallbackCandidates') - ->will($this->returnCallback('Drupal\locale\Tests\LocaleStringFallbackTest::getFallbackChain')); - - // Testing CS with fallback to en. - $this->assertEquals('test v české', $this->translation->getStringTranslation('cs', 'test', 'irrelevant')); - $this->assertEquals('falešný', $this->translation->getStringTranslation('cs', 'fake', 'irrelevant')); - $this->assertEquals('chybějící pl', $this->translation->getStringTranslation('cs', 'missing pl', 'irrelevant')); - $this->assertEquals('missing cs', $this->translation->getStringTranslation('cs', 'missing cs', 'irrelevant')); - $this->assertEquals('missing both', $this->translation->getStringTranslation('cs', 'missing both', 'irrelevant')); - - // Testing PL with fallback to cs, en. - $this->assertEquals('test po polsku', $this->translation->getStringTranslation('pl', 'test', 'irrelevant')); - $this->assertEquals('ściema', $this->translation->getStringTranslation('pl', 'fake', 'irrelevant')); - $this->assertEquals('chybějící pl', $this->translation->getStringTranslation('pl', 'missing pl', 'irrelevant')); - $this->assertEquals('zaginiony czech', $this->translation->getStringTranslation('pl', 'missing cs', 'irrelevant')); - $this->assertEquals('missing both', $this->translation->getStringTranslation('pl', 'missing both', 'irrelevant')); - } - - /** - * Returns different fallback chains depending on requested language. - * - * @param string $langcode - * The language code to provide fallbacks for. - * - * @return array - * An array of language codes. - */ - public static function getFallbackChain($langcode) { - $chains = array( - 'pl' => array('cs', 'en'), - 'cs' => array('en'), - ); - - return $chains[$langcode]; - } - - /** - * Mimics real StringStorage::findTranslation method. - * - * @param array $arg - * Array containing three keys: language, source and context. The third key - * is ignored for purpose of this test. - * - * @return object|bool - * An object containing one property 'translation' if translations is found; - * otherwise TRUE. - */ - public static function stringStorageMockFindTranslation($arg) { // These are fake words! $translations = array( 'en' => array( @@ -224,12 +156,46 @@ public static function stringStorageMockFindTranslation($arg) { 'missing pl' => 'chybějící pl', ), ); + $this->storage->expects($this->any()) + ->method('findTranslation') + ->will($this->returnCallback(function ($argument) use ($translations) { + if (isset($translations[$argument['language']][$argument['source']])) { + return (object) array('translation' => $translations[$argument['language']][$argument['source']]); + } + return TRUE; + })); - if (isset($translations[$arg['language']][$arg['source']])) { - return (object) array('translation' => $translations[$arg['language']][$arg['source']]); + // Dry run test with untranslated strings. + foreach ($languages as $lang) { + $this->assertEquals(FALSE, $this->translation->getStringTranslation($lang, 'not translated', 'irrelevant')); } - return TRUE; + $this->languageManager->expects($this->any()) + ->method('getFallbackCandidates') + ->will($this->returnCallback(function ($langcode) { + switch ($langcode) { + case 'pl': + return array('cs', 'en'); + case 'cs': + return array('en'); + default: + return array(); + } + })); + + // Testing CS with fallback to en. + $this->assertEquals('test v české', $this->translation->getStringTranslation('cs', 'test', 'irrelevant')); + $this->assertEquals('falešný', $this->translation->getStringTranslation('cs', 'fake', 'irrelevant')); + $this->assertEquals('chybějící pl', $this->translation->getStringTranslation('cs', 'missing pl', 'irrelevant')); + $this->assertEquals('missing cs', $this->translation->getStringTranslation('cs', 'missing cs', 'irrelevant')); + $this->assertEquals('missing both', $this->translation->getStringTranslation('cs', 'missing both', 'irrelevant')); + + // Testing PL with fallback to cs, en. + $this->assertEquals('test po polsku', $this->translation->getStringTranslation('pl', 'test', 'irrelevant')); + $this->assertEquals('ściema', $this->translation->getStringTranslation('pl', 'fake', 'irrelevant')); + $this->assertEquals('chybějící pl', $this->translation->getStringTranslation('pl', 'missing pl', 'irrelevant')); + $this->assertEquals('zaginiony czech', $this->translation->getStringTranslation('pl', 'missing cs', 'irrelevant')); + $this->assertEquals('missing both', $this->translation->getStringTranslation('pl', 'missing both', 'irrelevant')); } }