package net.varkhan.base.conversion.serializer.composite; import junit.framework.TestCase; import net.varkhan.base.conversion.serializer.DecodingException; import net.varkhan.base.conversion.serializer.EncodingException; import net.varkhan.base.conversion.serializer.primitives.BooleanSerializer; import net.varkhan.base.conversion.serializer.primitives.IntSerializer; import net.varkhan.base.conversion.serializer.primitives.NullSerializer; import net.varkhan.base.conversion.serializer.primitives.StringSerializer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * <b></b>. * <p/> * * @author varkhan * @date 5/28/11 * @time 10:48 PM */ public class UnionSerializerTest extends TestCase { public void testConcrete() { UnionSerializer<Object,Object> s = new UnionSerializer<Object,Object>(); s.setSerializer(Boolean.class,new BooleanSerializer<Object>()); s.setSerializer(Integer.class,new IntSerializer<Object>()); s.setSerializer(CharSequence.class, new StringSerializer<Object>()); ByteArrayOutputStream os=new ByteArrayOutputStream(); s.encode(true,os,null); s.encode("toto",os,null); s.encode(10,os,null); InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("bool", true, s.decode(is, null)); assertEquals("string", "toto", s.decode(is, null)); assertEquals("int", 10, s.decode(is, null)); } public void testWithNull() { UnionSerializer<Object,Object> s = new UnionSerializer<Object,Object>(); s.setSerializer(Void.class,new NullSerializer<Void,Object>()); s.setSerializer(Boolean.class,new BooleanSerializer<Object>()); s.setSerializer(Integer.class,new IntSerializer<Object>()); s.setSerializer(CharSequence.class, new StringSerializer<Object>()); ByteArrayOutputStream os=new ByteArrayOutputStream(); s.encode(true,os,null); s.encode("toto",os,null); s.encode(10,os,null); s.encode(null,os,null); InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("bool", true, s.decode(is, null)); assertEquals("string", "toto", s.decode(is, null)); assertEquals("int", 10, s.decode(is, null)); assertEquals("null", null, s.decode(is, null)); } public void testUnknownClass() { UnionSerializer<Object,Object> s = new UnionSerializer<Object,Object>(); s.setSerializer(Boolean.class,new BooleanSerializer<Object>()); s.setSerializer(Integer.class,new IntSerializer<Object>()); s.setSerializer(CharSequence.class, new StringSerializer<Object>()); ByteArrayOutputStream os=new ByteArrayOutputStream(); s.encode(true,os,null); s.encode("toto", os, null); s.encode(10, os, null); try { s.encode(1.0,os,null); fail("Unknown class not caught"); } catch(EncodingException e) { /* success */ } InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("bool", true, s.decode(is, null)); assertEquals("string", "toto", s.decode(is, null)); assertEquals("int", 10, s.decode(is, null)); } public void testUnknownId() { UnionSerializer<Object,Object> s1 = new UnionSerializer<Object,Object>(); s1.setSerializer(Boolean.class,new BooleanSerializer<Object>()); s1.setSerializer(Integer.class,new IntSerializer<Object>()); s1.setSerializer(CharSequence.class, new StringSerializer<Object>()); UnionSerializer<Object,Object> s2 = new UnionSerializer<Object,Object>(); s2.setSerializer(Boolean.class,new BooleanSerializer<Object>()); s2.setSerializer(Integer.class,new IntSerializer<Object>()); ByteArrayOutputStream os=new ByteArrayOutputStream(); s1.encode(true,os,null); s1.encode("toto",os,null); s1.encode(10,os,null); InputStream is=new ByteArrayInputStream(os.toByteArray()); assertEquals("bool", true, s2.decode(is, null)); try { s2.decode(is, null); fail("Unknown ID not caught"); } catch(DecodingException e) { /* success */ } } }