Completed
Pull Request — master (#8)
by Mathieu
03:39 queued 01:15
created

EventDispatcherTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 1
Metric Value
eloc 55
c 3
b 0
f 1
dl 0
loc 86
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testAddListener() 0 35 1
A testSortListeners() 0 23 1
A testGetImpactedListeners() 0 22 1
1
<?php
2
3
use Suricate\EventDispatcher;
4
5
require_once 'stubs/Event.php';
6
7
/**
8
 * @SuppressWarnings("StaticAccess")
9
 */
10
class EventDispatcherTest extends \PHPUnit\Framework\TestCase
11
{
12
    public function testAddListener()
13
    {
14
        $dispatcher = new EventDispatcher();
15
16
        $reflector = new ReflectionClass(get_class($dispatcher));
17
        $property = $reflector->getProperty('listeners');
18
        $property->setAccessible(true);
19
        $this->assertSame([], $property->getValue($dispatcher));
20
21
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener', 12);
22
        $result = ['dummy.event' => [12 => ['\MyProject\MyListener']]];
23
        $this->assertSame($result, $property->getValue($dispatcher));
24
25
        $dispatcher->addListener(
26
            'dummy.event',
27
            '\MyProject\MySecondListener',
28
            10
29
        );
30
        $result = [
31
            'dummy.event' => [
32
                12 => ['\MyProject\MyListener'],
33
                10 => ['\MyProject\MySecondListener']
34
            ]
35
        ];
36
        $this->assertSame($result, $property->getValue($dispatcher));
37
38
        $dispatcher->addListener('TestEvent', '\MyProject\MyThirdListener', 12);
39
        $result = [
40
            'dummy.event' => [
41
                12 => ['\MyProject\MyListener'],
42
                10 => ['\MyProject\MySecondListener']
43
            ],
44
            'my.test.event' => [12 => ['\MyProject\MyThirdListener']]
45
        ];
46
        $this->assertSame($result, $property->getValue($dispatcher));
47
    }
48
    public function testGetImpactedListeners()
49
    {
50
        $dispatcher = new EventDispatcher();
51
52
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener', 12);
53
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener2', 10);
54
        $dispatcher->addListener('another.event', '\MyProject\MyListener3', 12);
55
56
        $reflection = new \ReflectionClass(get_class($dispatcher));
57
        $method = $reflection->getMethod('getImpactedListeners');
58
        $method->setAccessible(true);
59
        $methodResult = $method->invoke($dispatcher, 'dummy.event');
60
61
        $this->assertSame(
62
            ['\MyProject\MyListener2', '\MyProject\MyListener'],
63
            $methodResult
64
        );
65
66
        $methodResult = $method->invoke($dispatcher, 'dummy.event');
67
        $this->assertSame(
68
            ['\MyProject\MyListener2', '\MyProject\MyListener'],
69
            $methodResult
70
        );
71
    }
72
73
    public function testSortListeners()
74
    {
75
        $dispatcher = new EventDispatcher();
76
77
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener', 12);
78
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener2', 10);
79
        $dispatcher->addListener('another.event', '\MyProject\MyListener3', 12);
80
81
        $reflection = new \ReflectionClass(get_class($dispatcher));
82
        $method = $reflection->getMethod('sortListeners');
83
        $method->setAccessible(true);
84
        $method->invoke($dispatcher, 'dummy.event');
85
86
        $property = $reflection->getProperty('sortedListeners');
87
        $property->setAccessible(true);
88
89
        $result = [
90
            'dummy.event' => ['\MyProject\MyListener2', '\MyProject\MyListener']
91
        ];
92
        $this->assertEquals($result, $property->getValue($dispatcher));
93
94
        $method->invoke($dispatcher, 'unknown.event');
95
        $this->assertEquals($result, $property->getValue($dispatcher));
96
    }
97
}
98