package org.aplikator.shared.rpc.marshaller;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import org.aplikator.client.shared.data.PrimaryKey;
import org.aplikator.client.shared.data.RecordDTO;
import org.aplikator.client.shared.rpc.marshaller.PrimaryKeyMarshaller;
import org.aplikator.client.shared.rpc.marshaller.RecordDTOMarshaller;
import org.easymock.EasyMock;
import org.jboss.errai.marshalling.client.api.Marshaller;
import org.jboss.errai.marshalling.client.api.MarshallingSession;
import org.jboss.errai.marshalling.client.api.json.EJValue;
import org.jboss.errai.marshalling.client.marshallers.StringMarshaller;
import org.jboss.errai.marshalling.server.JSONDecoder;
import org.junit.Assert;
import junit.framework.TestCase;
public class RecordDTOMarshallTest extends TestCase {
public void testMarshall() {
RecordDTO recordDTO = new RecordDTO();
recordDTO.setPrimaryKey(new PrimaryKey("modul", 2));
recordDTO.setValue("datumovepole", new Date());
recordDTO.setValue("stringovepole", "string");
recordDTO.setValue("integerovepole", 2);
recordDTO.setValue("doublepole", 3.3);
recordDTO.setValue("booleanpole", true);
recordDTO.setValue("bigdecimal", new BigDecimal("33.2223445"));
RecordDTO subrecord1 = new RecordDTO();
subrecord1.setPrimaryKey(new PrimaryKey("submodul", 2));
subrecord1.setOwnerPrimaryKey(new PrimaryKey("modul", 2));
RecordDTO subrecord2 = new RecordDTO();
subrecord2.setPrimaryKey(new PrimaryKey("submodul", 2));
subrecord2.setOwnerPrimaryKey(new PrimaryKey("modul", 2));
recordDTO.setValue("kolekce", new ArrayList<RecordDTO>(Arrays.asList(subrecord1, subrecord2)));
recordDTO.setValue("reference", subrecord1);
MarshallingSession session = ctx();
RecordDTOMarshaller recMarshaller = new RecordDTOMarshaller();
String marshalled = recMarshaller.marshall(recordDTO, session);
EJValue decoded = JSONDecoder.decode(marshalled);
RecordDTO rec = recMarshaller.demarshall(decoded, session);
Assert.assertTrue(rec.getProperties().size() == 8);
Assert.assertNotNull(rec.getValue("datumovepole"));
Assert.assertNotNull(rec.getValue("stringovepole"));
Assert.assertNotNull(rec.getValue("integerovepole"));
Assert.assertNotNull(rec.getValue("doublepole"));
Assert.assertNotNull(rec.getValue("booleanpole"));
Assert.assertNull(rec.getValue("booleanABC"));
}
public void testMarshallWithNull() {
RecordDTO recordDTO = new RecordDTO();
recordDTO.setPrimaryKey(new PrimaryKey("modul", 2));
recordDTO.setValue("datumovepole", null);
recordDTO.setValue("stringovepole", null);
recordDTO.setValue("integerovepole", null);
recordDTO.setValue("doublepole", null);
recordDTO.setValue("booleanpole", true);
MarshallingSession session = ctx();
RecordDTOMarshaller recMarshaller = new RecordDTOMarshaller();
String marshalled = recMarshaller.marshall(recordDTO, session);
RecordDTO demarshalledRecordDTO = recMarshaller.demarshall(JSONDecoder.decode(marshalled), session);
Assert.assertNull(demarshalledRecordDTO.getValue("datumovepole"));
Assert.assertNull(demarshalledRecordDTO.getValue("stringovepole"));
Assert.assertNull(demarshalledRecordDTO.getValue("integerovepole"));
Assert.assertNull(demarshalledRecordDTO.getValue("doublepole"));
Assert.assertNotNull(demarshalledRecordDTO.getValue("booleanpole"));
}
@SuppressWarnings("unchecked")
private MarshallingSession ctx() {
MarshallingSession session = EasyMock.createMock(MarshallingSession.class);
PrimaryKeyMarshaller pkmarsh = new PrimaryKeyMarshaller();
Object marsh = pkmarsh;
EasyMock.expect(session.getMarshallerInstance(PrimaryKey.class.getName())).andReturn((Marshaller<Object>) marsh).anyTimes();
StringMarshaller smarsh = new StringMarshaller();
marsh = smarsh;
EasyMock.expect(session.getMarshallerInstance(String.class.getName())).andReturn((Marshaller<Object>) marsh).anyTimes();
RecordDTOMarshaller recMarshaller = new RecordDTOMarshaller();
marsh = recMarshaller;
EasyMock.expect(session.getMarshallerInstance(RecordDTO.class.getName())).andReturn((Marshaller<Object>) marsh).anyTimes();
EasyMock.replay(session);
return session;
}
}