Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 65361ff

Browse files
committed
[TranslatorBag] add/fixed legacy tests.
1 parent ce602ce commit 65361ff

13 files changed

+794
-445
lines changed

src/Symfony/Bridge/Twig/Tests/Extension/TranslationExtensionTest.php

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use Symfony\Bridge\Twig\Extension\TranslationExtension;
1515
use Symfony\Component\Translation\Translator;
16-
use Symfony\Component\Translation\MessageSelector;
16+
use Symfony\Component\Translation\TranslatorBag;
1717
use Symfony\Component\Translation\Loader\ArrayLoader;
1818

1919
class TranslationExtensionTest extends \PHPUnit_Framework_TestCase
@@ -34,7 +34,7 @@ public function testTrans($template, $expected, array $variables = array())
3434
print $template."\n";
3535
$loader = new \Twig_Loader_Array(array('index' => $template));
3636
$twig = new \Twig_Environment($loader, array('debug' => true, 'cache' => false));
37-
$twig->addExtension(new TranslationExtension(new Translator('en', new MessageSelector())));
37+
$twig->addExtension(new TranslationExtension($this->getTranslator('en')));
3838

3939
echo $twig->compile($twig->parse($twig->tokenize($twig->getLoader()->getSource('index'), 'index')))."\n\n";
4040
$this->assertEquals($expected, $this->getTemplate($template)->render($variables));
@@ -136,12 +136,13 @@ public function testDefaultTranslationDomain()
136136
',
137137
);
138138

139-
$translator = new Translator('en', new MessageSelector());
140-
$translator->addLoader('array', new ArrayLoader());
141-
$translator->addResource('array', array('foo' => 'foo (messages)'), 'en');
142-
$translator->addResource('array', array('foo' => 'foo (custom)'), 'en', 'custom');
143-
$translator->addResource('array', array('foo' => 'foo (foo)'), 'en', 'foo');
144-
139+
$loaders = array('array' => new ArrayLoader());
140+
$resources = array(
141+
array('array', array('foo' => 'foo (messages)'), 'en'),
142+
array('array', array('foo' => 'foo (custom)'), 'en', 'custom'),
143+
array('array', array('foo' => 'foo (foo)'), 'en', 'foo'),
144+
);
145+
$translator = $this->getTranslator('en', $loaders, $resources);
145146
$template = $this->getTemplate($templates, $translator);
146147

147148
$this->assertEquals('foo (foo)foo (custom)foo (foo)foo (custom)foo (foo)foo (custom)', trim($template->render(array())));
@@ -169,13 +170,15 @@ public function testDefaultTranslationDomainWithNamedArguments()
169170
',
170171
);
171172

172-
$translator = new Translator('en', new MessageSelector());
173-
$translator->addLoader('array', new ArrayLoader());
174-
$translator->addResource('array', array('foo' => 'foo (messages)'), 'en');
175-
$translator->addResource('array', array('foo' => 'foo (custom)'), 'en', 'custom');
176-
$translator->addResource('array', array('foo' => 'foo (foo)'), 'en', 'foo');
177-
$translator->addResource('array', array('foo' => 'foo (fr)'), 'fr', 'custom');
173+
$loaders = array('array' => new ArrayLoader());
174+
$resources = array(
175+
array('array', array('foo' => 'foo (messages)'), 'en'),
176+
array('array', array('foo' => 'foo (custom)'), 'en', 'custom'),
177+
array('array', array('foo' => 'foo (foo)'), 'en', 'foo'),
178+
array('array', array('foo' => 'foo (fr)'), 'fr', 'custom'),
179+
);
178180

181+
$translator = $this->getTranslator('en', $loaders, $resources);
179182
$template = $this->getTemplate($templates, $translator);
180183

