Completed
Pull Request — master (#8)
by Mathieu
04:16
created

EventDispatcherTest   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
eloc 40
c 2
b 0
f 1
dl 0
loc 62
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A testSortListeners() 0 23 1
A testAddListener() 0 35 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
49
    public function testSortListeners()
50
    {
51
        $dispatcher = new EventDispatcher();
52
53
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener', 12);
54
        $dispatcher->addListener('dummy.event', '\MyProject\MyListener2', 10);
55
        $dispatcher->addListener('another.event', '\MyProject\MyListener3', 12);
56
57
        $reflection = new \ReflectionClass(get_class($dispatcher));
58
        $method = $reflection->getMethod('sortListeners');
59
        $method->setAccessible(true);
60
        $method->invoke($dispatcher, 'dummy.event');
61
62
        $property = $reflection->getProperty('sortedListeners');
63
        $property->setAccessible(true);
64
65
        $result = [
66
            'dummy.event' => ['\MyProject\MyListener2', '\MyProject\MyListener']
67
        ];
68
        $this->assertEquals($result, $property->getValue($dispatcher));
69
70
        $method->invoke($dispatcher, 'unknown.event');
71
        $this->assertEquals($result, $property->getValue($dispatcher));
72
    }
73
}
74