From 19ff0dd17fee50f2ea18b6f941c9f7068260bcb7 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 24 Oct 2010 20:11:39 +0900 Subject: [PATCH] java: fixes ListTemplate and MapTemplate --- .../org/msgpack/template/ListTemplate.java | 3 +- .../org/msgpack/template/MapTemplate.java | 3 +- .../msgpack/TestMessagePackStaticMethods.java | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/java/src/main/java/org/msgpack/template/ListTemplate.java b/java/src/main/java/org/msgpack/template/ListTemplate.java index 6703df40..f15ae523 100644 --- a/java/src/main/java/org/msgpack/template/ListTemplate.java +++ b/java/src/main/java/org/msgpack/template/ListTemplate.java @@ -34,10 +34,11 @@ public class ListTemplate implements Template { } public void pack(Packer pk, Object target) throws IOException { - if(target instanceof List) { + if(!(target instanceof List)) { throw new MessageTypeException(); } List list = (List)target; + pk.packArray(list.size()); for(Object element : list) { elementTemplate.pack(pk, element); } diff --git a/java/src/main/java/org/msgpack/template/MapTemplate.java b/java/src/main/java/org/msgpack/template/MapTemplate.java index 6925982d..9b7b250f 100644 --- a/java/src/main/java/org/msgpack/template/MapTemplate.java +++ b/java/src/main/java/org/msgpack/template/MapTemplate.java @@ -40,10 +40,11 @@ public class MapTemplate implements Template { } public void pack(Packer pk, Object target) throws IOException { - if(target instanceof Map) { + if(!(target instanceof Map)) { throw new MessageTypeException(); } Map map = (Map)target; + pk.packMap(map.size()); for(Map.Entry pair : map.entrySet()) { keyTemplate.pack(pk, pair.getKey()); valueTemplate.pack(pk, pair.getValue()); diff --git a/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java b/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java index dea2a371..b91615b3 100644 --- a/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java +++ b/java/src/test/java/org/msgpack/TestMessagePackStaticMethods.java @@ -17,15 +17,18 @@ public class TestMessagePackStaticMethods extends TestCase { byte[] a = MessagePack.pack("msgpack"); byte[] b = MessagePack.pack((Object)1); byte[] c = MessagePack.pack((Object)null); + byte[] d = MessagePack.pack(createStringList()); { MessagePackObject aobj = MessagePack.unpack(a); MessagePackObject bobj = MessagePack.unpack(b); MessagePackObject cobj = MessagePack.unpack(c); + MessagePackObject dobj = MessagePack.unpack(d); assertEquals(aobj, RawType.create("msgpack")); assertEquals(bobj, IntegerType.create(1)); assertEquals(cobj, NilType.create()); + assertEquals(dobj, createStringList_dynamic()); } } @@ -37,6 +40,8 @@ public class TestMessagePackStaticMethods extends TestCase { MessagePack.pack(bout, (Object)1); ByteArrayOutputStream cout = new ByteArrayOutputStream(); MessagePack.pack(cout, (Object)null); + ByteArrayOutputStream dout = new ByteArrayOutputStream(); + MessagePack.pack(dout, createStringList()); { InputStream ain = new ByteArrayInputStream(aout.toByteArray()); @@ -45,10 +50,13 @@ public class TestMessagePackStaticMethods extends TestCase { MessagePackObject bobj = MessagePack.unpack(bin); InputStream cin = new ByteArrayInputStream(cout.toByteArray()); MessagePackObject cobj = MessagePack.unpack(cin); + InputStream din = new ByteArrayInputStream(dout.toByteArray()); + MessagePackObject dobj = MessagePack.unpack(din); assertEquals(aobj, RawType.create("msgpack")); assertEquals(bobj, IntegerType.create(1)); assertEquals(cobj, NilType.create()); + assertEquals(dobj, createStringList_dynamic()); } } @@ -57,16 +65,19 @@ public class TestMessagePackStaticMethods extends TestCase { byte[] a = MessagePack.pack("msgpack", TString); byte[] b = MessagePack.pack((Object)1, TInteger); byte[] c = MessagePack.pack((Object)null, TAny); + byte[] d = MessagePack.pack(createStringList(), tList(TString)); { Object aobj = MessagePack.unpack(a, TString); Object bobj = MessagePack.unpack(b, TInteger); Object cobj_any = MessagePack.unpack(c, TAny); Object cobj_obj = MessagePack.unpack(c, tOptional(TAny)); + Object dobj = MessagePack.unpack(d, tList(TString)); assertEquals(aobj, "msgpack"); assertEquals(bobj, 1); assertEquals(cobj_any, NilType.create()); assertEquals(cobj_obj, null); + assertEquals(dobj, createStringList()); } { @@ -87,6 +98,8 @@ public class TestMessagePackStaticMethods extends TestCase { MessagePack.pack(bout, (Object)1); ByteArrayOutputStream cout = new ByteArrayOutputStream(); MessagePack.pack(cout, (Object)null); + ByteArrayOutputStream dout = new ByteArrayOutputStream(); + MessagePack.pack(dout, createStringList()); { InputStream ain = new ByteArrayInputStream(aout.toByteArray()); @@ -97,11 +110,14 @@ public class TestMessagePackStaticMethods extends TestCase { Object cobj_any = MessagePack.unpack(cin_any, TAny); InputStream cin_obj = new ByteArrayInputStream(cout.toByteArray()); Object cobj_obj = MessagePack.unpack(cin_obj, tOptional(TAny)); + InputStream din = new ByteArrayInputStream(dout.toByteArray()); + Object dobj = MessagePack.unpack(din, tList(TString)); assertEquals(aobj, "msgpack"); assertEquals(bobj, 1); assertEquals(cobj_any, NilType.create()); assertEquals(cobj_obj, null); + assertEquals(dobj, createStringList()); } { @@ -117,5 +133,21 @@ public class TestMessagePackStaticMethods extends TestCase { assertEquals(cobj, null); } } + + private List createStringList() { + List list = new ArrayList(); + list.add("frsyuki"); + list.add("kumofs"); + list.add("gem-compile"); + return list; + } + + private MessagePackObject createStringList_dynamic() { + MessagePackObject[] array = new MessagePackObject[3]; + array[0] = RawType.create("frsyuki"); + array[1] = RawType.create("kumofs"); + array[2] = RawType.create("gem-compile"); + return ArrayType.create(array); + } }