summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Johnson <mjj29@adonis.trinhall.cam.ac.uk>2007-07-13 12:50:55 +0100
committerMatthew Johnson <mjj29@adonis.trinhall.cam.ac.uk>2007-07-13 12:50:55 +0100
commit9deb7e1bd86a08b81d3989201f0295f7ad78e0d6 (patch)
tree4c4ca848df76b0932b5bd1401c2d8b70fbe28dc8
parent04d72d4603ca53e0de53d9c2a7a2e6c3cd32c6c5 (diff)
+++ b/changelog
+ * Add test for arrays-of-structs + * Fix arrays-of-structs bug (spotted by Daniel Machado + <cdanielmachado -at- gmail -dot- com>) + * Fix bashism in Makefile
-rw-r--r--AUTHORS1
-rw-r--r--Makefile10
-rw-r--r--changelog4
-rw-r--r--debug.conf14
-rw-r--r--org/freedesktop/dbus/Marshalling.java42
-rw-r--r--org/freedesktop/dbus/test/TestSignalInterface.java4
-rw-r--r--org/freedesktop/dbus/test/test.java50
7 files changed, 89 insertions, 36 deletions
diff --git a/AUTHORS b/AUTHORS
index 04907d9..70ec036 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -14,6 +14,7 @@ Luigi Paioro <luigi -at- lambrate -dot- it>
Roberto Francisco Arroyo Moreno <robfram -at- ugr -dot- es>
Steve Crane <Steve -dot Crane -at- rococosoft -dot- com>
Philippe Marschall <philippe -dot- marschall -at- gmail -dot- com>
+Daniel Machado <cdanielmachado -at- gmail -dot- com>
The included Viewer application was originally written by:
diff --git a/Makefile b/Makefile
index f1859cb..03b4e4c 100644
--- a/Makefile
+++ b/Makefile
@@ -78,13 +78,13 @@ libdbus-java-$(VERSION).jar: .classes
echo "Class-Path: ${JAVAUNIXJARDIR}/unix.jar ${JAVAUNIXJARDIR}/debug-$(DEBUG).jar" > Manifest
(cd classes; $(JAR) -cfm ../$@ ../Manifest org/freedesktop/dbus/*.class org/freedesktop/*.class org/freedesktop/dbus/types/*.class org/freedesktop/dbus/exceptions/*.class)
dbus-java-test-$(VERSION).jar: .testclasses
- echo "Class-Path: ${JARDIR}/libdbus-java-$(VERSION).jar" > Manifest
+ echo "Class-Path: ${JARPREFIX}/libdbus-java-$(VERSION).jar" > Manifest
(cd classes; $(JAR) -cfm ../$@ ../Manifest org/freedesktop/dbus/test/*.class)
dbus-java-viewer-$(VERSION).jar: .viewerclasses
- echo "Class-Path: ${JARDIR}/libdbus-java-$(VERSION).jar" > Manifest
+ echo "Class-Path: ${JARPREFIX}/libdbus-java-$(VERSION).jar" > Manifest
(cd classes; $(JAR) -cfm ../$@ ../Manifest org/freedesktop/dbus/viewer/*.class)
dbus-java-bin-$(VERSION).jar: .binclasses
- echo "Class-Path: ${JARDIR}/libdbus-java-$(VERSION).jar" > Manifest
+ echo "Class-Path: ${JARPREFIX}/libdbus-java-$(VERSION).jar" > Manifest
(cd classes; $(JAR) -cfm ../$@ ../Manifest org/freedesktop/dbus/bin/*.class)
dbus.jar: libdbus-java-$(VERSION).jar
ln -sf $< $@
@@ -183,7 +183,7 @@ check: libdbus-java-$(VERSION).jar dbus-java-test-$(VERSION).jar testbin/DBusDae
export DBUS_SESSION_BUS_ADDRESS=$$(cat address) ;\
if $(MAKE) DBUS_JAVA_FLOATS=true testrun 2> client.log; then export PASS=true; fi ; \
kill $$(cat pid) ; \
- if [[ "$$PASS" == "true" ]]; then exit 0; else exit 1; fi )
+ if [ "$$PASS" = "true" ]; then exit 0; else exit 1; fi )
cross-test-compile: libdbus-java-$(VERSION).jar dbus-java-test-$(VERSION).jar
@@ -217,7 +217,7 @@ profile: libdbus-java-$(VERSION).jar dbus-java-test-$(VERSION).jar testbin/DBusD
export DBUS_SESSION_BUS_ADDRESS=$$(cat address) ;\
if $(MAKE) DBUS_JAVA_FLOATS=true profilerun ; then export PASS=true; fi ; \
kill $$(cat pid) ; \
- if [[ "$$PASS" == "true" ]]; then exit 0; else exit 1; fi )
+ if [ "$$PASS" = "true" ]; then exit 0; else exit 1; fi )
uninstall:
rm -f $(DESTDIR)$(JARPREFIX)/dbus.jar $(DESTDIR)$(JARPREFIX)/dbus-$(VERSION).jar $(DESTDIR)$(JARPREFIX)/dbus-viewer.jar $(DESTDIR)$(JARPREFIX)/dbus-viewer-$(VERSION).jar $(DESTDIR)$(JARPREFIX)/dbus-bin.jar $(DESTDIR)$(JARPREFIX)/dbus-bin-$(VERSION).jar
diff --git a/changelog b/changelog
index d1e0136..f5e4803 100644
--- a/changelog
+++ b/changelog
@@ -5,6 +5,10 @@ Version 2.3:
* Add Class-Path to jar manifests
* Update documentation for nested classes
* Documentation build fix
+ * Add test for arrays-of-structs
+ * Fix arrays-of-structs bug (spotted by Daniel Machado
+ <cdanielmachado -at- gmail -dot- com>)
+ * Fix bashism in Makefile
Version 2.2:
diff --git a/debug.conf b/debug.conf
index 661e30a..904302a 100644
--- a/debug.conf
+++ b/debug.conf
@@ -1,22 +1,22 @@
-org.freedesktop.dbus.MessageReader = INFO
-org.freedesktop.dbus.MessageWriter = INFO
+org.freedesktop.dbus.MessageReader = ERR
+org.freedesktop.dbus.MessageWriter = ERR
org.freedesktop.dbus.Message = ERR
org.freedesktop.dbus.MethodCall = ERR
org.freedesktop.dbus.MethodTuple = ERR
-org.freedesktop.dbus.AbstractConnection = VERBOSE
+org.freedesktop.dbus.AbstractConnection = ERR
org.freedesktop.dbus.AbstractConnection$_thread = ERR
org.freedesktop.dbus.AbstractConnection$_sender = ERR
org.freedesktop.dbus.DirectConnection = ERR
-org.freedesktop.dbus.DBusConnection = VERBOSE
+org.freedesktop.dbus.DBusConnection = ERR
org.freedesktop.dbus.AbstractConnection$1 = ERR
org.freedesktop.dbus.DBusSignal = ERR
-org.freedesktop.dbus.EfficientQueue = VERBOSE
+org.freedesktop.dbus.EfficientQueue = ERR
org.freedesktop.dbus.Transport = ERR
org.freedesktop.dbus.Transport$SASL = ERR
org.freedesktop.dbus.Transport$SASL$Command = ERR
-org.freedesktop.dbus.Marshalling = ERR
+org.freedesktop.dbus.Marshalling = VERBOSE
org.freedesktop.dbus.BusAddress = ERR
-org.freedesktop.dbus.RemoteInvocationHandler = VERBOSE
+org.freedesktop.dbus.RemoteInvocationHandler = ERR
org.freedesktop.dbus.test.cross_test_client = ERR
org.freedesktop.dbus.bin.DBusDaemon = ERR
org.freedesktop.dbus.bin.DBusDaemon$DBusServer = ERR
diff --git a/org/freedesktop/dbus/Marshalling.java b/org/freedesktop/dbus/Marshalling.java
index f9719ee..3e79b59 100644
--- a/org/freedesktop/dbus/Marshalling.java
+++ b/org/freedesktop/dbus/Marshalling.java
@@ -397,6 +397,7 @@ public class Marshalling
@SuppressWarnings("unchecked")
static Object deSerializeParameter(Object parameter, Type type, AbstractConnection conn) throws Exception
{
+ if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing from "+parameter.getClass()+" to "+type.getClass());
if (null == parameter)
return null;
@@ -460,6 +461,10 @@ public class Marshalling
parameter = deSerializeParameters((Object[]) parameter,
ts, conn);
}
+ if (parameter instanceof List) {
+ Type type2 = ((ParameterizedType) type).getActualTypeArguments()[0];
+ parameter = deSerializeParameters((List) parameter, type2, conn);
+ }
// correct floats if appropriate
if (type.equals(Float.class) || type.equals(Float.TYPE))
@@ -501,11 +506,46 @@ public class Marshalling
}
return parameter;
}
+ static List deSerializeParameters(List parameters, Type type, AbstractConnection conn) throws Exception
+ {
+ if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing from "+parameters+" to "+type);
+ if (null == parameters) return null;
+ for (int i = 0; i < parameters.size(); i++) {
+ if (null == parameters.get(i)) continue;
+
+ /* DO NOT DO THIS! IT'S REALLY NOT SUPPORTED!
+ * if (type instanceof Class &&
+ DBusSerializable.class.isAssignableFrom((Class) types[i])) {
+ for (Method m: ((Class) types[i]).getDeclaredMethods())
+ if (m.getName().equals("deserialize")) {
+ Type[] newtypes = m.getGenericParameterTypes();
+ try {
+ Object[] sub = new Object[newtypes.length];
+ System.arraycopy(parameters, i, sub, 0, newtypes.length);
+ sub = deSerializeParameters(sub, newtypes, conn);
+ DBusSerializable sz = (DBusSerializable) ((Class) types[i]).newInstance();
+ m.invoke(sz, sub);
+ Object[] compress = new Object[parameters.length - newtypes.length + 1];
+ System.arraycopy(parameters, 0, compress, 0, i);
+ compress[i] = sz;
+ System.arraycopy(parameters, i + newtypes.length, compress, i+1, parameters.length - i - newtypes.length);
+ parameters = compress;
+ } catch (ArrayIndexOutOfBoundsException AIOOBe) {
+ if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, AIOOBe);
+ throw new DBusException("Not enough elements to create custom object from serialized data ("+(parameters.size()-i)+" < "+(newtypes.length)+")");
+ }
+ }
+ } else*/
+ parameters.set(i, deSerializeParameter(parameters.get(i), type, conn));
+ }
+ return parameters;
+ }
+
static Object[] deSerializeParameters(Object[] parameters, Type[] types, AbstractConnection conn) throws Exception
{
+ if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing from "+parameters+" to "+types);
if (null == parameters) return null;
for (int i = 0; i < parameters.length; i++) {
- if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing "+i+" from "+parameters[i]+" to "+types[i]);
if (null == parameters[i]) continue;
if (types[i] instanceof Class &&
diff --git a/org/freedesktop/dbus/test/TestSignalInterface.java b/org/freedesktop/dbus/test/TestSignalInterface.java
index 4ad3161..ff05174 100644
--- a/org/freedesktop/dbus/test/TestSignalInterface.java
+++ b/org/freedesktop/dbus/test/TestSignalInterface.java
@@ -43,8 +43,8 @@ public interface TestSignalInterface extends DBusInterface
@Description("Test signal with arrays")
public static class TestArraySignal extends DBusSignal
{
- public final TestStruct2 v;
- public TestArraySignal(String path, TestStruct2 v) throws DBusException
+ public final List<TestStruct2> v;
+ public TestArraySignal(String path, List<TestStruct2> v) throws DBusException
{
super(path, v);
this.v = v;
diff --git a/org/freedesktop/dbus/test/test.java b/org/freedesktop/dbus/test/test.java
index fbef58a..c37e40b 100644
--- a/org/freedesktop/dbus/test/test.java
+++ b/org/freedesktop/dbus/test/test.java
@@ -305,27 +305,33 @@ class arraysignalhandler implements DBusSigHandler
/** Handling a signal */
public void handle(DBusSignal s)
{
- if (false == test.done2) {
- test.done2 = true;
- } else {
- test.fail("SignalHandler 2 has been run too many times");
+ try {
+ if (false == test.done2) {
+ test.done2 = true;
+ } else {
+ test.fail("SignalHandler 2 has been run too many times");
+ }
+ TestSignalInterface.TestArraySignal t = (TestSignalInterface.TestArraySignal) s;
+ System.out.println("SignalHandler 2 Running");
+ if (t.v.size() != 1) test.fail("Incorrect TestArraySignal array length: should be 1, actually "+t.v.size());
+ System.out.println("Got a test array signal with Parameters: ");
+ for (String str: t.v.get(0).a)
+ System.out.println("--"+str);
+ System.out.println(t.v.get(0).b.getType());
+ System.out.println(t.v.get(0).b.getValue());
+ if (!(t.v.get(0).b.getValue() instanceof UInt64) ||
+ 567L != ((UInt64) t.v.get(0).b.getValue()).longValue() ||
+ t.v.get(0).a.size() != 5 ||
+ !"hi".equals(t.v.get(0).a.get(0)) ||
+ !"hello".equals(t.v.get(0).a.get(1)) ||
+ !"hej".equals(t.v.get(0).a.get(2)) ||
+ !"hey".equals(t.v.get(0).a.get(3)) ||
+ !"aloha".equals(t.v.get(0).a.get(4)))
+ test.fail("Incorrect TestArraySignal parameters");
+ } catch (Exception e) {
+ e.printStackTrace();
+ test.fail("SignalHandler 2 threw an exception: "+e);
}
- TestSignalInterface.TestArraySignal t = (TestSignalInterface.TestArraySignal) s;
- System.out.println("SignalHandler 2 Running");
- System.out.println("Got a test array signal with Parameters: ");
- for (String str: t.v.a)
- System.out.println("--"+str);
- System.out.println(t.v.b.getType());
- System.out.println(t.v.b.getValue());
- if (!(t.v.b.getValue() instanceof UInt64) ||
- 567L != ((UInt64) t.v.b.getValue()).longValue() ||
- t.v.a.size() != 5 ||
- !"hi".equals(t.v.a.get(0)) ||
- !"hello".equals(t.v.a.get(1)) ||
- !"hej".equals(t.v.a.get(2)) ||
- !"hey".equals(t.v.a.get(3)) ||
- !"aloha".equals(t.v.a.get(4)))
- test.fail("Incorrect TestArraySignal parameters");
}
}
@@ -578,7 +584,9 @@ public class test
System.out.print("Sending Array Signal...");
/** This creates an instance of the Test Signal, with the given object path, signal name and parameters, and broadcasts in on the Bus. */
- serverconn.sendSignal(new TestSignalInterface.TestArraySignal("/Test", new TestStruct2(l, new Variant<UInt64>(new UInt64(567)))));
+ List<TestStruct2> tsl = new Vector<TestStruct2>();
+ tsl.add(new TestStruct2(l, new Variant<UInt64>(new UInt64(567))));
+ serverconn.sendSignal(new TestSignalInterface.TestArraySignal("/Test", tsl));
System.out.println("done");