From bb8736c968eb450b4d4b40736933844a6b915bf1 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 3 Aug 2005 23:21:49 +0000 Subject: 2005-08-03 Colin Walters * glib/dbus-gobject.c: Add tests on hardcoded object info; this should catch any incompatible changes accidentally made. --- ChangeLog | 5 ++ glib/dbus-gobject.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+) diff --git a/ChangeLog b/ChangeLog index 40e225d7..15300f41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-08-03 Colin Walters + + * glib/dbus-gobject.c: Add tests on hardcoded object info; this should + catch any incompatible changes accidentally made. + 2005-08-03 Havoc Pennington * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): fix diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c index 9fddf5fe..56042520 100644 --- a/glib/dbus-gobject.c +++ b/glib/dbus-gobject.c @@ -1931,6 +1931,57 @@ const char * _dbus_gobject_get_path (GObject *obj) #ifdef DBUS_BUILD_TESTS #include +static void +_dummy_function (void) +{ +} + +/* Data structures copied from one generated by current dbus-binding-tool; + * we need to support this layout forever + */ +static const DBusGMethodInfo dbus_glib_internal_test_methods[] = { + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 0 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 49 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 117 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 191 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 270 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 320 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 391 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 495 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 623 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 693 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 765 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 838 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 911 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 988 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1064 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1140 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1204 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1278 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1347 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1408 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1460 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1533 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1588 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1647 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1730 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1784 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1833 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1895 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1947 }, + { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1999 }, +}; + +const DBusGObjectInfo dbus_glib_internal_test_object_info = { + 0, + dbus_glib_internal_test_methods, + 30, +"org.freedesktop.DBus.Tests.MyObject\0DoNothing\0S\0\0org.freedesktop.DBus.Tests.MyObject\0Increment\0S\0x\0I\0u\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0IncrementRetval\0S\0x\0I\0u\0arg1\0O\0F\0R\0u\0\0org.freedesktop.DBus.Tests.MyObject\0IncrementRetvalError\0S\0x\0I\0u\0arg1\0O\0F\0E\0u\0\0org.freedesktop.DBus.Tests.MyObject\0ThrowError\0S\0\0org.freedesktop.DBus.Tests.MyObject\0Uppercase\0S\0arg0\0I\0s\0arg1\0O\0F\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0ManyArgs\0S\0x\0I\0u\0str\0I\0s\0trouble\0I\0d\0d_ret\0O\0F\0N\0d\0str_ret\0O\0F\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0ManyReturn\0S\0arg0\0O\0F\0N\0u\0arg1\0O\0F\0N\0s\0arg2\0O\0F\0N\0i\0arg3\0O\0F\0N\0u\0arg4\0O\0F\0N\0u\0arg5\0O\0C\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0Stringify\0S\0val\0I\0v\0arg1\0O\0F\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0Unstringify\0S\0val\0I\0s\0arg1\0O\0F\0N\0v\0\0org.freedesktop.DBus.Tests.MyObject\0Recursive1\0S\0arg0\0I\0au\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0Recursive2\0S\0arg0\0I\0u\0arg1\0O\0F\0N\0au\0\0org.freedesktop.DBus.Tests.MyObject\0ManyUppercase\0S\0arg0\0I\0as\0arg1\0O\0F\0N\0as\0\0org.freedesktop.DBus.Tests.MyObject\0StrHashLen\0S\0arg0\0I\0a{ss}\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0SendCar\0S\0arg0\0I\0(suv)\0arg1\0O\0F\0N\0(uo)\0\0org.freedesktop.DBus.Tests.MyObject\0GetHash\0S\0arg0\0O\0F\0N\0a{ss}\0\0org.freedesktop.DBus.Tests.MyObject\0RecArrays\0S\0val\0I\0aas\0arg1\0O\0F\0N\0aau\0\0org.freedesktop.DBus.Tests.MyObject\0Objpath\0S\0arg0\0I\0o\0arg1\0O\0C\0N\0o\0\0org.freedesktop.DBus.Tests.MyObject\0GetObjs\0S\0arg0\0O\0F\0N\0ao\0\0org.freedesktop.DBus.Tests.MyObject\0IncrementVal\0S\0\0org.freedesktop.DBus.Tests.MyObject\0AsyncIncrement\0A\0x\0I\0u\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0AsyncThrowError\0A\0\0org.freedesktop.DBus.Tests.MyObject\0GetVal\0S\0arg0\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0ManyStringify\0S\0arg0\0I\0a{sv}\0arg1\0O\0F\0N\0a{sv}\0\0org.freedesktop.DBus.Tests.MyObject\0EmitFrobnicate\0S\0\0org.freedesktop.DBus.Tests.MyObject\0Terminate\0S\0\0org.freedesktop.DBus.Tests.FooObject\0GetValue\0S\0arg0\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.FooObject\0EmitSignals\0S\0\0org.freedesktop.DBus.Tests.FooObject\0EmitSignal2\0S\0\0org.freedesktop.DBus.Tests.FooObject\0Terminate\0S\0\0\0", +"org.freedesktop.DBus.Tests.MyObject\0Frobnicate\0org.freedesktop.DBus.Tests.FooObject\0Sig0\0org.freedesktop.DBus.Tests.FooObject\0Sig1\0org.freedesktop.DBus.Tests.FooObject\0Sig2\0\0", +"\0" +}; + + /** * @ingroup DBusGLibInternals * Unit test for GLib GObject integration ("skeletons") @@ -1940,6 +1991,16 @@ gboolean _dbus_gobject_test (const char *test_data_dir) { int i; + const char *arg; + const char *arg_name; + gboolean arg_in; + gboolean constval; + RetvalType retval; + const char *arg_signature; + const char *sigdata; + const char *iface; + const char *signame; + static struct { const char *wincaps; const char *uscore; } name_pairs[] = { { "SetFoo", "set_foo" }, { "Foo", "foo" }, @@ -1950,6 +2011,95 @@ _dbus_gobject_test (const char *test_data_dir) /* { "FrobateUIHandler", "frobate_ui_handler" } */ }; + /* Test lookup in our hardcoded object info; if these tests fail + * then it likely means you changed the generated object info in an + * incompatible way and broke the lookup functions. In that case + * you need to bump the version and use a new structure instead. */ + /* DoNothing */ + arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info, + &(dbus_glib_internal_test_methods[0])); + g_assert (*arg == '\0'); + + /* Increment */ + arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info, + &(dbus_glib_internal_test_methods[1])); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (!strcmp (arg_name, "x")); + g_assert (arg_in == TRUE); + g_assert (!strcmp (arg_signature, "u")); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (arg_in == FALSE); + g_assert (retval == RETVAL_NONE); + g_assert (!strcmp (arg_signature, "u")); + g_assert (*arg == '\0'); + + /* IncrementRetval */ + arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info, + &(dbus_glib_internal_test_methods[2])); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (!strcmp (arg_name, "x")); + g_assert (arg_in == TRUE); + g_assert (!strcmp (arg_signature, "u")); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (retval == RETVAL_NOERROR); + g_assert (arg_in == FALSE); + g_assert (!strcmp (arg_signature, "u")); + g_assert (*arg == '\0'); + + /* IncrementRetvalError */ + arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info, + &(dbus_glib_internal_test_methods[3])); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (!strcmp (arg_name, "x")); + g_assert (arg_in == TRUE); + g_assert (!strcmp (arg_signature, "u")); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (retval == RETVAL_ERROR); + g_assert (arg_in == FALSE); + g_assert (!strcmp (arg_signature, "u")); + g_assert (*arg == '\0'); + + /* Stringify */ + arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info, + &(dbus_glib_internal_test_methods[8])); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (!strcmp (arg_name, "val")); + g_assert (arg_in == TRUE); + g_assert (!strcmp (arg_signature, "v")); + g_assert (*arg != '\0'); + arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature); + g_assert (retval == RETVAL_NONE); + g_assert (arg_in == FALSE); + g_assert (!strcmp (arg_signature, "s")); + g_assert (*arg == '\0'); + + sigdata = dbus_glib_internal_test_object_info.exported_signals; + g_assert (*sigdata != '\0'); + sigdata = propsig_iterate (sigdata, &iface, &signame); + g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.MyObject")); + g_assert (!strcmp (signame, "Frobnicate")); + g_assert (*sigdata != '\0'); + sigdata = propsig_iterate (sigdata, &iface, &signame); + g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.FooObject")); + g_assert (!strcmp (signame, "Sig0")); + g_assert (*sigdata != '\0'); + sigdata = propsig_iterate (sigdata, &iface, &signame); + g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.FooObject")); + g_assert (!strcmp (signame, "Sig1")); + g_assert (*sigdata != '\0'); + sigdata = propsig_iterate (sigdata, &iface, &signame); + g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.FooObject")); + g_assert (!strcmp (signame, "Sig2")); + g_assert (*sigdata == '\0'); + + i = 0; while (i < (int) G_N_ELEMENTS (name_pairs)) { -- cgit