196 lines
6.1 KiB
PHP
196 lines
6.1 KiB
PHP
<?php
|
|
namespace Ratchet\Wamp;
|
|
|
|
/**
|
|
* @covers Ratchet\Wamp\TopicManager
|
|
*/
|
|
class TopicManagerTest extends \PHPUnit_Framework_TestCase {
|
|
private $mock;
|
|
|
|
/**
|
|
* @var \Ratchet\Wamp\TopicManager
|
|
*/
|
|
private $mngr;
|
|
|
|
/**
|
|
* @var \Ratchet\ConnectionInterface
|
|
*/
|
|
private $conn;
|
|
|
|
public function setUp() {
|
|
$this->conn = $this->getMock('\Ratchet\ConnectionInterface');
|
|
$this->mock = $this->getMock('\Ratchet\Wamp\WampServerInterface');
|
|
$this->mngr = new TopicManager($this->mock);
|
|
|
|
$this->conn->WAMP = new \StdClass;
|
|
$this->mngr->onOpen($this->conn);
|
|
}
|
|
|
|
public function testGetTopicReturnsTopicObject() {
|
|
$class = new \ReflectionClass('Ratchet\Wamp\TopicManager');
|
|
$method = $class->getMethod('getTopic');
|
|
$method->setAccessible(true);
|
|
|
|
$topic = $method->invokeArgs($this->mngr, array('The Topic'));
|
|
|
|
$this->assertInstanceOf('Ratchet\Wamp\Topic', $topic);
|
|
}
|
|
|
|
public function testGetTopicCreatesTopicWithSameName() {
|
|
$name = 'The Topic';
|
|
|
|
$class = new \ReflectionClass('Ratchet\Wamp\TopicManager');
|
|
$method = $class->getMethod('getTopic');
|
|
$method->setAccessible(true);
|
|
|
|
$topic = $method->invokeArgs($this->mngr, array($name));
|
|
|
|
$this->assertEquals($name, $topic->getId());
|
|
}
|
|
|
|
public function testGetTopicReturnsSameObject() {
|
|
$class = new \ReflectionClass('Ratchet\Wamp\TopicManager');
|
|
$method = $class->getMethod('getTopic');
|
|
$method->setAccessible(true);
|
|
|
|
$topic = $method->invokeArgs($this->mngr, array('No copy'));
|
|
$again = $method->invokeArgs($this->mngr, array('No copy'));
|
|
|
|
$this->assertSame($topic, $again);
|
|
}
|
|
|
|
public function testOnOpen() {
|
|
$this->mock->expects($this->once())->method('onOpen');
|
|
$this->mngr->onOpen($this->conn);
|
|
}
|
|
|
|
public function testOnCall() {
|
|
$id = uniqid();
|
|
|
|
$this->mock->expects($this->once())->method('onCall')->with(
|
|
$this->conn
|
|
, $id
|
|
, $this->isInstanceOf('Ratchet\Wamp\Topic')
|
|
, array()
|
|
);
|
|
|
|
$this->mngr->onCall($this->conn, $id, 'new topic', array());
|
|
}
|
|
|
|
public function testOnSubscribeCreatesTopicObject() {
|
|
$this->mock->expects($this->once())->method('onSubscribe')->with(
|
|
$this->conn, $this->isInstanceOf('Ratchet\Wamp\Topic')
|
|
);
|
|
|
|
$this->mngr->onSubscribe($this->conn, 'new topic');
|
|
}
|
|
|
|
public function testTopicIsInConnectionOnSubscribe() {
|
|
$name = 'New Topic';
|
|
|
|
$class = new \ReflectionClass('Ratchet\Wamp\TopicManager');
|
|
$method = $class->getMethod('getTopic');
|
|
$method->setAccessible(true);
|
|
|
|
$topic = $method->invokeArgs($this->mngr, array($name));
|
|
|
|
$this->mngr->onSubscribe($this->conn, $name);
|
|
|
|
$this->assertTrue($this->conn->WAMP->subscriptions->contains($topic));
|
|
}
|
|
|
|
public function testDoubleSubscriptionFiresOnce() {
|
|
$this->mock->expects($this->exactly(1))->method('onSubscribe');
|
|
|
|
$this->mngr->onSubscribe($this->conn, 'same topic');
|
|
$this->mngr->onSubscribe($this->conn, 'same topic');
|
|
}
|
|
|
|
public function testUnsubscribeEvent() {
|
|
$name = 'in and out';
|
|
$this->mock->expects($this->once())->method('onUnsubscribe')->with(
|
|
$this->conn, $this->isInstanceOf('Ratchet\Wamp\Topic')
|
|
);
|
|
|
|
$this->mngr->onSubscribe($this->conn, $name);
|
|
$this->mngr->onUnsubscribe($this->conn, $name);
|
|
}
|
|
|
|
public function testUnsubscribeFiresOnce() {
|
|
$name = 'getting sleepy';
|
|
$this->mock->expects($this->exactly(1))->method('onUnsubscribe');
|
|
|
|
$this->mngr->onSubscribe($this->conn, $name);
|
|
$this->mngr->onUnsubscribe($this->conn, $name);
|
|
$this->mngr->onUnsubscribe($this->conn, $name);
|
|
}
|
|
|
|
public function testUnsubscribeRemovesTopicFromConnection() {
|
|
$name = 'Bye Bye Topic';
|
|
|
|
$class = new \ReflectionClass('Ratchet\Wamp\TopicManager');
|
|
$method = $class->getMethod('getTopic');
|
|
$method->setAccessible(true);
|
|
|
|
$topic = $method->invokeArgs($this->mngr, array($name));
|
|
|
|
$this->mngr->onSubscribe($this->conn, $name);
|
|
$this->mngr->onUnsubscribe($this->conn, $name);
|
|
|
|
$this->assertFalse($this->conn->WAMP->subscriptions->contains($topic));
|
|
}
|
|
|
|
public function testOnPublishBubbles() {
|
|
$msg = 'Cover all the code!';
|
|
|
|
$this->mock->expects($this->once())->method('onPublish')->with(
|
|
$this->conn
|
|
, $this->isInstanceOf('Ratchet\Wamp\Topic')
|
|
, $msg
|
|
, $this->isType('array')
|
|
, $this->isType('array')
|
|
);
|
|
|
|
$this->mngr->onPublish($this->conn, 'topic coverage', $msg, array(), array());
|
|
}
|
|
|
|
public function testOnCloseBubbles() {
|
|
$this->mock->expects($this->once())->method('onClose')->with($this->conn);
|
|
$this->mngr->onClose($this->conn);
|
|
}
|
|
|
|
public function testConnIsRemovedFromTopicOnClose() {
|
|
$name = 'State testing';
|
|
|
|
$class = new \ReflectionClass('Ratchet\Wamp\TopicManager');
|
|
$method = $class->getMethod('getTopic');
|
|
$method->setAccessible(true);
|
|
|
|
$topic = $method->invokeArgs($this->mngr, array($name));
|
|
|
|
$this->mngr->onSubscribe($this->conn, $name);
|
|
$this->mngr->onClose($this->conn);
|
|
|
|
$this->assertFalse($topic->has($this->conn));
|
|
}
|
|
|
|
public function testOnErrorBubbles() {
|
|
$e = new \Exception('All work and no play makes Chris a dull boy');
|
|
$this->mock->expects($this->once())->method('onError')->with($this->conn, $e);
|
|
|
|
$this->mngr->onError($this->conn, $e);
|
|
}
|
|
|
|
public function testGetSubProtocolsReturnsArray() {
|
|
$this->assertInternalType('array', $this->mngr->getSubProtocols());
|
|
}
|
|
|
|
public function testGetSubProtocolsBubbles() {
|
|
$subs = array('hello', 'world');
|
|
$app = $this->getMock('Ratchet\Wamp\Stub\WsWampServerInterface');
|
|
$app->expects($this->once())->method('getSubProtocols')->will($this->returnValue($subs));
|
|
$mngr = new TopicManager($app);
|
|
|
|
$this->assertEquals($subs, $mngr->getSubProtocols());
|
|
}
|
|
} |