package cn.org.rapid_framework.util.concurrent.async;
import junit.framework.TestCase;
public class AsyncTokenTest extends TestCase {
Exception exception = new Exception();
public void testOnFault() throws InterruptedException {
AsyncToken token = new AsyncToken();
token.setFault(exception);
token.addResponder(new IResponder() {
public void onFault(Exception fault) {
System.out.println("onFault()");
assertEquals(fault,exception);
}
public void onResult(Object result) {
assertNull(result);
}
});
Thread.sleep(500);
}
public void testTokenGroup() throws InterruptedException {
AsyncToken token = new AsyncToken("badqiu","badqiu-1");
assertEquals(token.getTokenGroup(),"badqiu");
assertEquals(token.getTokenName(),"badqiu-1");
assertTrue(token.getTokenId()> 0);
AsyncToken token2 = new AsyncToken();
assertEquals(token.getTokenId()+1,token2.getTokenId());
assertEquals(token2.getTokenGroup(),AsyncToken.DEFAULT_TOKEN_GROUP);
assertEquals(token2.getTokenName(),null);
}
public void testOnResult() throws InterruptedException {
AsyncToken token = new AsyncToken();
token.setComplete(exception);
token.addResponder(new IResponder() {
public void onFault(Exception fault) {
assertNull(fault);
}
public void onResult(Object result) {
System.out.println("onResult()");
assertEquals(result,exception);
}
});
Thread.sleep(500);
}
public void testFireTwice() {
AsyncToken token = new AsyncToken();
token.setComplete(exception);
try {
token.setComplete(exception);
fail();
}catch(IllegalStateException e) {
assertTrue(true);
}
}
public void testUncaughtExceptionHandler() throws InterruptedException {
final RuntimeException caughtException = new RuntimeException();
AsyncToken<Exception> token = new AsyncToken();
token.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void uncaughtException(IResponder responder, Throwable e) {
assertEquals(caughtException,e);
System.out.println("caughtException");
}
});
token.setComplete(exception);
token.addResponder(new IResponder() {
public void onFault(Exception fault) {
assertNull(fault);
}
public void onResult(Object result) {
throw caughtException;
}
});
token.addResponder(new IResponder<Exception>() {
public void onFault(Exception fault) {
}
public void onResult(Exception result) {
}
});
Thread.sleep(500);
}
}