CheckArgumentsValidityPassTest.php 2.29 KB
Newer Older
Ketan's avatar
Ketan committed
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
<?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\DependencyInjection\Tests\Compiler;

use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\Compiler\CheckArgumentsValidityPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;

/**
 * @author Kévin Dunglas <dunglas@gmail.com>
 */
class CheckArgumentsValidityPassTest extends TestCase
{
    public function testProcess()
    {
        $container = new ContainerBuilder();
        $definition = $container->register('foo');
        $definition->setArguments([null, 1, 'a']);
        $definition->setMethodCalls([
            ['bar', ['a', 'b']],
            ['baz', ['c', 'd']],
        ]);

        $pass = new CheckArgumentsValidityPass();
        $pass->process($container);

        $this->assertEquals([null, 1, 'a'], $container->getDefinition('foo')->getArguments());
        $this->assertEquals([
            ['bar', ['a', 'b']],
            ['baz', ['c', 'd']],
        ], $container->getDefinition('foo')->getMethodCalls());
    }

    /**
     * @dataProvider definitionProvider
     */
    public function testException(array $arguments, array $methodCalls)
    {
        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
        $container = new ContainerBuilder();
        $definition = $container->register('foo');
        $definition->setArguments($arguments);
        $definition->setMethodCalls($methodCalls);

        $pass = new CheckArgumentsValidityPass();
        $pass->process($container);
    }

    public function definitionProvider()
    {
        return [
            [[null, 'a' => 'a'], []],
            [[1 => 1], []],
            [[], [['baz', [null, 'a' => 'a']]]],
            [[], [['baz', [1 => 1]]]],
        ];
    }

    public function testNoException()
    {
        $container = new ContainerBuilder();
        $definition = $container->register('foo');
        $definition->setArguments([null, 'a' => 'a']);

        $pass = new CheckArgumentsValidityPass(false);
        $pass->process($container);
        $this->assertCount(1, $definition->getErrors());
    }
}