* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bridge\Twig\Tests\Extension; use Symfony\Bridge\Twig\Extension\FormExtension; use Symfony\Bridge\Twig\Form\TwigRenderer; use Symfony\Bridge\Twig\Form\TwigRendererEngine; use Symfony\Bridge\Twig\Extension\TranslationExtension; use Symfony\Bridge\Twig\Tests\Extension\Fixtures\StubTranslator; use Symfony\Bridge\Twig\Tests\Extension\Fixtures\StubFilesystemLoader; use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\FormView; use Symfony\Component\Form\Tests\AbstractDivLayoutTest; use Twig\Environment; class FormExtensionDivLayoutTest extends AbstractDivLayoutTest { use RuntimeLoaderProvider; private $renderer; protected function setUp() { parent::setUp(); $loader = new StubFilesystemLoader(array( __DIR__.'/../../Resources/views/Form', __DIR__.'/Fixtures/templates/form', )); $environment = new Environment($loader, array('strict_variables' => true)); $environment->addExtension(new TranslationExtension(new StubTranslator())); $environment->addGlobal('global', ''); // the value can be any template that exists $environment->addGlobal('dynamic_template_name', 'child_label'); $environment->addExtension(new FormExtension()); $rendererEngine = new TwigRendererEngine(array( 'form_div_layout.html.twig', 'custom_widgets.html.twig', ), $environment); $this->renderer = new TwigRenderer($rendererEngine, $this->getMockBuilder('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface')->getMock()); $this->registerTwigRuntimeLoader($environment, $this->renderer); } public function testThemeBlockInheritanceUsingUse() { $view = $this->factory ->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\EmailType') ->createView() ; $this->setTheme($view, array('theme_use.html.twig')); $this->assertMatchesXpath( $this->renderWidget($view), '/input[@type="email"][@rel="theme"]' ); } public function testThemeBlockInheritanceUsingExtend() { $view = $this->factory ->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\EmailType') ->createView() ; $this->setTheme($view, array('theme_extends.html.twig')); $this->assertMatchesXpath( $this->renderWidget($view), '/input[@type="email"][@rel="theme"]' ); } public function testThemeBlockInheritanceUsingDynamicExtend() { $view = $this->factory ->createNamed('name', 'Symfony\Component\Form\Extension\Core\Type\EmailType') ->createView() ; $this->renderer->setTheme($view, array('page_dynamic_extends.html.twig')); $this->assertMatchesXpath( $this->renderer->searchAndRenderBlock($view, 'row'), '/div/label[text()="child"]' ); } public function isSelectedChoiceProvider() { return array( array(true, '0', '0'), array(true, '1', '1'), array(true, '', ''), array(true, '1.23', '1.23'), array(true, 'foo', 'foo'), array(true, 'foo10', 'foo10'), array(true, 'foo', array(1, 'foo', 'foo10')), array(false, 10, array(1, 'foo', 'foo10')), array(false, 0, array(1, 'foo', 'foo10')), ); } /** * @dataProvider isSelectedChoiceProvider */ public function testIsChoiceSelected($expected, $choice, $value) { $choice = new ChoiceView($choice, $choice, $choice.' label'); $this->assertSame($expected, \Symfony\Bridge\Twig\Extension\twig_is_selected_choice($choice, $value)); } public function testStartTagHasNoActionAttributeWhenActionIsEmpty() { $form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\FormType', null, array( 'method' => 'get', 'action' => '', )); $html = $this->renderStart($form->createView()); $this->assertSame('