de50621e8a
As Composer is now widely used in the PHP world, having to run composer install before running the test suite is expected. This also has the nice benefit of removing a bunch of code, making things easier to maintain (there is only one place to declare a dev dependency), and probably more.
194 lines
5.8 KiB
PHP
194 lines
5.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* 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\FormView;
|
|
use Symfony\Component\Form\Extension\Core\View\ChoiceView;
|
|
use Symfony\Component\Form\Tests\AbstractDivLayoutTest;
|
|
|
|
class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
|
{
|
|
/**
|
|
* @var FormExtension
|
|
*/
|
|
protected $extension;
|
|
|
|
protected function setUp()
|
|
{
|
|
parent::setUp();
|
|
|
|
$rendererEngine = new TwigRendererEngine(array(
|
|
'form_div_layout.html.twig',
|
|
'custom_widgets.html.twig',
|
|
));
|
|
$renderer = new TwigRenderer($rendererEngine, $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface'));
|
|
|
|
$this->extension = new FormExtension($renderer);
|
|
|
|
$loader = new StubFilesystemLoader(array(
|
|
__DIR__.'/../../Resources/views/Form',
|
|
__DIR__,
|
|
));
|
|
|
|
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
|
|
$environment->addExtension(new TranslationExtension(new StubTranslator()));
|
|
$environment->addGlobal('global', '');
|
|
$environment->addExtension($this->extension);
|
|
|
|
$this->extension->initRuntime($environment);
|
|
}
|
|
|
|
protected function tearDown()
|
|
{
|
|
parent::tearDown();
|
|
|
|
$this->extension = null;
|
|
}
|
|
|
|
public function testThemeBlockInheritanceUsingUse()
|
|
{
|
|
$view = $this->factory
|
|
->createNamed('name', 'email')
|
|
->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', 'email')
|
|
->createView()
|
|
;
|
|
|
|
$this->setTheme($view, array('theme_extends.html.twig'));
|
|
|
|
$this->assertMatchesXpath(
|
|
$this->renderWidget($view),
|
|
'/input[@type="email"][@rel="theme"]'
|
|
);
|
|
}
|
|
|
|
public function isSelectedChoiceProvider()
|
|
{
|
|
// The commented cases should not be necessary anymore, because the
|
|
// choice lists should assure that both values passed here are always
|
|
// strings
|
|
return array(
|
|
// array(true, 0, 0),
|
|
array(true, '0', '0'),
|
|
array(true, '1', '1'),
|
|
// array(true, false, 0),
|
|
// array(true, true, 1),
|
|
array(true, '', ''),
|
|
// array(true, null, ''),
|
|
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, $this->extension->isSelectedChoice($choice, $value));
|
|
}
|
|
|
|
protected function renderForm(FormView $view, array $vars = array())
|
|
{
|
|
return (string) $this->extension->renderer->renderBlock($view, 'form', $vars);
|
|
}
|
|
|
|
protected function renderEnctype(FormView $view)
|
|
{
|
|
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'enctype');
|
|
}
|
|
|
|
protected function renderLabel(FormView $view, $label = null, array $vars = array())
|
|
{
|
|
if ($label !== null) {
|
|
$vars += array('label' => $label);
|
|
}
|
|
|
|
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'label', $vars);
|
|
}
|
|
|
|
protected function renderErrors(FormView $view)
|
|
{
|
|
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'errors');
|
|
}
|
|
|
|
protected function renderWidget(FormView $view, array $vars = array())
|
|
{
|
|
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'widget', $vars);
|
|
}
|
|
|
|
protected function renderRow(FormView $view, array $vars = array())
|
|
{
|
|
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'row', $vars);
|
|
}
|
|
|
|
protected function renderRest(FormView $view, array $vars = array())
|
|
{
|
|
return (string) $this->extension->renderer->searchAndRenderBlock($view, 'rest', $vars);
|
|
}
|
|
|
|
protected function renderStart(FormView $view, array $vars = array())
|
|
{
|
|
return (string) $this->extension->renderer->renderBlock($view, 'form_start', $vars);
|
|
}
|
|
|
|
protected function renderEnd(FormView $view, array $vars = array())
|
|
{
|
|
return (string) $this->extension->renderer->renderBlock($view, 'form_end', $vars);
|
|
}
|
|
|
|
protected function setTheme(FormView $view, array $themes)
|
|
{
|
|
$this->extension->renderer->setTheme($view, $themes);
|
|
}
|
|
|
|
public static function themeBlockInheritanceProvider()
|
|
{
|
|
return array(
|
|
array(array('theme.html.twig'))
|
|
);
|
|
}
|
|
|
|
public static function themeInheritanceProvider()
|
|
{
|
|
return array(
|
|
array(array('parent_label.html.twig'), array('child_label.html.twig'))
|
|
);
|
|
}
|
|
}
|