/
HooksRegistrationServiceTest.php
131 lines (104 loc) · 3.89 KB
/
HooksRegistrationServiceTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
namespace Elgg;
class HooksRegistrationServiceTest extends \PHPUnit_Framework_TestCase {
/**
* @var HooksRegistrationService
*/
public $mock;
public function setUp() {
parent::setUp();
$this->mock = $this->getMockForAbstractClass('\Elgg\HooksRegistrationService');
}
public function testCanRegisterHandlers() {
$f = function () {};
$this->assertTrue($this->mock->registerHandler('foo', 'bar', 'callback1'));
$this->assertTrue($this->mock->registerHandler('foo', 'bar', $f));
$this->assertTrue($this->mock->registerHandler('foo', 'baz', 'callback3', 100));
$expected = [
'foo' => [
'bar' => [
500 => ['callback1', $f],
],
'baz' => [
100 => ['callback3'],
],
],
];
$this->assertSame($expected, $this->mock->getAllHandlers());
// check possibly invalid callbacks
$this->assertFalse($this->mock->registerHandler('foo', 'bar', 1234));
}
public function testCanUnregisterHandlers() {
$o = new HooksRegistrationServiceTest_invokable();
$this->mock->registerHandler('foo', 'bar', 'callback1');
$this->mock->registerHandler('foo', 'bar', 'callback2', 100);
$this->mock->registerHandler('foo', 'bar', 'callback2', 150);
$this->mock->registerHandler('foo', 'bar', [$o, '__invoke'], 300);
$this->mock->registerHandler('foo', 'bar', [$o, '__invoke'], 300);
$this->mock->registerHandler('foo', 'bar', [$o, '__invoke'], 300);
$this->assertTrue($this->mock->unregisterHandler(
'foo', 'bar', 'callback2'));
$this->assertTrue($this->mock->unregisterHandler(
'foo', 'bar', HooksRegistrationServiceTest_invokable::KLASS . '::__invoke'));
$this->assertTrue($this->mock->unregisterHandler(
'foo', 'bar', [HooksRegistrationServiceTest_invokable::KLASS, '__invoke']));
$this->assertTrue($this->mock->unregisterHandler(
'foo', 'bar', [$o, '__invoke']));
$expected = [
'foo' => [
'bar' => [
500 => ['callback1'],
// only one removed
150 => ['callback2'],
]
]
];
$this->assertSame($expected, $this->mock->getAllHandlers());
// check unregistering things that aren't registered
$this->assertFalse($this->mock->unregisterHandler('foo', 'bar', 'not_valid'));
}
public function testCanClearMultipleHandlersAtOnce() {
$o = new HooksRegistrationServiceTest_invokable();
$this->mock->registerHandler('foo', 'bar', 'callback1');
$this->mock->registerHandler('foo', 'baz', 'callback1', 10);
$this->mock->registerHandler('foo', 'bar', 'callback2', 100);
$this->mock->registerHandler('foo', 'bar', 'callback2', 150);
$expected = [
'foo' => [
'baz' => [
10 => ['callback1'],
]
]
];
// clearHandlers should remove everything registrered for 'foo', 'bar', but not 'foo', 'baz'
$this->mock->clearHandlers('foo', 'bar');
$this->assertSame($expected, $this->mock->getAllHandlers());
}
public function testOnlyOneHandlerUnregistered() {
$this->mock->registerHandler('foo', 'bar', 'callback');
$this->mock->registerHandler('foo', 'bar', 'callback');
$this->assertTrue($this->mock->unregisterHandler('foo', 'bar', 'callback'));
$this->assertSame([500 => ['callback']], $this->mock->getAllHandlers()['foo']['bar']);
}
public function testGetOrderedHandlers() {
$this->mock->registerHandler('foo', 'bar', 'callback1');
$this->mock->registerHandler('foo', 'bar', 'callback2');
$this->mock->registerHandler('all', 'all', 'callback4', 100);
$this->mock->registerHandler('foo', 'baz', 'callback3', 100);
$expected_foo_bar = [
'callback4', // first even though it's [all, all]
'callback1',
'callback2',
];
$expected_foo_baz = [
'callback4', // first even though it's [all, all]
'callback3',
];
$this->assertSame($expected_foo_bar, $this->mock->getOrderedHandlers('foo', 'bar'));
$this->assertSame($expected_foo_baz, $this->mock->getOrderedHandlers('foo', 'baz'));
}
}
class HooksRegistrationServiceTest_invokable {
const KLASS = __CLASS__;
function __invoke() {}
}