4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Translation\Tests\DataCollector;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Translation\DataCollectorTranslator;
16 use Symfony\Component\Translation\DataCollector\TranslationDataCollector;
17 use Symfony\Component\VarDumper\Cloner\VarCloner;
19 class TranslationDataCollectorTest extends TestCase
21 protected function setUp()
23 if (!class_exists('Symfony\Component\HttpKernel\DataCollector\DataCollector')) {
24 $this->markTestSkipped('The "DataCollector" is not available');
28 public function testCollectEmptyMessages()
30 $translator = $this->getTranslator();
31 $translator->expects($this->any())->method('getCollectedMessages')->will($this->returnValue(array()));
33 $dataCollector = new TranslationDataCollector($translator);
34 $dataCollector->lateCollect();
36 $this->assertEquals(0, $dataCollector->getCountMissings());
37 $this->assertEquals(0, $dataCollector->getCountFallbacks());
38 $this->assertEquals(0, $dataCollector->getCountDefines());
39 $this->assertEquals(array(), $dataCollector->getMessages());
42 public function testCollect()
44 $cloner = new VarCloner();
46 $collectedMessages = array(
49 'translation' => 'foo (en)',
51 'domain' => 'messages',
52 'state' => DataCollectorTranslator::MESSAGE_DEFINED,
53 'parameters' => array(),
54 'transChoiceNumber' => null,
58 'translation' => 'bar (fr)',
60 'domain' => 'messages',
61 'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
62 'parameters' => array(),
63 'transChoiceNumber' => null,
67 'translation' => 'choice',
69 'domain' => 'messages',
70 'state' => DataCollectorTranslator::MESSAGE_MISSING,
71 'parameters' => array('%count%' => 3),
72 'transChoiceNumber' => 3,
76 'translation' => 'choice',
78 'domain' => 'messages',
79 'state' => DataCollectorTranslator::MESSAGE_MISSING,
80 'parameters' => array('%count%' => 3),
81 'transChoiceNumber' => 3,
85 'translation' => 'choice',
87 'domain' => 'messages',
88 'state' => DataCollectorTranslator::MESSAGE_MISSING,
89 'parameters' => array('%count%' => 4, '%foo%' => 'bar'),
90 'transChoiceNumber' => 4,
93 $expectedMessages = array(
96 'translation' => 'foo (en)',
98 'domain' => 'messages',
99 'state' => DataCollectorTranslator::MESSAGE_DEFINED,
101 'parameters' => array(),
102 'transChoiceNumber' => null,
106 'translation' => 'bar (fr)',
108 'domain' => 'messages',
109 'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
111 'parameters' => array(),
112 'transChoiceNumber' => null,
116 'translation' => 'choice',
118 'domain' => 'messages',
119 'state' => DataCollectorTranslator::MESSAGE_MISSING,
121 'parameters' => array(
122 $cloner->cloneVar(array('%count%' => 3)),
123 $cloner->cloneVar(array('%count%' => 3)),
124 $cloner->cloneVar(array('%count%' => 4, '%foo%' => 'bar')),
126 'transChoiceNumber' => 3,
130 $translator = $this->getTranslator();
131 $translator->expects($this->any())->method('getCollectedMessages')->will($this->returnValue($collectedMessages));
133 $dataCollector = new TranslationDataCollector($translator);
134 $dataCollector->lateCollect();
136 $this->assertEquals(1, $dataCollector->getCountMissings());
137 $this->assertEquals(1, $dataCollector->getCountFallbacks());
138 $this->assertEquals(1, $dataCollector->getCountDefines());
139 $this->assertEquals($expectedMessages, array_values($dataCollector->getMessages()));
142 private function getTranslator()
145 ->getMockBuilder('Symfony\Component\Translation\DataCollectorTranslator')
146 ->disableOriginalConstructor()