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; } }