Classes List

Symfony\Component\Form\Tests\FormConfigTest

 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 
 137 
 138 
 139 
 140 
 141 
 142 
 143 
 144 
 145 
 146 
 147 
 148 
 149 
 150 
 151 
 152 
 153 
 154 
 155 
 156 
<?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\Form\FormConfigBuilder;

/** * @author Bernhard Schussek <bschussek@gmail.com> */
class FormConfigTest extends TestCase
{
    public function getHtml4Ids()
    {
        return array(
            array('z0'),
            array('A0'),
            array('A9'),
            array('Z0'),
            array('#''Symfony\Component\Form\Exception\InvalidArgumentException'),
            array('a#''Symfony\Component\Form\Exception\InvalidArgumentException'),
            array('a$''Symfony\Component\Form\Exception\InvalidArgumentException'),
            array('a%''Symfony\Component\Form\Exception\InvalidArgumentException'),
            array('a ''Symfony\Component\Form\Exception\InvalidArgumentException'),
            array("a\t"'Symfony\Component\Form\Exception\InvalidArgumentException'),
            array("a\n"'Symfony\Component\Form\Exception\InvalidArgumentException'),
            array('a-'),
            array('a_'),
            array('a:'),
            // Periods are allowed by the HTML4 spec, but disallowed by us
            // because they break the generated property paths
            array('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.
            array('0'),
            array('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.
            array('_'),
            // Integers are allowed
            array(0),
            array(123),
            // NULL is allowed
            array(null),
            // Other types are not
            array(1.23'Symfony\Component\Form\Exception\UnexpectedTypeException'),
            array(5.'Symfony\Component\Form\Exception\UnexpectedTypeException'),
            array(true'Symfony\Component\Form\Exception\UnexpectedTypeException'),
            array(new \stdClass(), 'Symfony\Component\Form\Exception\UnexpectedTypeException'),
        );
    }

    /** * @dataProvider getHtml4Ids */
    public function testNameAcceptsOnlyNamesValidAsIdsInHtml4($name$expectedException = null)
    {
        $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();

        if (null !== $expectedException && method_exists($this'expectException')) {
            $this->expectException($expectedException);
        } elseif (null !== $expectedException) {
            $this->setExpectedException($expectedException);
        }

        $formConfigBuilder = new FormConfigBuilder($namenull$dispatcher);

        $this->assertSame((string) $name$formConfigBuilder->getName());
    }

    public function testGetRequestHandlerCreatesNativeRequestHandlerIfNotSet()
    {
        $config = $this->getConfigBuilder()->getFormConfig();

        $this->assertInstanceOf('Symfony\Component\Form\NativeRequestHandler'$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());
    }

    /** * @expectedException \Symfony\Component\Form\Exception\InvalidArgumentException */
    public function testSetMethodDoesNotAllowOtherValues()
    {
        $this->getConfigBuilder()->setMethod('foo');
    }

    private function getConfigBuilder($name = 'name')
    {
        $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();

        return new FormConfigBuilder($namenull$dispatcher);
    }
}