package net.codjo.segmentation.server.blackboard.message;
import net.codjo.agent.AclMessage;
import net.codjo.test.common.LogString;
import net.codjo.test.common.XmlUtil;
import junit.framework.TestCase;
/**
*
*/
public class MessageCodecTest extends TestCase {
private static final String ONE_WRITE = "<write>"
+ " <todo id='-1'>"
+ " <content class='string'>1</content>"
+ " </todo>"
+ " <level name='level-a'/>"
+ "</write>";
private static final String WRITE_AND_WRITE = "<actions>"
+ " <write>"
+ " <todo id='-1'>"
+ " <content class='string'>1</content>"
+ " </todo>"
+ " <level name='level-a'/>"
+ " </write>"
+ " <write>"
+ " <todo id='-1'>"
+ " <content class='string'>2</content>"
+ " </todo>"
+ " <level class='nextLevel'>"
+ " <current name='level-a'/>"
+ " </level>"
+ " </write>"
+ "</actions>";
private LogString log = new LogString();
public void test_toXml_write() throws Exception {
XmlUtil.assertEquals(ONE_WRITE,
new MessageCodec().toXml(createOneWrite()));
}
public void test_toXml_writeThenWrite() throws Exception {
BlackboardActionBuilder builder = new BlackboardActionBuilder(true);
Write last = builder
.write(new Todo<String>("1"), new Level("level-a"))
.then()
.write(new Todo<String>("2"), builder.nextLevel(new Level("level-a")));
XmlUtil.assertEquals(WRITE_AND_WRITE, new MessageCodec().toXml(last));
}
public void test_fromXml() throws Exception {
BlackboardAction action = new MessageCodec().fromXml(ONE_WRITE);
action.acceptVisitor(new BlackboardActionVisitorMock(log));
log.assertContent("visit(write(todo:1))");
}
public void test_fromXml_writeThenWrite() throws Exception {
BlackboardAction action = new MessageCodec().fromXml(WRITE_AND_WRITE);
action.acceptVisitor(new BlackboardActionVisitorMock(log));
log.assertContent("visit(write(todo:1)), visit(write(todo:2))");
}
public void test_encodeDecode() throws Exception {
MessageCodec messageCodec = new MessageCodec();
AclMessage aclMessage = new AclMessage(AclMessage.Performative.REQUEST);
messageCodec.encode(aclMessage, createOneWrite());
assertEquals("xml", aclMessage.getLanguage());
BlackboardAction actual = messageCodec.decode(aclMessage);
actual.acceptVisitor(new BlackboardActionVisitorMock(log));
log.assertContent("visit(write(todo:1))");
}
public void test_encodeDecode_read() throws Exception {
MessageCodec messageCodec = new MessageCodec();
AclMessage inform = new AclMessage(AclMessage.Performative.INFORM);
messageCodec.encodeRead(inform, new Read(new Level("a"), new Todo(1)));
assertEquals("xml", inform.getLanguage());
Read actual = messageCodec.decodeRead(inform);
assertEquals("a", actual.getLevel().getName());
assertEquals(1, actual.getTodo().getId());
}
private Write createOneWrite() {
return new Write(new Todo<String>("1"), new Level("level-a"));
}
}