1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
<?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\Component\Form\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Form\FormConfigBuilder;
use Symfony\Component\Form\NativeRequestHandler;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
*/
class FormConfigTest extends TestCase
{
public static function getHtml4Ids()
{
return [
['z0'],
['A0'],
['A9'],
['Z0'],
['#', 'Symfony\Component\Form\Exception\InvalidArgumentException'],
['a#', 'Symfony\Component\Form\Exception\InvalidArgumentException'],
['a$', 'Symfony\Component\Form\Exception\InvalidArgumentException'],
['a%', 'Symfony\Component\Form\Exception\InvalidArgumentException'],
['a ', 'Symfony\Component\Form\Exception\InvalidArgumentException'],
["a\t", 'Symfony\Component\Form\Exception\InvalidArgumentException'],
["a\n", 'Symfony\Component\Form\Exception\InvalidArgumentException'],
['a-'],
['a_'],
['a:'],
// Periods are allowed by the HTML4 spec, but disallowed by us
// because they break the generated property paths
['a.', 'Symfony\Component\Form\Exception\InvalidArgumentException'],
// Contrary to the HTML4 spec, we allow names starting with a
// number, otherwise naming fields by collection indices is not
// possible.
// For root forms, leading digits will be stripped from the
// "id" attribute to produce valid HTML4.
['0'],
['9'],
// Contrary to the HTML4 spec, we allow names starting with an
// underscore, since this is already a widely used practice in
// Symfony.
// For root forms, leading underscores will be stripped from the
// "id" attribute to produce valid HTML4.
['_'],
// Integers are allowed
[0],
[123],
// NULL is allowed
[null],
];
}
#[\PHPUnit\Framework\Attributes\DataProvider('getHtml4Ids')]
public function testNameAcceptsOnlyNamesValidAsIdsInHtml4($name, $expectedException = null)
{
if (null !== $expectedException) {
$this->expectException($expectedException);
}
$formConfigBuilder = new FormConfigBuilder($name, null, new EventDispatcher());
$this->assertSame((string) $name, $formConfigBuilder->getName());
}
public function testGetRequestHandlerCreatesNativeRequestHandlerIfNotSet()
{
$config = $this->getConfigBuilder()->getFormConfig();
$this->assertInstanceOf(NativeRequestHandler::class, $config->getRequestHandler());
}
public function testGetRequestHandlerReusesNativeRequestHandlerInstance()
{
$config1 = $this->getConfigBuilder()->getFormConfig();
$config2 = $this->getConfigBuilder()->getFormConfig();
$this->assertSame($config1->getRequestHandler(), $config2->getRequestHandler());
}
public function testSetMethodAllowsGet()
{
$formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('GET');
self::assertSame('GET', $formConfigBuilder->getMethod());
}
public function testSetMethodAllowsPost()
{
$formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('POST');
self::assertSame('POST', $formConfigBuilder->getMethod());
}
public function testSetMethodAllowsPut()
{
$formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('PUT');
self::assertSame('PUT', $formConfigBuilder->getMethod());
}
public function testSetMethodAllowsDelete()
{
$formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('DELETE');
self::assertSame('DELETE', $formConfigBuilder->getMethod());
}
public function testSetMethodAllowsPatch()
{
$formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('PATCH');
self::assertSame('PATCH', $formConfigBuilder->getMethod());
}
private function getConfigBuilder($name = 'name')
{
return new FormConfigBuilder($name, null, new EventDispatcher());
}
}
|