mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 00:12:19 +01:00 
			
		
		
		
	Dummy dynamic type module for testing type plugin code and dynamic types.
Thu Sep 25 15:43:08 2003 Owen Taylor <otaylor@redhat.com> * tests/gobject/testmodule.[ch] test/gobject/Makefile.am: Dummy dynamic type module for testing type plugin code and dynamic types. * test/gobject/defaultiface.c: Test of g_default_interface_ref, etc.
This commit is contained in:
		| @@ -1,3 +1,12 @@ | ||||
| Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com> | ||||
|  | ||||
| 	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am: | ||||
| 	Dummy dynamic type module for testing type plugin code | ||||
| 	and dynamic types. | ||||
|  | ||||
| 	* test/gobject/defaultiface.c: Test of g_default_interface_ref, | ||||
| 	etc. | ||||
|  | ||||
| 2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt> | ||||
|  | ||||
|     * configure.in: Added lt to ALL_LINGUAS. | ||||
|   | ||||
| @@ -1,3 +1,12 @@ | ||||
| Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com> | ||||
|  | ||||
| 	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am: | ||||
| 	Dummy dynamic type module for testing type plugin code | ||||
| 	and dynamic types. | ||||
|  | ||||
| 	* test/gobject/defaultiface.c: Test of g_default_interface_ref, | ||||
| 	etc. | ||||
|  | ||||
| 2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt> | ||||
|  | ||||
|     * configure.in: Added lt to ALL_LINGUAS. | ||||
|   | ||||
| @@ -1,3 +1,12 @@ | ||||
| Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com> | ||||
|  | ||||
| 	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am: | ||||
| 	Dummy dynamic type module for testing type plugin code | ||||
| 	and dynamic types. | ||||
|  | ||||
| 	* test/gobject/defaultiface.c: Test of g_default_interface_ref, | ||||
| 	etc. | ||||
|  | ||||
| 2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt> | ||||
|  | ||||
|     * configure.in: Added lt to ALL_LINGUAS. | ||||
|   | ||||
| @@ -1,3 +1,12 @@ | ||||
| Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com> | ||||
|  | ||||
| 	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am: | ||||
| 	Dummy dynamic type module for testing type plugin code | ||||
| 	and dynamic types. | ||||
|  | ||||
| 	* test/gobject/defaultiface.c: Test of g_default_interface_ref, | ||||
| 	etc. | ||||
|  | ||||
| 2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt> | ||||
|  | ||||
|     * configure.in: Added lt to ALL_LINGUAS. | ||||
|   | ||||
| @@ -1,3 +1,12 @@ | ||||
| Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com> | ||||
|  | ||||
| 	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am: | ||||
| 	Dummy dynamic type module for testing type plugin code | ||||
| 	and dynamic types. | ||||
|  | ||||
| 	* test/gobject/defaultiface.c: Test of g_default_interface_ref, | ||||
| 	etc. | ||||
|  | ||||
| 2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt> | ||||
|  | ||||
|     * configure.in: Added lt to ALL_LINGUAS. | ||||
|   | ||||
| @@ -1,3 +1,12 @@ | ||||
| Thu Sep 25 15:43:08 2003  Owen Taylor  <otaylor@redhat.com> | ||||
|  | ||||
| 	* tests/gobject/testmodule.[ch] test/gobject/Makefile.am: | ||||
| 	Dummy dynamic type module for testing type plugin code | ||||
| 	and dynamic types. | ||||
|  | ||||
| 	* test/gobject/defaultiface.c: Test of g_default_interface_ref, | ||||
| 	etc. | ||||
|  | ||||
| 2003-09-28  Gediminas Paulauskas  <menesis@delfi.lt> | ||||
|  | ||||
|     * configure.in: Added lt to ALL_LINGUAS. | ||||
|   | ||||
| @@ -16,7 +16,9 @@ noinst_LTLIBRARIES = libtestgobject.la | ||||
| libtestgobject_la_SOURCES =	\ | ||||
| 	testcommon.h		\ | ||||
| 	testmarshal.h		\ | ||||
| 	testmarshal.c | ||||
| 	testmarshal.c		\ | ||||
| 	testmodule.c		\ | ||||
| 	testmodule.h | ||||
|  | ||||
| if CROSS_COMPILING | ||||
|   glib_genmarshal=$(GLIB_GENMARSHAL) | ||||
| @@ -44,6 +46,7 @@ LDADD = $(libgobject) libtestgobject.la | ||||
|  | ||||
| test_programs =					\ | ||||
| 	accumulator				\ | ||||
| 	defaultiface				\ | ||||
| 	ifaceinit				\ | ||||
| 	override | ||||
|  | ||||
|   | ||||
							
								
								
									
										191
									
								
								tests/gobject/defaultiface.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								tests/gobject/defaultiface.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | ||||
