mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 23:16:14 +01:00
gio/tests: add a fake implementation of the document portal
This commit is contained in:
parent
457d4c9fe0
commit
27db702ceb
136
gio/tests/fake-document-portal.c
Normal file
136
gio/tests/fake-document-portal.c
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 Canonical Limited
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General
|
||||||
|
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* Authors: James Henstridge <james.henstridge@canonical.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* A stub implementation of xdg-document-portal covering enough to
|
||||||
|
* support g_document_portal_add_documents */
|
||||||
|
|
||||||
|
#include "fake-document-portal-generated.h"
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
on_handle_get_mount_point (FakeDocuments *object,
|
||||||
|
GDBusMethodInvocation *invocation,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
fake_documents_complete_get_mount_point (object,
|
||||||
|
invocation,
|
||||||
|
"/document-portal");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
on_handle_add_full (FakeDocuments *object,
|
||||||
|
GDBusMethodInvocation *invocation,
|
||||||
|
GVariant *o_path_fds,
|
||||||
|
guint flags,
|
||||||
|
const gchar *app_id,
|
||||||
|
const gchar *permissions,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
const gchar **doc_ids = NULL;
|
||||||
|
GVariant *extra_out = NULL;
|
||||||
|
gsize length, i;
|
||||||
|
|
||||||
|
length = g_variant_get_size (o_path_fds);
|
||||||
|
doc_ids = g_new0 (const gchar *, length);
|
||||||
|
for (i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
doc_ids[i] = "document-id";
|
||||||
|
}
|
||||||
|
extra_out = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
|
||||||
|
|
||||||
|
fake_documents_complete_add_full (object,
|
||||||
|
invocation,
|
||||||
|
NULL,
|
||||||
|
doc_ids,
|
||||||
|
extra_out);
|
||||||
|
|
||||||
|
g_free (doc_ids);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_bus_acquired (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
FakeDocuments *interface;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_test_message ("Acquired a message bus connection");
|
||||||
|
|
||||||
|
interface = fake_documents_skeleton_new ();
|
||||||
|
g_signal_connect (interface,
|
||||||
|
"handle-get-mount-point",
|
||||||
|
G_CALLBACK (on_handle_get_mount_point),
|
||||||
|
NULL);
|
||||||
|
g_signal_connect (interface,
|
||||||
|
"handle-add-full",
|
||||||
|
G_CALLBACK (on_handle_add_full),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (interface),
|
||||||
|
connection,
|
||||||
|
"/org/freedesktop/portal/documents",
|
||||||
|
&error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_name_acquired (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_test_message ("Acquired the name %s", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_name_lost (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_test_message ("Lost the name %s", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gint
|
||||||
|
main (gint argc, gchar *argv[])
|
||||||
|
{
|
||||||
|
GMainLoop *loop;
|
||||||
|
guint id;
|
||||||
|
|
||||||
|
loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
|
||||||
|
id = g_bus_own_name (G_BUS_TYPE_SESSION,
|
||||||
|
"org.freedesktop.portal.Documents",
|
||||||
|
G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
|
||||||
|
G_BUS_NAME_OWNER_FLAGS_REPLACE,
|
||||||
|
on_bus_acquired,
|
||||||
|
on_name_acquired,
|
||||||
|
on_name_lost,
|
||||||
|
loop,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_main_loop_run (loop);
|
||||||
|
|
||||||
|
g_bus_unown_name (id);
|
||||||
|
g_main_loop_unref (loop);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -25,8 +25,21 @@ static GTestDBus *singleton = NULL;
|
|||||||
void
|
void
|
||||||
session_bus_up (void)
|
session_bus_up (void)
|
||||||
{
|
{
|
||||||
|
gchar *relative, *servicesdir;
|
||||||
g_assert (singleton == NULL);
|
g_assert (singleton == NULL);
|
||||||
singleton = g_test_dbus_new (G_TEST_DBUS_NONE);
|
singleton = g_test_dbus_new (G_TEST_DBUS_NONE);
|
||||||
|
|
||||||
|
/* We ignore deprecations here so that gdbus-test-codegen-old can
|
||||||
|
* build successfully despite these two functions not being
|
||||||
|
* available in GLib 2.36 */
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
relative = g_test_build_filename (G_TEST_BUILT, "services", NULL);
|
||||||
|
servicesdir = g_canonicalize_filename (relative, NULL);
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
g_free (relative);
|
||||||
|
|
||||||
|
g_test_dbus_add_service_dir (singleton, servicesdir);
|
||||||
|
g_free (servicesdir);
|
||||||
g_test_dbus_up (singleton);
|
g_test_dbus_up (singleton);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,16 +15,20 @@ static void
|
|||||||
fixture_setup (TestFixture *fixture, gconstpointer unused)
|
fixture_setup (TestFixture *fixture, gconstpointer unused)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
gchar *relative, *servicesdir;
|
||||||
|
|
||||||
/* Create the global dbus-daemon for this test suite
|
/* Create the global dbus-daemon for this test suite
|
||||||
*/
|
*/
|
||||||
fixture->dbus = g_test_dbus_new (G_TEST_DBUS_NONE);
|
fixture->dbus = g_test_dbus_new (G_TEST_DBUS_NONE);
|
||||||
|
|
||||||
/* Add the private directory with our in-tree service files,
|
/* Add the private directory with our in-tree service files.
|
||||||
* TEST_SERVICES is defined by the build system to point
|
|
||||||
* to the right directory.
|
|
||||||
*/
|
*/
|
||||||
g_test_dbus_add_service_dir (fixture->dbus, TEST_SERVICES);
|
relative = g_test_build_filename (G_TEST_BUILT, "services", NULL);
|
||||||
|
servicesdir = g_canonicalize_filename (relative, NULL);
|
||||||
|
g_free (relative);
|
||||||
|
|
||||||
|
g_test_dbus_add_service_dir (fixture->dbus, servicesdir);
|
||||||
|
g_free (servicesdir);
|
||||||
|
|
||||||
/* Start the private D-Bus daemon
|
/* Start the private D-Bus daemon
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,6 @@ common_gio_tests_deps = [
|
|||||||
|
|
||||||
test_c_args = [
|
test_c_args = [
|
||||||
'-DG_LOG_DOMAIN="GLib-GIO"',
|
'-DG_LOG_DOMAIN="GLib-GIO"',
|
||||||
'-DTEST_SERVICES="@0@/gio/tests/services"'.format(meson.build_root()),
|
|
||||||
'-DGLIB_MKENUMS="@0@"'.format(glib_mkenums),
|
'-DGLIB_MKENUMS="@0@"'.format(glib_mkenums),
|
||||||
'-DGLIB_COMPILE_SCHEMAS="@0@"'.format(glib_compile_schemas.full_path()),
|
'-DGLIB_COMPILE_SCHEMAS="@0@"'.format(glib_compile_schemas.full_path()),
|
||||||
'-UG_DISABLE_ASSERT',
|
'-UG_DISABLE_ASSERT',
|
||||||
@ -311,6 +310,24 @@ if host_machine.system() != 'windows'
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
fake_document_portal_generated = custom_target('fake-document-portal-generated',
|
||||||
|
input : ['../org.freedesktop.portal.Documents.xml'],
|
||||||
|
output : ['fake-document-portal-generated.h',
|
||||||
|
'fake-document-portal-generated.c'],
|
||||||
|
depend_files : gdbus_codegen_built_files,
|
||||||
|
command : [python, gdbus_codegen,
|
||||||
|
'--interface-prefix', 'org.freedesktop.portal.',
|
||||||
|
'--output-directory', '@OUTDIR@',
|
||||||
|
'--generate-c-code', 'fake-document-portal-generated',
|
||||||
|
'--c-namespace', 'Fake',
|
||||||
|
'@INPUT@'])
|
||||||
|
|
||||||
|
test_extra_programs += {
|
||||||
|
'fake-document-portal' : {
|
||||||
|
'extra_sources': fake_document_portal_generated,
|
||||||
|
},
|
||||||
|
}
|
||||||
endif # have_dbus_daemon
|
endif # have_dbus_daemon
|
||||||
|
|
||||||
# This test is currently unreliable
|
# This test is currently unreliable
|
||||||
@ -781,5 +798,5 @@ if installed_tests_enabled
|
|||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# FIXME: subdir('services')
|
subdir('services')
|
||||||
subdir('modules')
|
subdir('modules')
|
||||||
|
30
gio/tests/services/meson.build
Normal file
30
gio/tests/services/meson.build
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
dbus_service_files = [
|
||||||
|
'org.freedesktop.portal.Documents.service',
|
||||||
|
]
|
||||||
|
|
||||||
|
srcdir_cdata = configuration_data()
|
||||||
|
srcdir_cdata.set('installed_tests_dir', meson.current_build_dir() / '..')
|
||||||
|
|
||||||
|
installed_cdata = configuration_data()
|
||||||
|
installed_cdata.set('installed_tests_dir', installed_tests_execdir)
|
||||||
|
|
||||||
|
foreach service_file : dbus_service_files
|
||||||
|
configure_file(
|
||||||
|
input: service_file + '.in',
|
||||||
|
output: service_file,
|
||||||
|
configuration: srcdir_cdata,
|
||||||
|
)
|
||||||
|
if installed_tests_enabled
|
||||||
|
# Build a second copy of the service file for the installed
|
||||||
|
# version of the tests.
|
||||||
|
configure_file(
|
||||||
|
input: service_file + '.in',
|
||||||
|
output: service_file + '.to-install',
|
||||||
|
configuration: installed_cdata,
|
||||||
|
)
|
||||||
|
install_data(meson.current_build_dir() / service_file + '.to-install',
|
||||||
|
install_dir: installed_tests_execdir / 'services',
|
||||||
|
rename: [service_file],
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
endforeach
|
@ -0,0 +1,3 @@
|
|||||||
|
[D-BUS Service]
|
||||||
|
Name=org.freedesktop.portal.Documents
|
||||||
|
Exec=@installed_tests_dir@/fake-document-portal
|
Loading…
Reference in New Issue
Block a user