glib/gio/tests/giomodule.c
Chun-wei Fan dbea8d5449 Fix module tests on Visual Studio builds
On Visual Studio, Meson builds modules as xxxx.dll, not libxxxx.dll when
xxxx is specified as the name for the shared_module() build directive.

This means that in the test programs if we expect for libxxxx for the
module name, the test will fail as there is no libxxxx.dll but there is
xxxx.dll.  This makes the test program look for the module files
correctly.
2019-06-24 10:58:58 +08:00

143 lines
4.9 KiB
C

/* Unit tests for GIOModule
* Copyright (C) 2013 Red Hat, Inc
* Author: Matthias Clasen
*
* This work is provided "as is"; redistribution and modification
* in whole or in part, in any medium, physical or electronic is
* permitted without restriction.
*
* This work 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.
*
* In no event shall the authors or contributors be liable for any
* direct, indirect, incidental, special, exemplary, or consequential
* damages (including, but not limited to, procurement of substitute
* goods or services; loss of use, data, or profits; or business
* interruption) however caused and on any theory of liability, whether
* in contract, strict liability, or tort (including negligence or
* otherwise) arising in any way out of the use of this software, even
* if advised of the possibility of such damage.
*/
#include <gio/gio.h>
#ifdef _MSC_VER
# define MODULE_FILENAME_PREFIX ""
#else
# define MODULE_FILENAME_PREFIX "lib"
#endif
static void
test_extension_point (void)
{
GIOExtensionPoint *ep, *ep2;
GIOExtension *ext;
GList *list;
GType req;
GTypeClass *class;
ep = g_io_extension_point_lookup ("test-extension-point");
g_assert_null (ep);
ep = g_io_extension_point_register ("test-extension-point");
ep2 = g_io_extension_point_lookup ("test-extension-point");
g_assert (ep2 == ep);
req = g_io_extension_point_get_required_type (ep);
g_assert (req == G_TYPE_INVALID);
g_io_extension_point_set_required_type (ep, G_TYPE_OBJECT);
req = g_io_extension_point_get_required_type (ep);
g_assert (req == G_TYPE_OBJECT);
list = g_io_extension_point_get_extensions (ep);
g_assert_null (list);
g_io_extension_point_implement ("test-extension-point",
G_TYPE_VFS,
"extension1",
10);
g_io_extension_point_implement ("test-extension-point",
G_TYPE_OBJECT,
"extension2",
20);
list = g_io_extension_point_get_extensions (ep);
g_assert_cmpint (g_list_length (list), ==, 2);
ext = list->data;
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "extension2");
g_assert (g_io_extension_get_type (ext) == G_TYPE_OBJECT);
g_assert (g_io_extension_get_priority (ext) == 20);
class = g_io_extension_ref_class (ext);
g_assert (class == g_type_class_peek (G_TYPE_OBJECT));
g_type_class_unref (class);
ext = list->next->data;
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "extension1");
g_assert (g_io_extension_get_type (ext) == G_TYPE_VFS);
g_assert (g_io_extension_get_priority (ext) == 10);
}
static void
test_module_scan_all (void)
{
if (g_test_subprocess ())
{
GIOExtensionPoint *ep;
GIOExtension *ext;
GList *list;
ep = g_io_extension_point_register ("test-extension-point");
g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules", NULL));
g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL));
list = g_io_extension_point_get_extensions (ep);
g_assert_cmpint (g_list_length (list), ==, 2);
ext = list->data;
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-b");
ext = list->next->data;
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
return;
}
g_test_trap_subprocess (NULL, 0, 7);
g_test_trap_assert_passed ();
}
static void
test_module_scan_all_with_scope (void)
{
if (g_test_subprocess ())
{
GIOExtensionPoint *ep;
GIOModuleScope *scope;
GIOExtension *ext;
GList *list;
ep = g_io_extension_point_register ("test-extension-point");
scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES);
g_io_module_scope_block (scope, MODULE_FILENAME_PREFIX "testmoduleb." G_MODULE_SUFFIX);
g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope);
list = g_io_extension_point_get_extensions (ep);
g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL), scope);
list = g_io_extension_point_get_extensions (ep);
g_assert_cmpint (g_list_length (list), ==, 1);
ext = list->data;
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
g_io_module_scope_free (scope);
return;
}
g_test_trap_subprocess (NULL, 0, 7);
g_test_trap_assert_passed ();
}
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/giomodule/extension-point", test_extension_point);
g_test_add_func ("/giomodule/module-scan-all", test_module_scan_all);
g_test_add_func ("/giomodule/module-scan-all-with-scope", test_module_scan_all_with_scope);
return g_test_run ();
}