From 75439298f88b5a56130cd1fc03c944f0326471e5 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 21 Dec 2011 21:45:16 +0100 Subject: [PATCH] Add tests for GResource --- gio/tests/Makefile.am | 32 +++- gio/tests/resourceplugin.c | 18 ++ gio/tests/resources.c | 436 ++++++++++++++++++++++++++++++++++++++++++ gio/tests/test.gresource.xml | 10 + gio/tests/test1.txt | 1 + gio/tests/test2.gresource.xml | 6 + gio/tests/test2.txt | 1 + gio/tests/test3.gresource.xml | 6 + gio/tests/test3.txt | 1 + gio/tests/test4.gresource.xml | 6 + 10 files changed, 516 insertions(+), 1 deletion(-) create mode 100644 gio/tests/resourceplugin.c create mode 100644 gio/tests/resources.c create mode 100644 gio/tests/test.gresource.xml create mode 100644 gio/tests/test1.txt create mode 100644 gio/tests/test2.gresource.xml create mode 100644 gio/tests/test2.txt create mode 100644 gio/tests/test3.gresource.xml create mode 100644 gio/tests/test3.txt create mode 100644 gio/tests/test4.gresource.xml diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am index 7c7bded..55d9214 100644 --- a/gio/tests/Makefile.am +++ b/gio/tests/Makefile.am @@ -59,6 +59,7 @@ TEST_PROGS += \ network-monitor \ fileattributematcher \ gmenumodel \ + resources \ $(NULL) if OS_UNIX @@ -392,6 +393,9 @@ gdbus_connection_flush_helper_LDADD = $(progs_ldadd) appinfo_SOURCES = appinfo.c appinfo_LDADD = $(progs_ldadd) +resources_SOURCES = resources.c test_resources.c test_resources2.c test_resources2.h +resources_LDADD = $(progs_ldadd) + appinfo_test_SOURCES = appinfo-test.c appinfo_test_LDADD = $(progs_ldadd) @@ -560,15 +564,39 @@ EXTRA_DIST += \ cert-key.pem \ cert-list.pem \ nothing.pem \ + test.gresource.xml \ + test2.gresource.xml \ $(NULL) -MISC_STUFF = test.mo +MISC_STUFF = test.mo test.gresource test.mo: de.po $(MSGFMT) -o test.mo $(srcdir)/de.po; \ $(MKDIR_P) de/LC_MESSAGES; \ cp -f test.mo de/LC_MESSAGES +BUILT_SOURCES += test_resources.c test_resources2.c test_resources2.h +test_resources.c: test2.gresource.xml test1.txt + $(top_builddir)/gio/glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-source --c-name _g_test1 $(srcdir)/test2.gresource.xml + +test_resources2.c: test3.gresource.xml test1.txt + $(top_builddir)/gio/glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-source --c-name _g_test2 --manual-register $(srcdir)/test3.gresource.xml + +test_resources2.h: test3.gresource.xml + $(top_builddir)/gio/glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-header --c-name _g_test2 --manual-register $(srcdir)/test3.gresource.xml + +plugin_resources.c: test4.gresource.xml test1.txt + $(top_builddir)/gio/glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-source --c-name _g_plugin $(srcdir)/test4.gresource.xml + +test.gresource: test.gresource.xml test1.txt test2.txt test3.txt + $(top_builddir)/gio/glib-compile-resources --target=$@ --sourcedir=$(srcdir) $(srcdir)/test.gresource.xml + +noinst_LTLIBRARIES = libresourceplugin.la + +libresourceplugin_la_SOURCES = resourceplugin.c plugin_resources.c +libresourceplugin_la_LDFLAGS = $(G_MODULE_LDFLAGS) -avoid-version -module $(no_undefined) -rpath $(libdir) +libresourceplugin_la_LIBADD = $(G_MODULE_LIBS) + CLEANFILES = gdbus-test-codegen-generated.[ch] gdbus-test-codegen-generated-doc-*.xml DISTCLEANFILES = \ @@ -576,6 +604,8 @@ DISTCLEANFILES = \ org.gtk.test.enums.xml \ de/LC_MESSAGES/test.mo \ test.mo \ + test.gresource \ + test_resources.c \ gsettings.store \ gschemas.compiled \ schema-source/gschemas.compiled diff --git a/gio/tests/resourceplugin.c b/gio/tests/resourceplugin.c new file mode 100644 index 0000000..b66d541 --- /dev/null +++ b/gio/tests/resourceplugin.c @@ -0,0 +1,18 @@ +#include + +void +g_io_module_load (GIOModule *module) +{ +} + +void +g_io_module_unload (GIOModule *module) +{ +} + +char ** +g_io_module_query (void) +{ + return NULL; +} + diff --git a/gio/tests/resources.c b/gio/tests/resources.c new file mode 100644 index 0000000..ed1adc6 --- /dev/null +++ b/gio/tests/resources.c @@ -0,0 +1,436 @@ +/* GLib testing framework examples and tests + * + * Copyright (C) 2011 Red Hat, Inc. + * + * 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 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, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include "test_resources2.h" + +static void +test_resource (GResource *resource) +{ + GError *error = NULL; + gboolean found, success; + gsize size; + guint32 flags; + GBytes *data; + char **children; + GInputStream *in; + char buffer[128]; + + found = g_resource_get_info (resource, + "/not/there", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (!found); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); + + found = g_resource_get_info (resource, + "/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == (G_RESOURCE_FLAGS_COMPRESSED)); + + found = g_resource_get_info (resource, + "/a_prefix/test2.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + found = g_resource_get_info (resource, + "/a_prefix/test2-alias.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + data = g_resource_lookup_data (resource, + "/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test1\n"); + g_assert_no_error (error); + g_bytes_unref (data); + + in = g_resource_open_stream (resource, + "/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (in != NULL); + g_assert_no_error (error); + + success = g_input_stream_read_all (in, buffer, sizeof (buffer) - 1, + &size, + NULL, &error); + g_assert (success); + g_assert_no_error (error); + g_assert (size == 6); + buffer[size] = 0; + g_assert_cmpstr (buffer, ==, "test1\n"); + + g_input_stream_close (in, NULL, NULL); + + data = g_resource_lookup_data (resource, + "/a_prefix/test2.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test2\n"); + g_bytes_unref (data); + + data = g_resource_lookup_data (resource, + "/a_prefix/test2-alias.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test2\n"); + g_bytes_unref (data); + + children = g_resource_enumerate_children (resource, + "/not/here", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (children == NULL); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); + + children = g_resource_enumerate_children (resource, + "/a_prefix", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (children != NULL); + g_assert_no_error (error); + g_assert (g_strv_length (children) == 2); + g_strfreev (children); +} + +static void +test_resource_file (void) +{ + GResource *resource; + GError *error = NULL; + + resource = g_resource_load ("not-there", &error); + g_assert (resource == NULL); + g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT); + g_clear_error (&error); + + resource = g_resource_load ("test.gresource", &error); + g_assert (resource != NULL); + g_assert_no_error (error); + + test_resource (resource); + g_resource_unref (resource); +} + +static void +test_resource_data (void) +{ + GResource *resource; + GError *error = NULL; + gboolean loaded_file; + char *content; + gsize content_size; + GBytes *data; + + loaded_file = g_file_get_contents ("test.gresource", &content, &content_size, + NULL); + g_assert (loaded_file); + + data = g_bytes_new_take (content, content_size); + resource = g_resource_new_from_data (data, &error); + g_assert (resource != NULL); + g_assert_no_error (error); + + test_resource (resource); + + g_resource_unref (resource); +} + +static void +test_resource_registred (void) +{ + GResource *resource; + GError *error = NULL; + gboolean found, success; + gsize size; + guint32 flags; + GBytes *data; + char **children; + GInputStream *in; + char buffer[128]; + + resource = g_resource_load ("test.gresource", &error); + g_assert (resource != NULL); + g_assert_no_error (error); + + found = g_resources_get_info ("/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (!found); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); + + g_resources_register (resource); + + found = g_resources_get_info ("/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == (G_RESOURCE_FLAGS_COMPRESSED)); + + found = g_resources_get_info ("/a_prefix/test2.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + found = g_resources_get_info ("/a_prefix/test2-alias.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + data = g_resources_lookup_data ("/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test1\n"); + g_assert_no_error (error); + g_bytes_unref (data); + + in = g_resources_open_stream ("/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (in != NULL); + g_assert_no_error (error); + + success = g_input_stream_read_all (in, buffer, sizeof (buffer) - 1, + &size, + NULL, &error); + g_assert (success); + g_assert_no_error (error); + g_assert (size == 6); + buffer[size] = 0; + g_assert_cmpstr (buffer, ==, "test1\n"); + + g_input_stream_close (in, NULL, NULL); + + + data = g_resources_lookup_data ("/a_prefix/test2.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test2\n"); + g_bytes_unref (data); + + data = g_resources_lookup_data ("/a_prefix/test2-alias.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test2\n"); + g_bytes_unref (data); + + children = g_resources_enumerate_children ("/not/here", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (children == NULL); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); + + children = g_resources_enumerate_children ("/a_prefix", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (children != NULL); + g_assert_no_error (error); + g_assert (g_strv_length (children) == 2); + + g_resources_unregister (resource); + + found = g_resources_get_info ("/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (!found); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); +} + +static void +test_resource_automatic (void) +{ + GError *error = NULL; + gboolean found; + gsize size; + guint32 flags; + GBytes *data; + + found = g_resources_get_info ("/auto_loaded/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + data = g_resources_lookup_data ("/auto_loaded/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test1\n"); + g_bytes_unref (data); +} + +static void +test_resource_manual (void) +{ + GError *error = NULL; + gboolean found; + gsize size; + guint32 flags; + GBytes *data; + + found = g_resources_get_info ("/manual_loaded/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + data = g_resources_lookup_data ("/manual_loaded/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test1\n"); + g_bytes_unref (data); +} + +static void +test_resource_module (void) +{ + GIOModule *module; + gboolean found; + gsize size; + guint32 flags; + GBytes *data; + GError *error; + + if (g_module_supported ()) + { + char *dir, *path; + + dir = g_get_current_dir (); + + path = g_strconcat (dir, G_DIR_SEPARATOR_S "libresourceplugin", NULL); + module = g_io_module_new (path); + g_free (path); + + error = NULL; + + found = g_resources_get_info ("/resourceplugin/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (!found); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); + + g_type_module_use (G_TYPE_MODULE (module)); + + found = g_resources_get_info ("/resourceplugin/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (found); + g_assert_no_error (error); + g_assert (size == 6); + g_assert (flags == 0); + + data = g_resources_lookup_data ("/resourceplugin/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + g_assert (data != NULL); + g_assert_no_error (error); + size = g_bytes_get_size (data); + g_assert (size == 6); + g_assert_cmpstr (g_bytes_get_data (data, NULL), ==, "test1\n"); + g_bytes_unref (data); + + g_type_module_unuse (G_TYPE_MODULE (module)); + + found = g_resources_get_info ("/resourceplugin/test1.txt", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &size, &flags, &error); + g_assert (!found); + g_assert_error (error, G_RESOURCE_ERROR, G_RESOURCE_ERROR_NOT_FOUND); + g_clear_error (&error); + } +} + + +int +main (int argc, + char *argv[]) +{ + g_type_init (); + g_test_init (&argc, &argv, NULL); + + _g_test2_register_resource (); + + g_test_add_func ("/resource/file", test_resource_file); + g_test_add_func ("/resource/data", test_resource_data); + g_test_add_func ("/resource/registred", test_resource_registred); + g_test_add_func ("/resource/manual", test_resource_manual); +#ifdef G_HAS_CONSTRUCTORS + g_test_add_func ("/resource/automatic", test_resource_automatic); + /* This only uses automatic resources too, so it tests the constructors and destructors */ + g_test_add_func ("/resource/module", test_resource_module); +#endif + + return g_test_run(); +} diff --git a/gio/tests/test.gresource.xml b/gio/tests/test.gresource.xml new file mode 100644 index 0000000..d66d08a --- /dev/null +++ b/gio/tests/test.gresource.xml @@ -0,0 +1,10 @@ + + + + test1.txt + + + test2.txt + test2.txt + + diff --git a/gio/tests/test1.txt b/gio/tests/test1.txt new file mode 100644 index 0000000..a5bce3f --- /dev/null +++ b/gio/tests/test1.txt @@ -0,0 +1 @@ +test1 diff --git a/gio/tests/test2.gresource.xml b/gio/tests/test2.gresource.xml new file mode 100644 index 0000000..6876280 --- /dev/null +++ b/gio/tests/test2.gresource.xml @@ -0,0 +1,6 @@ + + + + test1.txt + + diff --git a/gio/tests/test2.txt b/gio/tests/test2.txt new file mode 100644 index 0000000..180cf83 --- /dev/null +++ b/gio/tests/test2.txt @@ -0,0 +1 @@ +test2 diff --git a/gio/tests/test3.gresource.xml b/gio/tests/test3.gresource.xml new file mode 100644 index 0000000..fdf26fa --- /dev/null +++ b/gio/tests/test3.gresource.xml @@ -0,0 +1,6 @@ + + + + test1.txt + + diff --git a/gio/tests/test3.txt b/gio/tests/test3.txt new file mode 100644 index 0000000..df6b0d2 --- /dev/null +++ b/gio/tests/test3.txt @@ -0,0 +1 @@ +test3 diff --git a/gio/tests/test4.gresource.xml b/gio/tests/test4.gresource.xml new file mode 100644 index 0000000..ddd7304 --- /dev/null +++ b/gio/tests/test4.gresource.xml @@ -0,0 +1,6 @@ + + + + test1.txt + + -- 2.7.4