2011-03-19 14:17:31 +00:00
|
|
|
<?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.
|
|
|
|
*/
|
|
|
|
|
2011-03-19 16:47:18 +00:00
|
|
|
namespace Symfony\Tests\Component\Form\Renderer\Theme;
|
2011-03-19 14:17:31 +00:00
|
|
|
|
2011-03-19 18:01:57 +00:00
|
|
|
use Symfony\Component\Form\Type\AbstractType;
|
2011-03-20 12:35:19 +00:00
|
|
|
use Symfony\Component\Form\FormBuilder;
|
2011-03-19 14:17:31 +00:00
|
|
|
use Symfony\Component\Form\CsrfProvider\DefaultCsrfProvider;
|
|
|
|
use Symfony\Component\Form\Type\Loader\DefaultTypeLoader;
|
|
|
|
use Symfony\Component\Form\FormFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test theme template files shipped with framework bundle.
|
|
|
|
*/
|
2011-03-19 16:47:18 +00:00
|
|
|
abstract class AbstractThemeFunctionalTest extends \PHPUnit_Framework_TestCase
|
2011-03-19 14:17:31 +00:00
|
|
|
{
|
|
|
|
/** @var FormFactory */
|
|
|
|
private $factory;
|
|
|
|
|
2011-03-19 16:47:18 +00:00
|
|
|
abstract protected function createTheme();
|
|
|
|
|
2011-03-19 14:17:31 +00:00
|
|
|
public function setUp()
|
|
|
|
{
|
2011-03-19 16:47:18 +00:00
|
|
|
$theme = $this->createTheme();
|
2011-03-19 14:17:31 +00:00
|
|
|
$csrfProvider = new DefaultCsrfProvider('foo');
|
|
|
|
$validator = $this->getMock('Symfony\Component\Validator\ValidatorInterface');
|
|
|
|
$storage = new \Symfony\Component\HttpFoundation\File\TemporaryStorage('foo', 1, \sys_get_temp_dir());
|
|
|
|
|
|
|
|
// ok more than 2 lines, see DefaultFormFactory.php for proposed simplication
|
|
|
|
$typeLoader = new DefaultTypeLoader();
|
|
|
|
$this->factory = new FormFactory($typeLoader);
|
2011-03-19 16:47:18 +00:00
|
|
|
$typeLoader->initialize($this->factory, $theme, $csrfProvider, $validator , $storage);
|
2011-03-19 14:17:31 +00:00
|
|
|
// this is the relevant bit about your own forms:
|
|
|
|
$typeLoader->addType(new MyTestFormConfig());
|
|
|
|
$typeLoader->addType(new MyTestSubFormConfig());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testFullFormRendering()
|
|
|
|
{
|
2011-03-19 18:01:57 +00:00
|
|
|
\Locale::setDefault('en');
|
|
|
|
|
2011-03-19 14:17:31 +00:00
|
|
|
$form = $this->factory->create('my.form');
|
|
|
|
$html = $form->getRenderer()->getWidget();
|
|
|
|
|
2011-03-19 16:47:18 +00:00
|
|
|
libxml_use_internal_errors(true);
|
2011-03-19 14:17:31 +00:00
|
|
|
$dom = new \DomDocument('UTF-8');
|
2011-03-19 16:47:18 +00:00
|
|
|
$dom->loadHtml($html);
|
2011-03-19 14:17:31 +00:00
|
|
|
|
|
|
|
$xpath = new \DomXpath($dom);
|
|
|
|
$ids = array();
|
|
|
|
foreach ($xpath->evaluate('//*[@id]') as $node) {
|
|
|
|
$ids[] = $node->tagName . "#" . $node->getAttribute('id');
|
|
|
|
}
|
2011-03-19 16:47:18 +00:00
|
|
|
libxml_use_internal_errors(false);
|
2011-03-19 14:17:31 +00:00
|
|
|
$this->assertEquals(array (
|
|
|
|
'input#my.form_field0_subfield0',
|
|
|
|
'input#my.form_field1',
|
|
|
|
'select#my.form_field2_month',
|
|
|
|
'select#my.form_field2_day',
|
|
|
|
'select#my.form_field2_year',
|
|
|
|
'select#my.form_field5_hour',
|
|
|
|
'select#my.form_field5_minute',
|
|
|
|
'input#my.form_field3_active',
|
|
|
|
'input#my.form_field3_inactive',
|
|
|
|
'select#my.form_field21',
|
|
|
|
'select#my.form_field22',
|
|
|
|
'select#my.form_field4_date_month',
|
|
|
|
'select#my.form_field4_date_day',
|
|
|
|
'select#my.form_field4_date_year',
|
|
|
|
'select#my.form_field4_time_hour',
|
|
|
|
'select#my.form_field4_time_minute',
|
|
|
|
'select#my.form_field6_month',
|
|
|
|
'select#my.form_field6_day',
|
|
|
|
'select#my.form_field6_year',
|
|
|
|
'input#my.form_field7',
|
|
|
|
'input#my.form_field8_file',
|
|
|
|
'input#my.form_field8_token',
|
|
|
|
'input#my.form_field8_name',
|
2011-03-19 16:47:18 +00:00
|
|
|
'input#my.form_field10',
|
2011-03-19 14:17:31 +00:00
|
|
|
'select#my.form_field11',
|
|
|
|
'select#my.form_field12',
|
|
|
|
'input#my.form_field13',
|
|
|
|
'input#my.form_field14',
|
|
|
|
'input#my.form_field15',
|
|
|
|
'input#my.form_field16',
|
|
|
|
'input#my.form_field17',
|
|
|
|
'input#my.form_field18_first',
|
|
|
|
'input#my.form_field18_second',
|
|
|
|
'select#my.form_field19',
|
|
|
|
'input#my.form_field20',
|
|
|
|
), $ids);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-19 18:01:57 +00:00
|
|
|
class MyTestFormConfig extends AbstractType
|
2011-03-19 14:17:31 +00:00
|
|
|
{
|
2011-03-20 12:35:19 +00:00
|
|
|
public function configure(FormBuilder $builder, array $options)
|
2011-03-19 14:17:31 +00:00
|
|
|
{
|
|
|
|
$builder->setDataClass('Symfony\Bundle\FrameworkBundle\Tests\Form\MyTestObject');
|
2011-03-19 18:20:55 +00:00
|
|
|
$builder->add('field0', 'my.sub_form');
|
|
|
|
$builder->add('field1', 'text', array('max_length' => 127, 'id' => 'foo'));
|
|
|
|
$builder->add('field2', 'date');
|
|
|
|
$builder->add('field5', 'time');
|
|
|
|
$builder->add('field3', 'choice', array(
|
2011-03-19 14:17:31 +00:00
|
|
|
'expanded' => true,
|
|
|
|
'multiple' => false,
|
|
|
|
'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
|
|
|
|
));
|
2011-03-19 18:20:55 +00:00
|
|
|
$builder->add('field21', 'choice', array(
|
2011-03-19 14:17:31 +00:00
|
|
|
'expanded' => false,
|
|
|
|
'multiple' => false,
|
|
|
|
'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
|
|
|
|
));
|
2011-03-19 18:20:55 +00:00
|
|
|
$builder->add('field22', 'choice', array(
|
2011-03-19 14:17:31 +00:00
|
|
|
'expanded' => false,
|
|
|
|
'multiple' => false,
|
|
|
|
'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
|
|
|
|
'preferred_choices' => array('active')
|
|
|
|
));
|
2011-03-19 18:20:55 +00:00
|
|
|
$builder->add('field4', 'datetime');
|
|
|
|
$builder->add('field6', 'birthday');
|
|
|
|
$builder->add('field7', 'checkbox');
|
|
|
|
$builder->add('field8', 'file');
|
|
|
|
$builder->add('field9', 'hidden');
|
|
|
|
$builder->add('field10', 'integer');
|
|
|
|
$builder->add('field11', 'language');
|
|
|
|
$builder->add('field12', 'locale');
|
|
|
|
$builder->add('field13', 'money');
|
|
|
|
$builder->add('field14', 'number');
|
|
|
|
$builder->add('field15', 'password');
|
|
|
|
$builder->add('field16', 'percent');
|
|
|
|
$builder->add('field17', 'radio');
|
|
|
|
$builder->add('field18', 'repeated', array('identifier' => 'password'));
|
|
|
|
$builder->add('emails', 'collection', array(
|
|
|
|
'type' => 'text',
|
2011-03-19 14:17:31 +00:00
|
|
|
));
|
2011-03-19 18:20:55 +00:00
|
|
|
$builder->add('field19', 'timezone');
|
|
|
|
$builder->add('field20', 'url');
|
2011-03-19 14:17:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function getName()
|
|
|
|
{
|
|
|
|
return 'my.form';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getParent(array $options) {
|
|
|
|
return 'form';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class MyTestObject
|
|
|
|
{
|
|
|
|
private $emails = 'test,foo,bar';
|
|
|
|
}
|
|
|
|
|
2011-03-19 18:01:57 +00:00
|
|
|
class MyTestSubFormConfig extends AbstractType
|
2011-03-19 14:17:31 +00:00
|
|
|
{
|
2011-03-20 12:35:19 +00:00
|
|
|
public function configure(FormBuilder $builder, array $options)
|
2011-03-19 14:17:31 +00:00
|
|
|
{
|
2011-03-19 18:20:55 +00:00
|
|
|
$builder->add('subfield0', 'text');
|
2011-03-19 14:17:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function getName()
|
|
|
|
{
|
|
|
|
return 'my.sub_form';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getParent(array $options) {
|
|
|
|
return 'form';
|
|
|
|
}
|
|
|
|
}
|