AbstractThemeFunctionalTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Tests\Component\Form\Renderer\Theme;
  11. use Symfony\Component\Form\Type\AbstractType;
  12. use Symfony\Component\Form\FormBuilder;
  13. use Symfony\Component\Form\CsrfProvider\DefaultCsrfProvider;
  14. use Symfony\Component\Form\Type\Loader\DefaultTypeLoader;
  15. use Symfony\Component\Form\Type\Loader\ArrayTypeLoader;
  16. use Symfony\Component\Form\Type\Loader\TypeLoaderChain;
  17. use Symfony\Component\Form\FormFactory;
  18. /**
  19. * Test theme template files shipped with framework bundle.
  20. */
  21. abstract class AbstractThemeFunctionalTest extends \PHPUnit_Framework_TestCase
  22. {
  23. /** @var FormFactory */
  24. private $factory;
  25. public function setUp()
  26. {
  27. $csrfProvider = new DefaultCsrfProvider('foo');
  28. $validator = $this->getMock('Symfony\Component\Validator\ValidatorInterface');
  29. $rendererFactoryLoader = $this->getMock('Symfony\Component\Form\Renderer\Loader\RendererFactoryLoaderInterface');
  30. $storage = new \Symfony\Component\HttpFoundation\File\TemporaryStorage('foo', 1, \sys_get_temp_dir());
  31. // ok more than 2 lines, see DefaultFormFactory.php for proposed simplication
  32. $loaderChain = new TypeLoaderChain();
  33. $loaderChain->addLoader(new DefaultTypeLoader($validator, $csrfProvider , $storage));
  34. $loaderChain->addLoader(new ArrayTypeLoader(array(
  35. new MyTestFormConfig(),
  36. new MyTestSubFormConfig()
  37. )));
  38. $this->factory = new FormFactory($loaderChain, $rendererFactoryLoader);
  39. }
  40. public function testFullFormRendering()
  41. {
  42. $this->markTestSkipped('Fix me');
  43. \Locale::setDefault('en');
  44. $form = $this->factory->create('my.form');
  45. $html = $form->getRenderer()->getWidget();
  46. libxml_use_internal_errors(true);
  47. $dom = new \DomDocument('UTF-8');
  48. $dom->loadHtml($html);
  49. $xpath = new \DomXpath($dom);
  50. $ids = array();
  51. foreach ($xpath->evaluate('//*[@id]') as $node) {
  52. $ids[] = $node->tagName . "#" . $node->getAttribute('id');
  53. }
  54. libxml_use_internal_errors(false);
  55. $this->assertEquals(array (
  56. 'input#form_field0_subfield0',
  57. 'input#form_field1',
  58. 'select#form_field2_month',
  59. 'select#form_field2_day',
  60. 'select#form_field2_year',
  61. 'select#form_field5_hour',
  62. 'select#form_field5_minute',
  63. 'input#form_field3_active',
  64. 'input#form_field3_inactive',
  65. 'select#form_field21',
  66. 'select#form_field22',
  67. 'select#form_field4_date_month',
  68. 'select#form_field4_date_day',
  69. 'select#form_field4_date_year',
  70. 'select#form_field4_time_hour',
  71. 'select#form_field4_time_minute',
  72. 'select#form_field6_month',
  73. 'select#form_field6_day',
  74. 'select#form_field6_year',
  75. 'input#form_field7',
  76. 'input#form_field8_file',
  77. 'input#form_field8_token',
  78. 'input#form_field8_name',
  79. 'input#form_field10',
  80. 'select#form_field11',
  81. 'select#form_field12',
  82. 'input#form_field13',
  83. 'input#form_field14',
  84. 'input#form_field15',
  85. 'input#form_field16',
  86. 'input#form_field17',
  87. 'input#form_field18_first',
  88. 'input#form_field18_second',
  89. 'select#form_field19',
  90. 'input#form_field20',
  91. ), $ids);
  92. }
  93. }
  94. class MyTestFormConfig extends AbstractType
  95. {
  96. public function configure(FormBuilder $builder, array $options)
  97. {
  98. $builder->setDataClass('Symfony\Bundle\FrameworkBundle\Tests\Form\MyTestObject');
  99. $builder->add('field0', 'my.sub_form');
  100. $builder->add('field1', 'text', array('max_length' => 127));
  101. $builder->add('field2', 'date');
  102. $builder->add('field5', 'time');
  103. $builder->add('field3', 'choice', array(
  104. 'expanded' => true,
  105. 'multiple' => false,
  106. 'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
  107. ));
  108. $builder->add('field21', 'choice', array(
  109. 'expanded' => false,
  110. 'multiple' => false,
  111. 'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
  112. ));
  113. $builder->add('field22', 'choice', array(
  114. 'expanded' => false,
  115. 'multiple' => false,
  116. 'choices' => array('active' => 'Active', 'inactive' => 'Inactive'),
  117. 'preferred_choices' => array('active')
  118. ));
  119. $builder->add('field4', 'datetime');
  120. $builder->add('field6', 'birthday');
  121. $builder->add('field7', 'checkbox');
  122. $builder->add('field8', 'file');
  123. $builder->add('field9', 'hidden');
  124. $builder->add('field10', 'integer');
  125. $builder->add('field11', 'language');
  126. $builder->add('field12', 'locale');
  127. $builder->add('field13', 'money');
  128. $builder->add('field14', 'number');
  129. $builder->add('field15', 'password');
  130. $builder->add('field16', 'percent');
  131. $builder->add('field17', 'radio');
  132. $builder->add('field18', 'repeated', array('type' => 'password'));
  133. $builder->add('emails', 'collection', array(
  134. 'type' => 'text',
  135. ));
  136. $builder->add('field19', 'timezone');
  137. $builder->add('field20', 'url');
  138. }
  139. public function getName()
  140. {
  141. return 'my.form';
  142. }
  143. public function getParent(array $options) {
  144. return 'form';
  145. }
  146. }
  147. class MyTestObject
  148. {
  149. private $emails = 'test, foo, bar';
  150. }
  151. class MyTestSubFormConfig extends AbstractType
  152. {
  153. public function configure(FormBuilder $builder, array $options)
  154. {
  155. $builder->add('subfield0', 'text');
  156. }
  157. public function getName()
  158. {
  159. return 'my.sub_form';
  160. }
  161. public function getParent(array $options) {
  162. return 'form';
  163. }
  164. }