summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMuga Nishizawa <muga@f11vm.(none)>2010-10-21 02:02:23 +0900
committerMuga Nishizawa <muga@f11vm.(none)>2010-10-21 02:02:23 +0900
commitc790735b9ff97535ab5d2b776ae2ccc4ef1a5fc0 (patch)
treeb58568cba2ddb827b9afd55d1c695309375667b8 /java
parent64711e615e78328cee3250e83db0527f1c33c0f7 (diff)
downloadmsgpack-python-c790735b9ff97535ab5d2b776ae2ccc4ef1a5fc0.tar.gz
java: add test programs for org.msgpack.util.codegen.*.java
Diffstat (limited to 'java')
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java101
-rw-r--r--java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java54
-rw-r--r--java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java19
-rw-r--r--java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java15
4 files changed, 73 insertions, 116 deletions
diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java
index 9ba7ec6..677ace9 100644
--- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java
+++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGen.java
@@ -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;
diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java
index f1415d5..0f8cace 100644
--- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java
+++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java
@@ -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());
diff --git a/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java b/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java
index 2e6ea58..d2cf35c 100644
--- a/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java
+++ b/java/src/test/java/org/msgpack/util/codegen/TestPackConvert.java
@@ -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();
}
diff --git a/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java b/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java
index dc56b6c..b7ac7eb 100644
--- a/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java
+++ b/java/src/test/java/org/msgpack/util/codegen/TestPackUnpack.java
@@ -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();
}