181184
$this->assertEquals('foo (custom)foo (foo)foo (custom)foo (custom)foo (fr)foo (custom)foo (fr)', trim($template->render(array())));
@@ -184,7 +187,7 @@ public function testDefaultTranslationDomainWithNamedArguments()
184187
protected function getTemplate($template, $translator = null)
185188
{
186189
if (null === $translator) {
187-
$translator = new Translator('en', new MessageSelector());
190+
$translator = $this->getTranslator('en');
188191
}
189192

190193
if (is_array($template)) {
@@ -197,4 +200,9 @@ protected function getTemplate($template, $translator = null)
197200

198201
return $twig->loadTemplate('index');
199202
}
203+
204+
private function getTranslator($locale, $loaders = array(), $resources = array())
205+
{
206+
return new Translator($locale, null, null, false, new TranslatorBag($loaders, $resources));
207+
}
200208
}

src/Symfony/Bundle/FrameworkBundle/Tests/Translation/TranslatorTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
use Symfony\Component\Filesystem\Filesystem;
1717
use Symfony\Component\Translation\MessageSelector;
1818

19+
/**
20+
* @group legacy
21+
*/
1922
class TranslatorTest extends \PHPUnit_Framework_TestCase
2023
{
2124
protected $tmpDir;

src/Symfony/Component/Translation/CacheTranslatorBag.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
*/
2323
class CacheTranslatorBag implements TranslatorBagInterface
2424
{
25+
/**
26+
* @var MessageCatalogueInterface[]
27+
*/
28+
private $catalogues = array();
29+
2530
/**
2631
* @var TranslatorBagInterface
2732
*/
@@ -61,6 +66,10 @@ public function __construct($cacheDir, $debug = false, TranslatorBagInterface $t
6166
*/
6267
public function getCatalogue($locale)
6368
{
69+
if (isset($this->catalogues[$locale]) && file_exists($this->getCatalogueCachePath($locale))) {
70+
return $this->catalogues[$locale];
71+
}
72+
6473
$self = $this; // required for PHP 5.3 where "$this" cannot be use()d in anonymous functions. Change in Symfony 3.0.
6574
$cache = $this->configCacheFactory->cache($this->getCatalogueCachePath($locale),
6675
function (ConfigCacheInterface $cache) use ($self, $locale) {
@@ -69,7 +78,7 @@ function (ConfigCacheInterface $cache) use ($self, $locale) {
6978
);
7079

7180
/* Read catalogue from cache. */
72-
return include $cache->getPath();
81+
return $this->catalogues[$locale] = include $cache->getPath();
7382
}
7483

7584
/**

src/Symfony/Component/Translation/ContainerAwareTranslatorBag.php

Lines changed: 0 additions & 66 deletions
This file was deleted.

src/Symfony/Component/Translation/FallbackTranslatorBag.php

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
*/
1919
class FallbackTranslatorBag implements TranslatorBagInterface, TranslatorBagIdentifiable
2020
{
21+
/**
22+
* @var MessageCatalogueInterface[]
23+
*/
24+
private $catalogues = array();
25+
2126
/**
2227
* @var TranslatorBagInterface
2328
*/
@@ -26,15 +31,15 @@ class FallbackTranslatorBag implements TranslatorBagInterface, TranslatorBagIden
2631
/**
2732
* @var array
2833
*/
29-
private $fallbackLocales;
34+
private $locales;
3035

3136
/**
32-
* @param array $fallbackLocales The fallback locales.
33-
* @param TranslatorBagInterface $translatorBag The translator bag to use for loading the catalogue.
37+
* @param array $locales The fallback locales.
38+
* @param TranslatorBagInterface $translatorBag The translator bag to use for loading the catalogue.
3439
*/
35-
public function __construct($fallbackLocales = array(), TranslatorBagInterface $translatorBag = null)
40+
public function __construct($locales = array(), TranslatorBagInterface $translatorBag = null)
3641
{
37-
$this->fallbackLocales = $fallbackLocales;
42+
$this->setFallbackLocales($locales);
3843
$this->translatorBag = $translatorBag ?: new TranslatorBag();
3944
}
4045

@@ -43,10 +48,14 @@ public function __construct($fallbackLocales = array(), TranslatorBagInterface $
4348
*/
4449
public function getCatalogue($locale)
4550
{
51+
if (isset($this->catalogues[$locale])) {
52+
return $this->catalogues[$locale];
53+
}
54+
4655
$catalogue = $this->translatorBag->getCatalogue($locale);
47-
$this->loadFallbackCatalogues($catalogue, $locale);
56+
$this->loadFallbackCatalogues($catalogue);
4857

49-
return $catalogue;
58+
return $this->catalogues[$locale] = $catalogue;
5059
}
5160

5261
/**
@@ -56,7 +65,14 @@ public function getCatalogue($locale)
5665
*/
5766
public function setFallbackLocales(array $locales)
5867
{
68+
foreach ($locales as $locale) {
69+
Translator::assertLocale($locale);
70+
}
71+
5972
$this->fallbackLocales = $locales;
73+
foreach ($this->catalogues as $catalogue) {
74+
$this->loadFallbackCatalogues($catalogue);
75+
}
6076
}
6177

6278
/**
@@ -82,10 +98,10 @@ public function getIdentifier()
8298
return sha1($id);
8399
}
84100

85-
private function loadFallbackCatalogues($catalogue, $locale)
101+
private function loadFallbackCatalogues($catalogue)
86102
{
87103
$current = $catalogue;
88-
foreach ($this->computeFallbackLocales($locale) as $fallback) {
104+
foreach ($this->computeFallbackLocales($catalogue->getLocale()) as $fallback) {
89105
$catalogue = $this->translatorBag->getCatalogue($fallback);
90106

91107
$current->addFallbackCatalogue($catalogue);

src/Symfony/Component/Translation/Tests/DataCollectorTranslatorTest.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Symfony\Component\Translation\Translator;
1515
use Symfony\Component\Translation\DataCollectorTranslator;
1616
use Symfony\Component\Translation\Loader\ArrayLoader;
17+
use Symfony\Component\Translation\TranslatorBag;
18+
use Symfony\Component\Translation\FallbackTranslatorBag;
1719

1820
class DataCollectorTranslatorTest extends \PHPUnit_Framework_TestCase
1921
{
@@ -26,8 +28,6 @@ protected function setUp()
2628
public function testCollectMessages()
2729
{
2830
$collector = $this->createCollector();
29-
$collector->setFallbackLocales(array('fr', 'ru'));
30-
3131
$collector->trans('foo');
3232
$collector->trans('bar');
3333
$collector->transChoice('choice', 0);
@@ -68,14 +68,24 @@ public function testCollectMessages()
6868

6969
private function createCollector()
7070
{
71-
$translator = new Translator('en');
72-
$translator->addLoader('array', new ArrayLoader());
73-
$translator->addResource('array', array('foo' => 'foo (en)'), 'en');
74-
$translator->addResource('array', array('bar' => 'bar (fr)'), 'fr');
75-
$translator->addResource('array', array('bar_ru' => 'bar (ru)'), 'ru');
71+
$loaders = array('array' => new ArrayLoader());
72+
$resources = array(
73+
array('array', array('foo' => 'foo (en)'), 'en'),
74+
array('array', array('bar' => 'bar (fr)'), 'fr'),
75+
array('array', array('bar_ru' => 'bar (ru)'), 'ru'),
76+
);
77+
$translator = $this->getTranslator('en', $loaders, $resources, array('fr', 'ru'));
7678

7779
$collector = new DataCollectorTranslator($translator);
7880

7981
return $collector;
8082
}
83+
84+
private function getTranslator($locale, $loaders = array(), $resources = array(), $fallbackLocales = array())
85+
{
86+
$defaultTranslatorBag = new TranslatorBag($loaders, $resources);
87+
$translatorBag = new FallbackTranslatorBag($fallbackLocales, $defaultTranslatorBag);
88+
89+
return new Translator($locale, null, null, false, $translatorBag);
90+
}
8191
}

0 commit comments

Comments
 (0)