/**
* Tests listeners set up by supporting methods when the client receives a
* an event.
*
* @param \Phergie\Irc\Event\EventInterface $eventObject
* @param string $eventType
* @param string $eventSubtype
* @dataProvider dataProviderEventCallbacks
*/
public function testEventCallbacks(EventInterface $eventObject, $eventType, $eventSubtype)
{
$params = array();
$message = $params[] = array('foo' => 'bar');
$converter = $this->getMockConverter();
Phake::when($converter)->convert($message)->thenReturn($eventObject);
$this->bot->setConverter($converter);
$parser = $this->getMockParser();
Phake::when($parser)->parse($message)->thenReturn($message);
$this->bot->setParser($parser);
$client = new \Phergie\Irc\Client\React\Client();
$this->bot->setClient($client);
$write = $params[] = $this->getMockWriteStream();
$connection = $params[] = $this->getMockConnection();
$logger = $params[] = $this->getMockLogger();
$queue = $this->getMockEventQueue();
$queueFactory = $this->getMockEventQueueFactory();
Phake::when($queueFactory)->getEventQueue($connection)->thenReturn($queue);
$this->bot->setEventQueueFactory($queueFactory);
$test = $this;
$allCalled = false;
$typeCalled = false;
$client->on('irc.' . $eventType . '.each', function ($param, $otherQueue) use(&$allCalled, $test, $eventObject, $queue) {
$allCalled = true;
$test->assertSame($eventObject, $param);
$test->assertSame($otherQueue, $queue);
});
$client->on('irc.' . $eventType . '.' . $eventSubtype, function ($param, $otherQueue) use(&$typeCalled, $test, $eventObject, $queue) {
$typeCalled = true;
$test->assertSame($eventObject, $param);
$test->assertSame($otherQueue, $queue);
});
$client->emit('irc.' . $eventType, $params);
$this->assertTrue($allCalled);
$this->assertTrue($typeCalled);
Phake::verify($eventObject)->setConnection($connection);
}