Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions src/main/java/org/msgpack/template/CharacterTemplate.java
Original file line number Diff line number Diff line change
@@ -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<br/>
*
* @author watabiki
*/
public class CharacterTemplate extends AbstractTemplate<Character> {

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();
}
2 changes: 2 additions & 0 deletions src/main/java/org/msgpack/template/TemplateRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
16 changes: 14 additions & 2 deletions src/test/java/org/msgpack/TestSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 });
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -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 {
}

}
115 changes: 115 additions & 0 deletions src/test/java/org/msgpack/template/TestCharacterTemplate.java
Original file line number Diff line number Diff line change
@@ -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<Character> 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<Character> 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<Character> 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<Character> 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);
}
}
}