diff options
author | Matthew Johnson <mjj29@adonis.trinhall.cam.ac.uk> | 2007-07-13 12:50:55 +0100 |
---|---|---|
committer | Matthew Johnson <mjj29@adonis.trinhall.cam.ac.uk> | 2007-07-13 12:50:55 +0100 |
commit | 9deb7e1bd86a08b81d3989201f0295f7ad78e0d6 (patch) | |
tree | 4c4ca848df76b0932b5bd1401c2d8b70fbe28dc8 | |
parent | 04d72d4603ca53e0de53d9c2a7a2e6c3cd32c6c5 (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-- | AUTHORS | 1 | ||||
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | changelog | 4 | ||||
-rw-r--r-- | debug.conf | 14 | ||||
-rw-r--r-- | org/freedesktop/dbus/Marshalling.java | 42 | ||||
-rw-r--r-- | org/freedesktop/dbus/test/TestSignalInterface.java | 4 | ||||
-rw-r--r-- | org/freedesktop/dbus/test/test.java | 50 |
7 files changed, 89 insertions, 36 deletions
@@ -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: @@ -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 @@ -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: @@ -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"); |