Completed
Push — master ( bf8f9b...649baf )
by Kirill
32s queued 23s
created

src/Core/tests/BindingsTest.php (1 issue)

Labels
Severity
1
<?php
2
3
/**
4
 * Spiral Framework.
5
 *
6
 * @license   MIT
7
 * @author    Anton Titov (Wolfy-J)
8
 */
9
10
declare(strict_types=1);
11
12
namespace Spiral\Tests\Core;
13
14
use PHPUnit\Framework\TestCase;
15
use Psr\Container\ContainerInterface;
16
use Spiral\Core\Container;
17
use Spiral\Tests\Core\Fixtures\SampleClass;
18
19
class BindingsTest extends TestCase
20
{
21
    public function testBasicBinding(): void
22
    {
23
        $container = new Container();
24
        $this->assertInstanceOf(ContainerInterface::class, $container);
25
26
        $this->assertFalse($container->has('abc'));
27
28
        $container->bind('abc', function () {
29
            return 'hello';
30
        });
31
32
        $this->assertTrue($container->has('abc'));
33
        $this->assertEquals('hello', $container->get('abc'));
34
    }
35
36
    public function testStringBinding(): void
37
    {
38
        $container = new Container();
39
40
        $this->assertFalse($container->has('abc'));
41
        $container->bind('abc', function () {
42
            return 'hello';
43
        });
44
45
        $container->bind('dce', 'abc');
46
47
        $this->assertTrue($container->has('dce'));
48
        $this->assertEquals('hello', $container->get('abc'));
49
        $this->assertEquals($container->get('abc'), $container->get('dce'));
50
    }
51
52
    public function testClassBinding(): void
53
    {
54
        $container = new Container();
55
56
        $this->assertFalse($container->has('sampleClass'));
57
        $container->bind('sampleClass', SampleClass::class);
58
59
        $this->assertTrue($container->has('sampleClass'));
60
        $this->assertInstanceOf(SampleClass::class, $container->get('sampleClass'));
61
    }
62
63
    public function testFactoryBinding(): void
64
    {
65
        $container = new Container();
66
67
        $container->bindSingleton('sampleClass', [self::class, 'sampleClass']);
68
        $this->assertInstanceOf(SampleClass::class, $container->get('sampleClass'));
69
    }
70
71
    public function testInstanceBinding(): void
72
    {
73
        $container = new Container();
74
75
        $container->bindSingleton('sampleClass', new SampleClass());
0 ignored issues
show
new Spiral\Tests\Core\Fixtures\SampleClass() of type Spiral\Tests\Core\Fixtures\SampleClass is incompatible with the type array|callable|string expected by parameter $resolver of Spiral\Core\Container::bindSingleton(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

75
        $container->bindSingleton('sampleClass', /** @scrutinizer ignore-type */ new SampleClass());
Loading history...
76
77
        $instance = $container->get('sampleClass');
78
79
        $this->assertInstanceOf(SampleClass::class, $instance);
80
        $this->assertSame($instance, $container->get('sampleClass'));
81
    }
82
83
    /**
84
     * @return SampleClass
85
     */
86
    public function sampleClass()
87
    {
88
        return new SampleClass();
89
    }
90
}
91