Skip to content

Commit aed0063

Browse files
authored
Patch bugfix (#14)
* Added smoke tests to make sure our extractors and visitors does not behave in a weird way * Added tests for issue 13 * Added more test resources * Bugfix * code style * Bugfixes * Code style
1 parent f143c19 commit aed0063

File tree

7 files changed

+127
-11
lines changed

7 files changed

+127
-11
lines changed

src/Visitor/Php/Symfony/FormTypeLabelImplicit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public function enterNode(Node $node)
3838
if (count($node->args) >= 3) {
3939
if ($node->args[2]->value instanceof Node\Expr\Array_) {
4040
foreach ($node->args[2]->value->items as $item) {
41-
if ($item->key->value === 'label') {
41+
if (isset($item->key) && $item->key->value === 'label') {
4242
$customLabel = true;
4343
}
4444
}

tests/Functional/Visitor/Twig/BaseTwigVisitorTest.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
use Translation\Extractor\FileExtractor\TwigFileExtractor;
1515
use Symfony\Component\Finder\Finder;
1616
use Translation\Extractor\Model\SourceCollection;
17-
use Symfony\Component\Translation\MessageSelector;
18-
use Symfony\Component\Translation\IdentityTranslator;
19-
use Symfony\Bridge\Twig\Extension\TranslationExtension;
2017

2118
abstract class BaseTwigVisitorTest extends \PHPUnit_Framework_TestCase
2219
{
@@ -43,10 +40,6 @@ protected function getSourceLocations($visitor, $relativePath)
4340
*/
4441
private function getExtractor()
4542
{
46-
$env = new \Twig_Environment();
47-
$env->addExtension(new TranslationExtension($translator = new IdentityTranslator(new MessageSelector())));
48-
$env->setLoader(new \Twig_Loader_String());
49-
50-
return new TwigFileExtractor($env);
43+
return new TwigFileExtractor(TwigEnvironmentFactory::create());
5144
}
5245
}

tests/Functional/Visitor/Twig/TranslationBlockTest.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,18 @@ public function testTrans()
1919
{
2020
$collection = $this->getSourceLocations(new TranslationBlock(), 'Twig/TranslationBlock/trans.html.twig');
2121

22-
$this->assertCount(1, $collection);
23-
$source = $collection->first();
22+
$this->assertCount(3, $collection);
23+
$source = $collection->get(0);
2424
$this->assertEquals('foobar', $source->getMessage());
2525
$this->assertEquals('domain', $source->getContext()['domain']);
26+
27+
$source = $collection->get(1);
28+
$this->assertEquals('no-domain', $source->getMessage());
29+
$this->assertEquals('messages', $source->getContext()['domain']);
30+
31+
$source = $collection->get(2);
32+
$this->assertEquals('trans-count', $source->getMessage());
33+
$this->assertEquals('messages', $source->getContext()['domain']);
2634
}
2735

2836
public function testTranschoice()
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the PHP Translation package.
5+
*
6+
* (c) PHP Translation team <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Translation\Extractor\Tests\Functional\Visitor\Twig;
13+
14+
use Symfony\Component\Translation\MessageSelector;
15+
use Symfony\Component\Translation\IdentityTranslator;
16+
use Symfony\Bridge\Twig\Extension\TranslationExtension;
17+
18+
class TwigEnvironmentFactory
19+
{
20+
public static function create()
21+
{
22+
$env = new \Twig_Environment();
23+
$env->addExtension(new TranslationExtension($translator = new IdentityTranslator(new MessageSelector())));
24+
$env->setLoader(new \Twig_Loader_String());
25+
26+
return $env;
27+
}
28+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
class Foo
4+
{
5+
public function bar()
6+
{
7+
8+
}
9+
}
10+
11+
(new Foo())->bar();
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
<html>
22
<title>{% trans from "domain" %}foobar{% endtrans %}</title>
3+
<title>{% trans %}no-domain{% endtrans %}</title>
4+
<title>{% trans with {"%count%":5}%}trans-count{% endtrans %}</title>
35
</html>

tests/Smoke/AllExtractorsTest.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the PHP Translation package.
5+
*
6+
* (c) PHP Translation team <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Translation\Extractor\Tests\Smoke;
13+
14+
use Symfony\Component\Finder\Finder;
15+
use Translation\Extractor\Extractor;
16+
use Translation\Extractor\FileExtractor\PHPFileExtractor;
17+
use Translation\Extractor\FileExtractor\TwigFileExtractor;
18+
use Translation\Extractor\Tests\Functional\Visitor\Twig\TwigEnvironmentFactory;
19+
use Translation\Extractor\Visitor\Php\Symfony\ContainerAwareTrans;
20+
use Translation\Extractor\Visitor\Php\Symfony\ContainerAwareTransChoice;
21+
use Translation\Extractor\Visitor\Php\Symfony\FlashMessage;
22+
use Translation\Extractor\Visitor\Php\Symfony\FormTypeChoices;
23+
use Translation\Extractor\Visitor\Php\Symfony\FormTypeLabelExplicit;
24+
use Translation\Extractor\Visitor\Php\Symfony\FormTypeLabelImplicit;
25+
use Translation\Extractor\Visitor\Twig\TranslationBlock;
26+
use Translation\Extractor\Visitor\Twig\TranslationFilter;
27+
28+
/**
29+
* Smoke test to make sure no extractor throws exceptions.
30+
*
31+
* @author Tobias Nyholm <[email protected]>
32+
*/
33+
class AllExtractorsTest extends \PHPUnit_Framework_TestCase
34+
{
35+
public function testNoException()
36+
{
37+
$extractor = new Extractor();
38+
$extractor->addFileExtractor($this->getPHPFileExtractor());
39+
$extractor->addFileExtractor($this->getTwigFileExtractor());
40+
41+
$finder = new Finder();
42+
$finder->in(dirname(__DIR__));
43+
44+
$extractor->extract($finder);
45+
}
46+
47+
/**
48+
* @return PHPFileExtractor
49+
*/
50+
private function getPHPFileExtractor()
51+
{
52+
$file = new PHPFileExtractor();
53+
$file->addVisitor(new ContainerAwareTrans());
54+
$file->addVisitor(new ContainerAwareTransChoice());
55+
$file->addVisitor(new FlashMessage());
56+
$file->addVisitor(new FormTypeChoices());
57+
$file->addVisitor(new FormTypeLabelExplicit());
58+
$file->addVisitor(new FormTypeLabelImplicit());
59+
60+
return $file;
61+
}
62+
63+
/**
64+
* @return TwigFileExtractor
65+
*/
66+
private function getTwigFileExtractor()
67+
{
68+
$file = new TwigFileExtractor(TwigEnvironmentFactory::create());
69+
$file->addVisitor(new TranslationBlock());
70+
$file->addVisitor(new TranslationFilter());
71+
72+
return $file;
73+
}
74+
}

0 commit comments

Comments
 (0)