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'], 150 => ['callback2']]]];
$this->assertSame($expected, $this->mock->getAllHandlers());
// check unregistering things that aren't registered
$this->assertFalse($this->mock->unregisterHandler('foo', 'bar', 'not_valid'));
}