From 2f23bc7914948c821cadca345679f11ba0432b52 Mon Sep 17 00:00:00 2001 From: Watabiki Naoya Date: Wed, 17 Aug 2011 11:32:39 +0900 Subject: [PATCH] java: add CharacterTemplate --- .../msgpack/template/CharacterTemplate.java | 42 +++++++ .../msgpack/template/TemplateRegistry.java | 2 + src/test/java/org/msgpack/TestSet.java | 16 ++- .../template/TestCharacterTemplate.java | 115 ++++++++++++++++++ 4 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/msgpack/template/CharacterTemplate.java create mode 100644 src/test/java/org/msgpack/template/TestCharacterTemplate.java diff --git a/src/main/java/org/msgpack/template/CharacterTemplate.java b/src/main/java/org/msgpack/template/CharacterTemplate.java new file mode 100644 index 000000000..f65e793a9 --- /dev/null +++ b/src/main/java/org/msgpack/template/CharacterTemplate.java @@ -0,0 +1,42 @@ +package org.msgpack.template; + +import java.io.IOException; +import org.msgpack.MessageTypeException; +import org.msgpack.packer.Packer; +import org.msgpack.unpacker.Unpacker; + +/** + * CharacterTemplate
+ * + * @author watabiki + */ +public class CharacterTemplate extends AbstractTemplate { + + private CharacterTemplate() { } + + @Override + public void write(Packer pk, Character v, boolean required) throws IOException { + if (v == null) { + if (required) { + throw new MessageTypeException("Attempted to write null"); + } + pk.writeNil(); + return; + } + pk.writeInt(v.charValue()); + } + + @Override + public Character read(Unpacker u, Character to, boolean required) throws IOException { + if (!required && u.trySkipNil()) { + return null; + } + return (char) u.readInt(); + } + + static public CharacterTemplate getInstance() { + return instance; + } + + static final CharacterTemplate instance = new CharacterTemplate(); +} diff --git a/src/main/java/org/msgpack/template/TemplateRegistry.java b/src/main/java/org/msgpack/template/TemplateRegistry.java index d235a0628..16830e64e 100644 --- a/src/main/java/org/msgpack/template/TemplateRegistry.java +++ b/src/main/java/org/msgpack/template/TemplateRegistry.java @@ -95,6 +95,8 @@ private void registerTemplates() { register(double.class, DoubleTemplate.getInstance()); register(Double.class, DoubleTemplate.getInstance()); register(BigInteger.class, BigIntegerTemplate.getInstance()); + register(char.class, CharacterTemplate.getInstance()); + register(Character.class, CharacterTemplate.getInstance()); register(boolean[].class, BooleanArrayTemplate.getInstance()); register(short[].class, ShortArrayTemplate.getInstance()); register(int[].class, IntegerArrayTemplate.getInstance()); diff --git a/src/test/java/org/msgpack/TestSet.java b/src/test/java/org/msgpack/TestSet.java index f8ea72fdf..a9820b5a2 100644 --- a/src/test/java/org/msgpack/TestSet.java +++ b/src/test/java/org/msgpack/TestSet.java @@ -25,7 +25,7 @@ public void testBoolean(boolean v) throws Exception { } public void testBooleanArray() throws Exception { - testBooleanArray(null); + testBooleanArray(null); testBooleanArray(new boolean[0]); testBooleanArray(new boolean[] { true }); testBooleanArray(new boolean[] { false }); @@ -278,7 +278,7 @@ public void testNil() throws Exception { } public void testString() throws Exception { - // TODO testString(null); // #MN considering next version + // TODO testString(null); // #MN considering next version testString(""); testString("a"); testString("ab"); @@ -436,4 +436,16 @@ public void testDate() throws Exception { public void testDate(Date v) throws Exception { } + public void testCharacter() throws Exception { + testCharacter(null); + testCharacter('a'); + testCharacter('あ'); + testCharacter((char) 1); + testCharacter(Character.MIN_VALUE); + testCharacter(Character.MAX_VALUE); + } + + public void testCharacter(Character v) throws Exception { + } + } diff --git a/src/test/java/org/msgpack/template/TestCharacterTemplate.java b/src/test/java/org/msgpack/template/TestCharacterTemplate.java new file mode 100644 index 000000000..31ebe092e --- /dev/null +++ b/src/test/java/org/msgpack/template/TestCharacterTemplate.java @@ -0,0 +1,115 @@ +package org.msgpack.template; + +import static org.junit.Assert.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +import org.junit.Test; +import org.msgpack.MessagePack; +import org.msgpack.TestSet; +import org.msgpack.packer.BufferPacker; +import org.msgpack.packer.Packer; +import org.msgpack.unpacker.BufferUnpacker; +import org.msgpack.unpacker.Unpacker; + +public class TestCharacterTemplate { + + @Test + public void testPackUnpack() throws Exception { + new TestPackUnpack().testCharacter(); + } + + @Test + public void testPackBufferUnpack() throws Exception { + new TestPackBufferUnpack().testCharacter(); + } + + @Test + public void testBufferPackBufferUnpack() throws Exception { + new TestBufferPackBufferUnpack().testCharacter(); + } + + @Test + public void testBufferPackUnpack() throws Exception { + new TestBufferPackUnpack().testCharacter(); + } + + private static class TestPackUnpack extends TestSet { + @Test @Override + public void testCharacter() throws Exception { + super.testCharacter(); + } + + @Override + public void testCharacter(Character v) throws Exception { + MessagePack msgpack = new MessagePack(); + Template tmpl = CharacterTemplate.instance; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + tmpl.write(packer, v); + byte[] bytes = out.toByteArray(); + Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes)); + Character ret = tmpl.read(unpacker, null); + assertEquals(v, ret); + } + } + + private static class TestPackBufferUnpack extends TestSet { + @Test @Override + public void testCharacter() throws Exception { + super.testCharacter(); + } + + @Override + public void testCharacter(Character v) throws Exception { + MessagePack msgpack = new MessagePack(); + Template tmpl = CharacterTemplate.instance; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Packer packer = msgpack.createPacker(out); + tmpl.write(packer, v); + byte[] bytes = out.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + Character ret = tmpl.read(unpacker, null); + assertEquals(v, ret); + } + } + + private static class TestBufferPackBufferUnpack extends TestSet { + @Test @Override + public void testCharacter() throws Exception { + super.testCharacter(); + } + + @Override + public void testCharacter(Character v) throws Exception { + MessagePack msgpack = new MessagePack(); + Template tmpl = CharacterTemplate.instance; + BufferPacker packer = msgpack.createBufferPacker(); + tmpl.write(packer, v); + byte[] bytes = packer.toByteArray(); + BufferUnpacker unpacker = msgpack.createBufferUnpacker(bytes); + Character ret = tmpl.read(unpacker, null); + assertEquals(v, ret); + } + } + + private static class TestBufferPackUnpack extends TestSet { + @Test @Override + public void testCharacter() throws Exception { + super.testCharacter(); + } + + @Override + public void testCharacter(Character v) throws Exception { + MessagePack msgpack = new MessagePack(); + Template tmpl = CharacterTemplate.instance; + BufferPacker packer = msgpack.createBufferPacker(); + tmpl.write(packer, v); + byte[] bytes = packer.toByteArray(); + Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes)); + Character ret = tmpl.read(unpacker, null); + assertEquals(v, ret); + } + } +}