java: add test programs for org.msgpack.util.codegen.*.java

This commit is contained in:
Muga Nishizawa 2010-10-21 02:02:23 +09:00
parent 64711e615e
commit c790735b9f
4 changed files with 73 additions and 116 deletions

View File

@ -18,12 +18,10 @@ import javassist.NotFoundException;
import org.msgpack.CustomMessage;
import org.msgpack.CustomPacker;
import org.msgpack.MessageConvertable;
import org.msgpack.MessagePackObject;
import org.msgpack.MessagePackable;
import org.msgpack.MessagePacker;
import org.msgpack.MessageTypeException;
import org.msgpack.MessageUnpackable;
import org.msgpack.Packer;
import org.msgpack.Template;
import org.msgpack.Unpacker;
@ -450,56 +448,6 @@ class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(String.format(STATEMENT_TMPL_UNPACKERMETHODBODY_03, args));
}
private void insertCodeOfUnpackMethodCallForMsgUnpackableType(
StringBuilder sb, Field f, Class<?> c) {
// if (t.fi == null) { t.fi = new Foo(); }
sb.append(KEYWORD_IF);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(VARIABLE_NAME_TARGET);
sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
sb.append(CHAR_NAME_EQUAL);
sb.append(CHAR_NAME_SPACE);
sb.append(KEYWORD_NULL);
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
sb.append(CHAR_NAME_SPACE);
sb.append(VARIABLE_NAME_TARGET);
sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
sb.append(CHAR_NAME_SPACE);
sb.append(KEYWORD_NEW);
sb.append(CHAR_NAME_SPACE);
sb.append(c.getName());
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SEMICOLON);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
sb.append(CHAR_NAME_SPACE);
// insert a right variable // ignore
sb.append(VARIABLE_NAME_PK);
sb.append(CHAR_NAME_DOT);
sb.append(METHOD_NAME_UNPACK);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(MessageUnpackable.class.getName());
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(VARIABLE_NAME_TARGET);
sb.append(CHAR_NAME_DOT);
sb.append(f.getName());
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SEMICOLON);
sb.append(CHAR_NAME_SPACE);
}
private void insertOrdinalEnumUnpackMethodBody(StringBuilder sb,
Class<?> type) {
// Object unpack(Unpacker u) throws IOException, MessageTypeException;
@ -597,55 +545,6 @@ class DynamicCodeGen extends DynamicCodeGenBase implements Constants {
sb.append(String.format(STATEMENT_TMPL_CONVERTMETHODBODY_02, args));
}
private void insertCodeOfMessageConvertCallForMsgConvtblType(
StringBuilder sb, Field f, Class<?> c, int i) {
// if (fi == null) { fi = new Foo_$$_Enhanced(); }
sb.append(KEYWORD_IF);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(f.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
sb.append(CHAR_NAME_EQUAL);
sb.append(CHAR_NAME_SPACE);
sb.append(KEYWORD_NULL);
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_LEFT_CURLY_BRACKET);
sb.append(CHAR_NAME_SPACE);
sb.append(f.getName());
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_EQUAL);
sb.append(CHAR_NAME_SPACE);
sb.append(KEYWORD_NEW);
sb.append(CHAR_NAME_SPACE);
sb.append(c.getName());
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SEMICOLON);
sb.append(CHAR_NAME_SPACE);
sb.append(CHAR_NAME_RIGHT_CURLY_BRACKET);
sb.append(CHAR_NAME_SPACE);
// ((MessageConvertable)f_i).messageConvert(ary[i]);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(MessageConvertable.class.getName());
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(f.getName());
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_DOT);
sb.append(METHOD_NAME_MSGCONVERT);
sb.append(CHAR_NAME_LEFT_PARENTHESIS);
sb.append(VARIABLE_NAME_ARRAY);
sb.append(CHAR_NAME_LEFT_SQUARE_BRACKET);
sb.append(i);
sb.append(CHAR_NAME_RIGHT_SQUARE_BRACKET);
sb.append(CHAR_NAME_RIGHT_PARENTHESIS);
sb.append(CHAR_NAME_SEMICOLON);
sb.append(CHAR_NAME_SPACE);
}
private void insertOrdinalEnumConvertMethodBody(StringBuilder sb,
Class<?> type) {
// Object convert(MessagePackObject mpo) throws MessageTypeException;

View File

@ -1,5 +1,6 @@
package org.msgpack.util.codegen;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Method;
@ -22,9 +23,13 @@ import javassist.NotFoundException;
import org.msgpack.CustomConverter;
import org.msgpack.CustomMessage;
import org.msgpack.MessageConvertable;
import org.msgpack.MessagePackObject;
import org.msgpack.MessageTypeException;
import org.msgpack.MessageUnpackable;
import org.msgpack.Template;
import org.msgpack.Templates;
import org.msgpack.Unpacker;
import org.msgpack.annotation.MessagePackDelegate;
import org.msgpack.annotation.MessagePackMessage;
import org.msgpack.annotation.MessagePackOrdinalEnum;
@ -40,6 +45,50 @@ public class DynamicCodeGenBase implements Constants {
void setNullCheck(boolean nullCheck);
}
public static class MessageUnpackableConvertableTemplate implements
Template {
private Class<?> type;
public MessageUnpackableConvertableTemplate(Class<?> type) {
this.type = type;
}
@Override
public Object unpack(Unpacker unpacker) throws IOException,
MessageTypeException {
try {
MessageUnpackable obj = (MessageUnpackable) type.newInstance();
obj.messageUnpack(unpacker);
return obj;
} catch (ClassCastException e) {
throw new MessageTypeException(e.getMessage(), e);
} catch (InstantiationException e) {
throw new MessageTypeException(e.getMessage(), e);
} catch (IllegalAccessException e) {
throw new MessageTypeException(e.getMessage(), e);
}
}
@Override
public Object convert(MessagePackObject from)
throws MessageTypeException {
try {
MessageConvertable obj = (MessageConvertable) type
.newInstance();
obj.messageConvert(from);
return obj;
} catch (ClassCastException e) {
throw new MessageTypeException(e.getMessage(), e);
} catch (InstantiationException e) {
throw new MessageTypeException(e.getMessage(), e);
} catch (IllegalAccessException e) {
throw new MessageTypeException(e.getMessage(), e);
}
}
}
public static class NullCheckerImpl implements NullChecker {
public boolean _$$_nullCheck = true;
@ -317,6 +366,11 @@ public class DynamicCodeGenBase implements Constants {
Template tmpl = DynamicOrdinalEnumTemplate.create(c);
CustomMessage.registerTemplate(c, tmpl);
return tmpl;
} else if (MessageConvertable.class.isAssignableFrom(c)
|| MessageUnpackable.class.isAssignableFrom(c)) {
Template tmpl = new MessageUnpackableConvertableTemplate(c);
CustomMessage.registerTemplate(c, tmpl);
return tmpl;
} else {
throw new MessageTypeException("Type error: "
+ ((Class<?>) t).getName());

View File

@ -1012,8 +1012,8 @@ public class TestPackConvert extends TestCase {
}
}
//@Test
public void XtestMessagePackableUnpackableClass00() throws Exception {
@Test
public void testMessagePackableUnpackableClass00() throws Exception {
BaseMessagePackableConvertableClass src = new BaseMessagePackableConvertableClass();
MessagePackableConvertableClass src1 = new MessagePackableConvertableClass();
List<MessagePackableConvertableClass> src2 = new ArrayList<MessagePackableConvertableClass>();
@ -1045,8 +1045,8 @@ public class TestPackConvert extends TestCase {
assertFalse(it.hasNext());
}
//@Test
public void XtestMessagePackableUnpackableClass01() throws Exception {
@Test
public void testMessagePackableUnpackableClass01() throws Exception {
BaseMessagePackableConvertableClass src = new BaseMessagePackableConvertableClass();
src.f0 = null;
src.f1 = 1;
@ -1070,8 +1070,8 @@ public class TestPackConvert extends TestCase {
assertFalse(it.hasNext());
}
//@Test
public void XtestMessagePackableUnpackableClass02() throws Exception {
@Test
public void testMessagePackableUnpackableClass02() throws Exception {
BaseMessagePackableConvertableClass src = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
MessagePacker packer = DynamicPacker
@ -1113,17 +1113,18 @@ public class TestPackConvert extends TestCase {
@Override
public void messagePack(Packer packer) throws IOException {
packer.packArray(2);
packer.pack(f0);
packer.pack(f1);
}
@Override
public void messageConvert(MessagePackObject obj)
public void messageConvert(MessagePackObject from)
throws MessageTypeException {
if (obj.isNil()) {
if (from.isNil()) {
return;
}
MessagePackObject[] objs = obj.asArray();
MessagePackObject[] objs = from.asArray();
f0 = objs[0].asInt();
f1 = objs[1].asInt();
}

View File

@ -890,8 +890,8 @@ public class TestPackUnpack extends TestCase {
}
}
//@Test
public void XtestMessagePackableUnpackableClass00() throws Exception {
@Test
public void testMessagePackableUnpackableClass00() throws Exception {
BaseMessagePackableUnpackableClass src = new BaseMessagePackableUnpackableClass();
MessagePackableUnpackableClass src1 = new MessagePackableUnpackableClass();
List<MessagePackableUnpackableClass> src2 = new ArrayList<MessagePackableUnpackableClass>();
@ -900,6 +900,7 @@ public class TestPackUnpack extends TestCase {
src.f0 = src1;
src.f1 = 1;
src2.add(src1);
src.f2 = src2;
ByteArrayOutputStream out = new ByteArrayOutputStream();
MessagePacker packer = DynamicPacker
.create(BaseMessagePackableUnpackableClass.class);
@ -917,8 +918,8 @@ public class TestPackUnpack extends TestCase {
assertEquals(src.f2.get(0).f1, dst.f2.get(0).f1);
}
//@Test
public void XtestMessagePackableUnpackableClass01() throws Exception {
@Test
public void testMessagePackableUnpackableClass01() throws Exception {
BaseMessagePackableUnpackableClass src = new BaseMessagePackableUnpackableClass();
src.f0 = null;
src.f1 = 1;
@ -937,8 +938,8 @@ public class TestPackUnpack extends TestCase {
assertEquals(src.f2, dst.f2);
}
//@Test
public void XtestMessagePackableUnpackableClass02() throws Exception {
@Test
public void testMessagePackableUnpackableClass02() throws Exception {
BaseMessagePackableUnpackableClass src = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
MessagePacker packer = DynamicPacker
@ -975,6 +976,7 @@ public class TestPackUnpack extends TestCase {
@Override
public void messagePack(Packer packer) throws IOException {
packer.packArray(2);
packer.pack(f0);
packer.pack(f1);
}
@ -985,6 +987,7 @@ public class TestPackUnpack extends TestCase {
if (unpacker.tryUnpackNull()) {
return;
}
unpacker.unpackArray();
f0 = unpacker.unpackInt();
f1 = unpacker.unpackInt();
}