Mercurial > hg > Members > sugi > MessagePack-java
diff src/test/java/org/msgpack/TestPackConvert.java @ 0:cb825acd883a
first commit
author | sugi |
---|---|
date | Sat, 18 Oct 2014 15:06:15 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/org/msgpack/TestPackConvert.java Sat Oct 18 15:06:15 2014 +0900 @@ -0,0 +1,363 @@ +package org.msgpack; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import junit.framework.Assert; +import org.junit.Test; +import org.msgpack.packer.Packer; +import org.msgpack.type.ValueFactory; +import org.msgpack.unpacker.BufferUnpacker; +import org.msgpack.unpacker.Converter; +import org.msgpack.type.Value; + + +public class TestPackConvert extends TestSet { + + @Test @Override + public void testBoolean() throws Exception { + super.testBoolean(); + } + + @Override + public void testBoolean(boolean v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isBooleanValue()); + boolean ret = new Converter(value).readBoolean(); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testByte() throws Exception { + super.testByte(); + } + + @Override + public void testByte(byte v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isIntegerValue()); + byte ret = new Converter(value).readByte(); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testShort() throws Exception { + super.testShort(); + } + + @Override + public void testShort(short v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isIntegerValue()); + short ret = new Converter(value).readShort(); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testInteger() throws Exception { + super.testInteger(); + } + + @Override + public void testInteger(int v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isIntegerValue()); + int ret = new Converter(value).readInt(); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testLong() throws Exception { + super.testLong(); + } + + @Override + public void testLong(long v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isIntegerValue()); + long ret = new Converter(value).readLong(); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testFloat() throws Exception { + super.testFloat(); + } + + @Override + public void testFloat(float v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isFloatValue()); + float ret = new Converter(value).readFloat(); + assertEquals(v, ret, 10e-10); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testDouble() throws Exception { + super.testDouble(); + } + + @Override + public void testDouble(double v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isFloatValue()); + double ret = new Converter(value).readDouble(); + assertEquals(v, ret, 10e-10); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testNil() throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.writeNil(); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + assertTrue(value.isNilValue()); + new Converter(value).readNil(); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testBigInteger() throws Exception { + super.testBigInteger(); + } + + @Override + public void testBigInteger(BigInteger v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + BigInteger ret = new Converter(value).read(BigInteger.class); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testString() throws Exception { + super.testString(); + } + + @Override + public void testString(String v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + String ret = new Converter(value).read(String.class); + assertEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testByteArray() throws Exception { + super.testByteArray(); + } + + @Override + public void testByteArray(byte[] v) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + packer.write(v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + Value value = unpacker.readValue(); + byte[] ret = new Converter(value).read(byte[].class); + assertArrayEquals(v, ret); + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testList() throws Exception { + super.testList(); + } + + @Override + public <E> void testList(List<E> v, Class<E> elementClass) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + if (v == null) { + packer.writeNil(); + } else { + packer.writeArrayBegin(v.size()); + for (Object o : v) { + packer.write(o); + } + packer.writeArrayEnd(); + } + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + if (unpacker.trySkipNil()) { + assertEquals(null, v); + return; + } + int size = unpacker.readArrayBegin(); + List<E> ret = new ArrayList<E>(size); + for (int i = 0; i < size; ++i) { + Value value = unpacker.readValue(); + ret.add(new Converter(value).read(elementClass)); + } + unpacker.readArrayEnd(); + assertEquals(v.size(), ret.size()); + Iterator<E> v_iter = v.iterator(); + Iterator<E> ret_iter = ret.iterator(); + while (v_iter.hasNext()) { + assertEquals(v_iter.next(), ret_iter.next()); + } + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test @Override + public void testMap() throws Exception { + super.testMap(); + } + + @Override + public <K, V> void testMap(Map<K, V> v, Class<K> keyElementClass, Class<V> valueElementClass) throws Exception { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + if (v == null) { + packer.writeNil(); + } else { + packer.writeMapBegin(v.size()); + for (Map.Entry<K, V> e : ((Map<K, V>) v).entrySet()) { + packer.write(e.getKey()); + packer.write(e.getValue()); + } + packer.writeMapEnd(); + } + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + unpacker.resetReadByteCount(); + if (unpacker.trySkipNil()) { + assertEquals(null, v); + return; + } + int size = unpacker.readMapBegin(); + Map<K, V> ret = new HashMap<K, V>(size); + for (int i = 0; i < size; ++i) { + Value keyValue = unpacker.readValue(); + K key = new Converter(keyValue).read(keyElementClass); + Value valueValue = unpacker.readValue(); + V value = new Converter(valueValue).read(valueElementClass); + ret.put(key, value); + } + unpacker.readMapEnd(); + assertEquals(v.size(), ret.size()); + for (Map.Entry<K, V> e : ((Map<K, V>) v).entrySet()) { + Object value = ret.get(e.getKey()); + assertEquals(e.getValue(), value); + } + assertEquals(bytes.length, unpacker.getReadByteCount()); + } + + @Test + public void testPackValue() throws IOException { + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + String text = "This is Value"; + Value value = ValueFactory.createRawValue(text); + packer.write(value); + byte[] bytes = out.toByteArray(); + Assert.assertEquals(text.length() + 1,bytes.length); + Assert.assertEquals(0xa0 + text.length(), 0xff & bytes[0]); + } + + @Test + public void testPackValuePassedAsObject() throws IOException{ + MessagePack msgpack = new MessagePack(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + String text = "This is Value"; + Object value = ValueFactory.createRawValue(text); + packer.write(value); // passed as object + byte[] bytes = out.toByteArray(); + Assert.assertEquals(text.length() + 1,bytes.length); + Assert.assertEquals(0xa0 + text.length(), 0xff & bytes[0]); + + } + +}