Passed
Pull Request — 1.x (#23)
by Wouter
02:03
created

HasKernelBrowser   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 17
c 2
b 0
f 0
dl 0
loc 35
rs 10
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A browser() 0 33 5
1
<?php
2
3
namespace Zenstruck\Browser\Test;
4
5
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
6
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
7
use Zenstruck\Browser\KernelBrowser;
8
9
trait HasKernelBrowser
10
{
11
    protected function browser(): KernelBrowser
12
    {
13
        if (!$this instanceof KernelTestCase) {
14
            throw new \RuntimeException(\sprintf('The "%s" method can only be used on TestCases that extend "%s".', __METHOD__, KernelTestCase::class));
15
        }
16
17
        $browser = KernelBrowser::create(function() {
18
            $class = $_SERVER['KERNEL_BROWSER_CLASS'] ?? KernelBrowser::class;
19
20
            if (!\is_a($class, KernelBrowser::class, true)) {
21
                throw new \RuntimeException(\sprintf('"KERNEL_BROWSER_CLASS" env variable must reference a class that extends %s.', KernelBrowser::class));
22
            }
23
24
            if ($this instanceof WebTestCase) {
25
                static::ensureKernelShutdown();
26
27
                return new $class(static::createClient());
28
            }
29
30
            // reboot kernel before starting browser
31
            static::bootKernel();
32
33
            if (!static::$container->has('test.client')) {
34
                throw new \RuntimeException('The Symfony test client is not enabled.');
35
            }
36
37
            return new $class(static::$container->get('test.client'));
38
        });
39
40
        BrowserExtension::registerBrowser($browser);
41
42
        return $browser
43
            ->setSourceDir($_SERVER['BROWSER_SOURCE_DIR'] ?? './var/browser/source')
44
        ;
45
    }
46
}
47