diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h
index 28b8022..6fe09b7 100644
--- a/gdbus/gdbus.h
+++ b/gdbus/gdbus.h
enum GDBusFlags {
G_DBUS_FLAG_ENABLE_EXPERIMENTAL = (1 << 0),
+ G_DBUS_FLAG_ENABLE_TESTING = (1 << 1),
};
enum GDBusMethodFlags {
G_DBUS_METHOD_FLAG_NOREPLY = (1 << 1),
G_DBUS_METHOD_FLAG_ASYNC = (1 << 2),
G_DBUS_METHOD_FLAG_EXPERIMENTAL = (1 << 3),
+ G_DBUS_METHOD_FLAG_TESTING = (1 << 4),
};
enum GDBusSignalFlags {
G_DBUS_SIGNAL_FLAG_DEPRECATED = (1 << 0),
G_DBUS_SIGNAL_FLAG_EXPERIMENTAL = (1 << 1),
+ G_DBUS_SIGNAL_FLAG_TESTING = (1 << 2),
};
enum GDBusPropertyFlags {
G_DBUS_PROPERTY_FLAG_DEPRECATED = (1 << 0),
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL = (1 << 1),
+ G_DBUS_PROPERTY_FLAG_TESTING = (1 << 2),
};
enum GDBusSecurityFlags {
.function = _function, \
.flags = G_DBUS_METHOD_FLAG_ASYNC | G_DBUS_METHOD_FLAG_EXPERIMENTAL
+#define GDBUS_TESTING_METHOD(_name, _in_args, _out_args, _function) \
+ .name = _name, \
+ .in_args = _in_args, \
+ .out_args = _out_args, \
+ .function = _function, \
+ .flags = G_DBUS_METHOD_FLAG_TESTING
+
+#define GDBUS_TESTING_ASYNC_METHOD(_name, _in_args, _out_args, _function) \
+ .name = _name, \
+ .in_args = _in_args, \
+ .out_args = _out_args, \
+ .function = _function, \
+ .flags = G_DBUS_METHOD_FLAG_ASYNC | G_DBUS_METHOD_FLAG_TESTING
+
#define GDBUS_NOREPLY_METHOD(_name, _in_args, _out_args, _function) \
.name = _name, \
.in_args = _in_args, \
.args = _args, \
.flags = G_DBUS_SIGNAL_FLAG_EXPERIMENTAL
+#define GDBUS_TESTING_SIGNAL(_name, _args) \
+ .name = _name, \
+ .args = _args, \
+ .flags = G_DBUS_SIGNAL_FLAG_EXPERIMENTAL
+
void g_dbus_set_flags(int flags);
int g_dbus_get_flags(void);
diff --git a/gdbus/object.c b/gdbus/object.c
index f7c8c2b..72d2d46 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
#include <stdio.h>
#include <string.h>
+#include <stdbool.h>
#include <glib.h>
#include <dbus/dbus.h>
return !(global_flags & G_DBUS_FLAG_ENABLE_EXPERIMENTAL);
}
+static bool check_testing(int flags, int flag)
+{
+ if (!(flags & flag))
+ return false;
+
+ return !(global_flags & G_DBUS_FLAG_ENABLE_TESTING);
+}
+
static void generate_interface_xml(GString *gstr, struct interface_data *iface)
{
const GDBusMethodTable *method;
G_DBUS_METHOD_FLAG_EXPERIMENTAL))
continue;
+ if (check_testing(method->flags, G_DBUS_METHOD_FLAG_TESTING))
+ continue;
+
g_string_append_printf(gstr, "<method name=\"%s\">",
method->name);
print_arguments(gstr, method->in_args, "in");
G_DBUS_SIGNAL_FLAG_EXPERIMENTAL))
continue;
+ if (check_testing(signal->flags, G_DBUS_SIGNAL_FLAG_TESTING))
+ continue;
+
g_string_append_printf(gstr, "<signal name=\"%s\">",
signal->name);
print_arguments(gstr, signal->args, NULL);
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL))
continue;
+ if (check_testing(property->flags,
+ G_DBUS_PROPERTY_FLAG_TESTING))
+ continue;
+
g_string_append_printf(gstr, "<property name=\"%s\""
" type=\"%s\" access=\"%s%s\">",
property->name, property->type,
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL))
continue;
+ if (check_testing(p->flags, G_DBUS_PROPERTY_FLAG_TESTING))
+ continue;
+
if (p->get == NULL)
continue;
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL))
break;
+ if (check_testing(p->flags, G_DBUS_PROPERTY_FLAG_TESTING))
+ break;
+
return p;
}
G_DBUS_METHOD_FLAG_EXPERIMENTAL))
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ if (check_testing(method->flags, G_DBUS_METHOD_FLAG_TESTING))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
if (g_dbus_args_have_signature(method->in_args,
message) == FALSE)
continue;
if (!check_experimental(method->flags,
G_DBUS_METHOD_FLAG_EXPERIMENTAL))
goto done;
+
+ if (!check_testing(method->flags, G_DBUS_METHOD_FLAG_TESTING))
+ goto done;
}
for (signal = signals; signal && signal->name; signal++) {
if (!check_experimental(signal->flags,
G_DBUS_SIGNAL_FLAG_EXPERIMENTAL))
goto done;
+ if (!check_testing(signal->flags, G_DBUS_SIGNAL_FLAG_TESTING))
+ goto done;
}
for (property = properties; property && property->name; property++) {
if (!check_experimental(property->flags,
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL))
goto done;
+ if (!check_testing(property->flags,
+ G_DBUS_PROPERTY_FLAG_TESTING))
+ goto done;
}
/* Nothing to register */