BundleTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 5
lcom 0
cbo 4
dl 0
loc 30
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A testBuildCompilerPasses() 0 27 5
1
<?php
2
3
namespace Doctrine\Bundle\DoctrineBundle\Tests;
4
5
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DbalSchemaFilterPass;
6
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
7
use PHPUnit\Framework\TestCase;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Doctrine\Bundle\DoctrineBundle\Tests\TestCase.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
8
use Symfony\Bridge\Doctrine\DependencyInjection\CompilerPass\DoctrineValidationPass;
9
use Symfony\Bridge\Doctrine\DependencyInjection\CompilerPass\RegisterEventListenersAndSubscribersPass;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
12
class BundleTest extends TestCase
13
{
14
    public function testBuildCompilerPasses() : void
15
    {
16
        $container = new ContainerBuilder();
17
        $bundle    = new DoctrineBundle();
18
        $bundle->build($container);
19
20
        $config = $container->getCompilerPassConfig();
21
        $passes = $config->getBeforeOptimizationPasses();
22
23
        $foundEventListener = false;
24
        $foundValidation    = false;
25
        $foundSchemaFilter  = false;
26
27
        foreach ($passes as $pass) {
28
            if ($pass instanceof RegisterEventListenersAndSubscribersPass) {
29
                $foundEventListener = true;
30
            } elseif ($pass instanceof DoctrineValidationPass) {
31
                $foundValidation = true;
32
            } elseif ($pass instanceof DbalSchemaFilterPass) {
33
                $foundSchemaFilter = true;
34
            }
35
        }
36
37
        $this->assertTrue($foundEventListener, 'RegisterEventListenersAndSubscribersPass was not found');
38
        $this->assertTrue($foundValidation, 'DoctrineValidationPass was not found');
39
        $this->assertTrue($foundSchemaFilter, 'DbalSchemaFilterPass was not found');
40
    }
41
}
42