package net.varkhan.base.conversion.serializer.composite; import junit.framework.TestCase; import net.varkhan.base.conversion.serializer.Serializer; import net.varkhan.base.conversion.serializer.primitives.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; /** * <b></b>. * <p/> * * @author varkhan * @date 5/28/11 * @time 11:07 PM */ public class StructSerializerTest extends TestCase { public void testFlatStruct() { StructSerializer<Object> s = new StructSerializer<Object>(); s.setSerializer("f_bool",new BooleanSerializer<Object>()); s.setSerializer("f_int",new IntSerializer<Object>()); s.setSerializer("f_string",new StringSerializer<Object>()); Map<String,Object> m = new HashMap<String,Object>(); m.put("f_bool",true); m.put("f_int",10); m.put("f_string","toto"); ByteArrayOutputStream os=new ByteArrayOutputStream(); s.encode(m,os,null); InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("map", m, s.decode(is, null)); } public void testHierStruct() { StructSerializer<Object> s2 = new StructSerializer<Object>(); s2.setSerializer("x",new FloatSerializer<Object>()); s2.setSerializer("y",new FloatSerializer<Object>()); s2.setSerializer("n",new LongSerializer<Object>()); Map<String,Object> pos = new HashMap<String,Object>(); pos.put("x",4.2f); pos.put("y",5.7f); pos.put("n",100L); StructSerializer<Object> s1 = new StructSerializer<Object>(); s1.setSerializer("flag",new BooleanSerializer<Object>()); s1.setSerializer("count",new IntSerializer<Object>()); s1.setSerializer("name",new StringSerializer<Object>()); s1.setSerializer("pos",s2); Map<String,Object> m = new HashMap<String,Object>(); m.put("flag", true); m.put("count", 10); m.put("name","toto"); m.put("pos", pos); ByteArrayOutputStream os=new ByteArrayOutputStream(); s1.encode(m, os, null); InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("map", m, s1.decode(is, null)); } public void testNonNullableStruct() { StructSerializer<Object> s2 = new StructSerializer<Object>(); s2.setSerializer("x", new FloatSerializer<Object>()); s2.setSerializer("y", new FloatSerializer<Object>()); s2.setSerializer("n", new LongSerializer<Object>()); StructSerializer<Object> s1 = new StructSerializer<Object>(); s1.setSerializer("flag",new BooleanSerializer<Object>()); s1.setSerializer("count",new IntSerializer<Object>()); s1.setSerializer("name",new StringSerializer<Object>()); s1.setSerializer("pos",s2); Map<String,Object> m = new HashMap<String,Object>(); m.put("flag", true); m.put("count", 10); m.put("name","toto"); m.put("pos", null); ByteArrayOutputStream os=new ByteArrayOutputStream(); try { s1.encode(m, os, null); fail("Uncaught NULL reference for non-nullable"); } catch(NullPointerException e) { /* success */ } } public void testNullableStruct() { StructSerializer<Object> s2 = new StructSerializer<Object>(); s2.setSerializer("x",new FloatSerializer<Object>()); s2.setSerializer("y",new FloatSerializer<Object>()); s2.setSerializer("n",new LongSerializer<Object>()); Map<String,Object> pos = new HashMap<String,Object>(); pos.put("x",4.2f); pos.put("y",5.7f); pos.put("n",100L); UnionSerializer<Object,Object> s3 = new UnionSerializer<Object,Object>(); s3.setSerializer(Void.class, new NullSerializer<Void,Object>()); s3.setSerializer(Map.class, (Serializer) s2); StructSerializer<Object> s1 = new StructSerializer<Object>(); s1.setSerializer("flag",new BooleanSerializer<Object>()); s1.setSerializer("count",new IntSerializer<Object>()); s1.setSerializer("name",new StringSerializer<Object>()); s1.setSerializer("pos",s3); Map<String,Object> m = new HashMap<String,Object>(); m.put("flag", true); m.put("count", 10); m.put("name","toto"); m.put("pos", pos); ByteArrayOutputStream os=new ByteArrayOutputStream(); s1.encode(m, os, null); InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("map", m, s1.decode(is, null)); } }