package net.codjo.segmentation.server.blackboard;
import net.codjo.agent.AclMessage;
import net.codjo.agent.protocol.SubscribeParticipant;
import net.codjo.segmentation.server.blackboard.message.BlackboardActionBuilder;
import net.codjo.segmentation.server.blackboard.message.Level;
import net.codjo.segmentation.server.blackboard.message.Todo;
import java.util.List;
import junit.framework.TestCase;
/**
*
*/
public class BlackboardManagerTest extends TestCase {
private static final Level LEVEL_A = new Level("a");
public void test_addTodo() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("b"));
assertNull(manager.startFirstTodo(LEVEL_A));
Todo todo = new Todo();
manager.addTodo(LEVEL_A, todo);
assertEquals(1, todo.getId());
assertTrue(manager.todoExists(LEVEL_A, todo));
assertFalse(manager.todoExists(LEVEL_A, new Todo(5)));
assertSame(todo, manager.startFirstTodo(LEVEL_A));
}
public void test_addTodo_nextLevel() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("final"));
BlackboardActionBuilder builder = new BlackboardActionBuilder(false);
manager.addTodo(builder.nextLevel(LEVEL_A), new Todo());
assertEquals(1, manager.getLastTodos().size());
}
public void test_removeTodo() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("b"));
Todo todo = new Todo();
manager.addTodo(LEVEL_A, todo);
manager.removeTodo(LEVEL_A, todo);
assertNull(manager.startFirstTodo(LEVEL_A));
}
public void test_runningTodo() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("b"));
Todo firstTodo = new Todo();
manager.addTodo(LEVEL_A, firstTodo);
manager.addTodo(LEVEL_A, new Todo());
manager.startFirstTodo(LEVEL_A);
assertEquals(1, manager.getRunningTodoCount());
manager.removeTodo(LEVEL_A, new Todo(firstTodo.getId()));
assertEquals(0, manager.getRunningTodoCount());
manager.removeTodo(LEVEL_A, new Todo(69));
assertEquals(0, manager.getRunningTodoCount());
}
public void test_isFinished() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("b"), new Level("final"));
assertTrue(manager.isFinished());
Todo todo = new Todo();
manager.addTodo(LEVEL_A, todo);
assertFalse(manager.isFinished());
manager.startFirstTodo(LEVEL_A);
assertFalse(manager.isFinished());
manager.addTodo(new Level("final"), new Todo<String>("last result"));
manager.removeTodo(LEVEL_A, todo);
assertTrue(manager.isFinished());
List<Todo> lastTodos = manager.getLastTodos();
assertEquals(1, lastTodos.size());
assertEquals("last result", lastTodos.get(0).getContent());
}
public void test_reset() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("b"), new Level("final"));
manager.addTodo(LEVEL_A, new Todo());
manager.removeTodo(LEVEL_A, new Todo(1));
manager.addTodo(new Level("final"), new Todo());
assertTrue(manager.isFinished());
manager.reset();
assertTrue(manager.getLastTodos().isEmpty());
assertNextIdRestartFrom(0, manager);
}
public void test_addSubscriber() throws Exception {
BlackboardManager manager = new BlackboardManager(LEVEL_A, new Level("b"));
SubscriptionMock subscription = new SubscriptionMock();
assertEquals(0, manager.getSubscription(LEVEL_A).size());
manager.addSubscription(LEVEL_A, subscription);
assertEquals(1, manager.getSubscription(LEVEL_A).size());
assertSame(subscription, manager.getSubscription(LEVEL_A).get(0));
manager.removeSubscription(LEVEL_A, subscription);
assertEquals(0, manager.getSubscription(LEVEL_A).size());
}
private void assertNextIdRestartFrom(int expected, BlackboardManager manager) {
Todo todo = new Todo();
manager.addTodo(LEVEL_A, todo);
assertEquals(expected + 1, todo.getId());
}
private static class SubscriptionMock implements SubscribeParticipant.Subscription {
public AclMessage getMessage() {
return null;
}
public void reply(AclMessage messageToSend) {
}
public void close() {
}
}
}