| /* GObject - GLib Type, Object, Parameter and Signal Library | ||||
|  * Copyright (C) 2001, 2003 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. | ||||
|  */ | ||||
|  | ||||
| #undef	G_LOG_DOMAIN | ||||
| #define	G_LOG_DOMAIN "TestDefaultIface" | ||||
|  | ||||
| #undef G_DISABLE_ASSERT | ||||
| #undef G_DISABLE_CHECKS | ||||
| #undef G_DISABLE_CAST_CHECKS | ||||
|  | ||||
| #include <glib-object.h> | ||||
|  | ||||
| #include "testcommon.h" | ||||
| #include "testmodule.h" | ||||
|  | ||||
| /* This test tests getting the default vtable for an interface | ||||
|  * and the initialization and finalization of such default | ||||
|  * interfaces. | ||||
|  * | ||||
|  * We test this both for static and for dynamic interfaces. | ||||
|  */ | ||||
|  | ||||
| /********************************************************************** | ||||
|  * Static interface tests | ||||
|  **********************************************************************/ | ||||
|  | ||||
| typedef struct _TestStaticIfaceClass TestStaticIfaceClass; | ||||
|  | ||||
| struct _TestStaticIfaceClass | ||||
| { | ||||
|   GTypeInterface base_iface; | ||||
|   guint val; | ||||
| }; | ||||
|  | ||||
| #define TEST_TYPE_STATIC_IFACE (test_static_iface_get_type ()) | ||||
|  | ||||
| static void | ||||
| test_static_iface_default_init (TestStaticIfaceClass *iface) | ||||
| { | ||||
|   iface->val = 42; | ||||
| } | ||||
|  | ||||
| DEFINE_IFACE (TestStaticIface, test_static_iface, | ||||
| 	      NULL, test_static_iface_default_init) | ||||
|  | ||||
| static void | ||||
| test_static_iface (void) | ||||
| { | ||||
|   TestStaticIfaceClass *static_iface; | ||||
|  | ||||
|   /* Not loaded until we call ref for the first time */ | ||||
|   static_iface = g_type_default_interface_peek (TEST_TYPE_STATIC_IFACE); | ||||
|   g_assert (static_iface == NULL); | ||||
|  | ||||
|   /* Ref loads */ | ||||
|   static_iface = g_type_default_interface_ref (TEST_TYPE_STATIC_IFACE); | ||||
|   g_assert (static_iface && static_iface->val == 42); | ||||
|  | ||||
|   /* Peek then works */ | ||||
|   static_iface = g_type_default_interface_peek (TEST_TYPE_STATIC_IFACE); | ||||
|   g_assert (static_iface && static_iface->val == 42); | ||||
|    | ||||
|   /* Unref does nothing */ | ||||
|   g_type_default_interface_unref (static_iface); | ||||
|    | ||||
|   /* And peek still works */ | ||||
|   static_iface = g_type_default_interface_peek (TEST_TYPE_STATIC_IFACE); | ||||
|   g_assert (static_iface && static_iface->val == 42); | ||||
| } | ||||
|  | ||||
| /********************************************************************** | ||||
|  * Dynamic interface tests | ||||
|  **********************************************************************/ | ||||
|  | ||||
| typedef struct _TestDynamicIfaceClass TestDynamicIfaceClass; | ||||
|  | ||||
| struct _TestDynamicIfaceClass | ||||
| { | ||||
|   GTypeInterface base_iface; | ||||
|   guint val; | ||||
| }; | ||||
|  | ||||
| static GType test_dynamic_iface_type; | ||||
| static gboolean dynamic_iface_init = FALSE; | ||||
|  | ||||
| #define TEST_TYPE_DYNAMIC_IFACE (test_dynamic_iface_type) | ||||
|  | ||||
| static void | ||||
| test_dynamic_iface_default_init (TestStaticIfaceClass *iface) | ||||
| { | ||||
|   dynamic_iface_init = TRUE; | ||||
|   iface->val = 42; | ||||
| } | ||||
|  | ||||
| static void | ||||
| test_dynamic_iface_default_finalize (TestStaticIfaceClass *iface) | ||||
| { | ||||
|   dynamic_iface_init = FALSE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| test_dynamic_iface_register (GTypeModule *module) | ||||
| { | ||||
|   static const GTypeInfo iface_info =			 | ||||
|     {								 | ||||
|       sizeof (TestDynamicIfaceClass), | ||||
|       (GBaseInitFunc)	   NULL, | ||||
|       (GBaseFinalizeFunc)  NULL,				 | ||||
|       (GClassInitFunc)     test_dynamic_iface_default_init, | ||||
|       (GClassFinalizeFunc) test_dynamic_iface_default_finalize | ||||
|     };							 | ||||
|  | ||||
|   test_dynamic_iface_type = g_type_module_register_type (module, G_TYPE_INTERFACE, | ||||
| 							 "TestDynamicIface", &iface_info, 0); | ||||
| } | ||||
|  | ||||
| static void | ||||
| module_register (GTypeModule *module) | ||||
| { | ||||
|   test_dynamic_iface_register (module); | ||||
| } | ||||
|  | ||||
| static void | ||||
| test_dynamic_iface (void) | ||||
| { | ||||
|   GTypeModule *module; | ||||
|   TestDynamicIfaceClass *dynamic_iface; | ||||
|  | ||||
|   module = test_module_new (module_register); | ||||
|  | ||||
|   /* Not loaded until we call ref for the first time */ | ||||
|   dynamic_iface = g_type_default_interface_peek (TEST_TYPE_DYNAMIC_IFACE); | ||||
|   g_assert (dynamic_iface == NULL); | ||||
|  | ||||
|   /* Ref loads */ | ||||
|   dynamic_iface = g_type_default_interface_ref (TEST_TYPE_DYNAMIC_IFACE); | ||||
|   g_assert (dynamic_iface_init); | ||||
|   g_assert (dynamic_iface && dynamic_iface->val == 42); | ||||
|  | ||||
|   /* Peek then works */ | ||||
|   dynamic_iface = g_type_default_interface_peek (TEST_TYPE_DYNAMIC_IFACE); | ||||
|   g_assert (dynamic_iface && dynamic_iface->val == 42); | ||||
|    | ||||
|   /* Unref causes finalize */ | ||||
|   g_type_default_interface_unref (dynamic_iface); | ||||
|   g_assert (!dynamic_iface_init); | ||||
|  | ||||
|   /* Peek returns NULL */ | ||||
|   dynamic_iface = g_type_default_interface_peek (TEST_TYPE_DYNAMIC_IFACE); | ||||
|   g_assert (dynamic_iface == NULL); | ||||
|    | ||||
|   /* Ref reloads */ | ||||
|   dynamic_iface = g_type_default_interface_ref (TEST_TYPE_DYNAMIC_IFACE); | ||||
|   g_assert (dynamic_iface_init); | ||||
|   g_assert (dynamic_iface && dynamic_iface->val == 42); | ||||
|  | ||||
|   /* And Unref causes finalize once more*/ | ||||
|   g_type_default_interface_unref (dynamic_iface); | ||||
|   g_assert (!dynamic_iface_init); | ||||
| } | ||||
|  | ||||
| int | ||||
| main (int   argc, | ||||
|       char *argv[]) | ||||
| { | ||||
|   g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) | | ||||
| 			  G_LOG_LEVEL_WARNING | | ||||
| 			  G_LOG_LEVEL_CRITICAL); | ||||
|   g_type_init (); | ||||
|  | ||||
|   test_static_iface (); | ||||
|   test_dynamic_iface (); | ||||
|    | ||||
|   return 0; | ||||
| } | ||||
							
								
								
									
										69
									
								
								tests/gobject/testmodule.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								tests/gobject/testmodule.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| /* GObject - GLib Type, Object, Parameter and Signal Library | ||||
|  * testmodule.c: Dummy dynamic type module | ||||
|  * Copyright (C) 2003 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 "testmodule.h" | ||||
| #include "testcommon.h" | ||||
|  | ||||
| static gboolean test_module_load   (GTypeModule *module); | ||||
| static void     test_module_unload (GTypeModule *module); | ||||
|  | ||||
| static void | ||||
| test_module_class_init (TestModuleClass *class) | ||||
| { | ||||
|   GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class); | ||||
|  | ||||
|   module_class->load = test_module_load; | ||||
|   module_class->unload = test_module_unload; | ||||
| } | ||||
|  | ||||
| DEFINE_TYPE (TestModule, test_module, | ||||
| 	     test_module_class_init, NULL, NULL, | ||||
| 	     G_TYPE_TYPE_MODULE) | ||||
|  | ||||
| static gboolean | ||||
| test_module_load (GTypeModule *module) | ||||
| { | ||||
|   TestModule *test_module = TEST_MODULE (module); | ||||
|  | ||||
|   test_module->register_func (module); | ||||
|    | ||||
|   return TRUE; | ||||
| } | ||||
|  | ||||
| static void | ||||
| test_module_unload (GTypeModule *module) | ||||
| { | ||||
| } | ||||
|  | ||||
| GTypeModule * | ||||
| test_module_new (TestModuleRegisterFunc register_func) | ||||
| { | ||||
|   TestModule *test_module = g_object_new (TEST_TYPE_MODULE, NULL); | ||||
|   GTypeModule *module = G_TYPE_MODULE (test_module); | ||||
|    | ||||
|   test_module->register_func = register_func; | ||||
|  | ||||
|   /* Register the types initially */ | ||||
|   g_type_module_use (module); | ||||
|   g_type_module_unuse (module); | ||||
|  | ||||
|   return G_TYPE_MODULE (module); | ||||
| } | ||||
|  | ||||
							
								
								
									
										57
									
								
								tests/gobject/testmodule.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								tests/gobject/testmodule.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| /* GObject - GLib Type, Object, Parameter and Signal Library | ||||
|  * testmodule.h: Dummy dynamic type module | ||||
|  * Copyright (C) 2003 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. | ||||
|  */ | ||||
|  | ||||
| #ifndef __TEST_MODULE_H__ | ||||
| #define __TEST_MODULE_H__ | ||||
|  | ||||
| #include <glib-object.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| typedef struct _TestModule      TestModule; | ||||
| typedef struct _TestModuleClass TestModuleClass; | ||||
|  | ||||
| #define TEST_TYPE_MODULE              (test_module_get_type ()) | ||||
| #define TEST_MODULE(module)           (G_TYPE_CHECK_INSTANCE_CAST ((module), TEST_TYPE_MODULE, TestModule)) | ||||
| #define TEST_MODULE_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), TEST_TYPE_MODULE, TestModuleClass)) | ||||
| #define TEST_IS_MODULE(module)        (G_TYPE_CHECK_INSTANCE_TYPE ((module), TEST_TYPE_MODULE)) | ||||
| #define TEST_IS_MODULE_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), TEST_TYPE_MODULE)) | ||||
| #define TEST_MODULE_GET_CLASS(module) (G_TYPE_INSTANCE_GET_CLASS ((module), TEST_TYPE_MODULE, TestModuleClass)) | ||||
|  | ||||
| typedef void (*TestModuleRegisterFunc) (GTypeModule *module); | ||||
|  | ||||
| struct _TestModule  | ||||
| { | ||||
|   GTypeModule parent_instance; | ||||
|  | ||||
|   TestModuleRegisterFunc register_func; | ||||
| }; | ||||
|  | ||||
| struct _TestModuleClass | ||||
| { | ||||
|   GTypeModuleClass parent_class; | ||||
| }; | ||||
|  | ||||
| GType        test_module_get_type      (void); | ||||
| GTypeModule *test_module_new           (TestModuleRegisterFunc register_func); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif /* __TEST_MODULE_H__ */ | ||||
		Reference in New Issue
	
	Block a user