package org.directwebremoting.proxy.openajax;
import org.directwebremoting.Hub;
import org.directwebremoting.HubFactory;
import junit.framework.TestCase;
/**
* @author Joe Walker [joe at getahead dot ltd dot uk]
*/
public class PubSubHubTest extends TestCase
{
/**
*
*/
public void testSubscribeStringStringSubscriptionListener()
{
Hub hub = HubFactory.get();
Object subscriptionData = new Integer(42);
Object publisherData = new Float(3.1416);
CustomSubscriptionListener pn = new CustomSubscriptionListener("httpId", "scriptId", "prefix", "name", subscriptionData, publisherData);
hub.subscribe("prefix", "name", pn, subscriptionData);
assertEquals(pn.getNotifications(), 0);
hub.publish("prefix", "name", publisherData);
assertEquals(pn.getNotifications(), 1);
hub.publish("prefix1", "name1", publisherData);
assertEquals(pn.getNotifications(), 1);
hub.publish("prefix", "name1", publisherData);
assertEquals(pn.getNotifications(), 1);
hub.publish("prefix1", "name", publisherData);
assertEquals(pn.getNotifications(), 1);
hub.publish("prefix", "name", publisherData);
assertEquals(pn.getNotifications(), 2);
hub.unsubscribe("prefix", "name", pn);
assertEquals(pn.getNotifications(), 2);
hub.publish("prefix", "name", publisherData);
assertEquals(pn.getNotifications(), 2);
hub.subscribe("*", "scriptId", "prefix", "name", pn, subscriptionData);
assertEquals(pn.getNotifications(), 2);
hub.publish("prefix", "name", publisherData);
assertEquals(pn.getNotifications(), 3);
hub.publish("prefix", "*", publisherData);
assertEquals(pn.getNotifications(), 4);
hub.publish("*", "name", publisherData);
assertEquals(pn.getNotifications(), 5);
hub.publish("prefix", PubSubHub.ANY_NAME, publisherData);
assertEquals(pn.getNotifications(), 6);
hub.publish(PubSubHub.ANY_PREFIX, "name", publisherData);
assertEquals(pn.getNotifications(), 7);
}
/**
* A test PublishListener that simply counts publishes
*/
private static final class CustomSubscriptionListener implements PublishListener
{
public CustomSubscriptionListener(String httpSessionId, String scriptSessionId, String prefix, String name, Object subscriptionData, Object publisherData)
{
this.httpSessionId = httpSessionId;
this.scriptSessionId = scriptSessionId;
this.prefix = prefix;
this.name = name;
this.subscriptionData = subscriptionData;
this.publisherData = publisherData;
}
/* (non-Javadoc)
* @see org.directwebremoting.proxy.openajax.PublishListener#eventHappened(org.directwebremoting.proxy.openajax.PublishEvent)
*/
public void publishHappened(PublishEvent ev)
{
if (!ev.getHttpSessionId().equals(PubSubHub.ANY_HTTP_SESSION))
{
assertEquals(httpSessionId, ev.getHttpSessionId());
}
if (!ev.getScriptSessionId().equals(PubSubHub.ANY_SCRIPT_SESSION))
{
assertEquals(scriptSessionId, ev.getScriptSessionId());
}
if (!ev.getPrefix().equals(PubSubHub.ANY_PREFIX))
{
assertEquals(prefix, ev.getPrefix());
}
if (!ev.getName().equals(PubSubHub.ANY_NAME))
{
assertEquals(name, ev.getName());
}
assertEquals(subscriptionData, ev.getSubscriberData());
assertEquals(publisherData, ev.getPublisherData());
notifications++;
}
public int getNotifications()
{
return notifications;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString()
{
return "PublishListener[" + prefix + "/" + name + "]";
}
private int notifications = 0;
private String httpSessionId;
private String scriptSessionId;
private String prefix;
private String name;
private Object subscriptionData;
private Object publisherData;
}
}