| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | /* GObject - GLib Type, Object, Parameter and Signal Library
 | 
					
						
							|  |  |  |  * override.c: Closure override test program | 
					
						
							|  |  |  |  * Copyright (C) 2001, James Henstridge | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #undef	G_LOG_DOMAIN
 | 
					
						
							|  |  |  | #define	G_LOG_DOMAIN "TestOverride"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #undef G_DISABLE_ASSERT
 | 
					
						
							|  |  |  | #undef G_DISABLE_CHECKS
 | 
					
						
							|  |  |  | #undef G_DISABLE_CAST_CHECKS
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #undef VERBOSE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | #include <glib.h>
 | 
					
						
							|  |  |  | #include <glib-object.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | #include "testcommon.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | static guint foo_signal_id = 0; | 
					
						
							|  |  |  | static guint bar_signal_id = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static GType test_i_get_type (void); | 
					
						
							|  |  |  | static GType test_a_get_type (void); | 
					
						
							|  |  |  | static GType test_b_get_type (void); | 
					
						
							|  |  |  | static GType test_c_get_type (void); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | static void  record (const gchar *str); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | #define TEST_TYPE_I (test_i_get_type ())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct _TestI TestI; | 
					
						
							|  |  |  | typedef struct _TestIClass TestIClass; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | struct _TestIClass | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GTypeInterface base_iface; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_i_foo (TestI *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestI::foo"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | test_i_default_init (gpointer g_class) | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   foo_signal_id = g_signal_newv ("foo", | 
					
						
							|  |  |  | 				 TEST_TYPE_I, | 
					
						
							|  |  |  | 				 G_SIGNAL_RUN_LAST, | 
					
						
							|  |  |  | 				 g_cclosure_new(G_CALLBACK(test_i_foo), | 
					
						
							|  |  |  | 						NULL, NULL), | 
					
						
							|  |  |  | 				 NULL, NULL, | 
					
						
							|  |  |  | 				 g_cclosure_marshal_VOID__VOID, | 
					
						
							|  |  |  | 				 G_TYPE_NONE, 0, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | static DEFINE_IFACE (TestI, test_i, NULL, test_i_default_init) | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define TEST_TYPE_A (test_a_get_type())
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |      typedef struct _TestA TestA; | 
					
						
							|  |  |  |      typedef struct _TestAClass TestAClass; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct _TestA { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GObject parent; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | struct _TestAClass { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GObjectClass parent_class; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   void (* bar) (TestA *self); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_a_foo (TestI *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GValue args[1] = { { 0, } }; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestA::foo"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_init (&args[0], TEST_TYPE_A); | 
					
						
							|  |  |  |   g_value_set_object (&args[0], self); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); | 
					
						
							|  |  |  |   g_signal_chain_from_overridden (args, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_unset (&args[0]); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_a_bar (TestA *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestA::bar"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_a_class_init (TestAClass *class) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   class->bar = test_a_bar; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bar_signal_id = g_signal_new ("bar", | 
					
						
							|  |  |  | 				TEST_TYPE_A, | 
					
						
							|  |  |  | 				G_SIGNAL_RUN_LAST, | 
					
						
							|  |  |  | 				G_STRUCT_OFFSET (TestAClass, bar), | 
					
						
							|  |  |  | 				NULL, NULL, | 
					
						
							|  |  |  | 				g_cclosure_marshal_VOID__VOID, | 
					
						
							|  |  |  | 				G_TYPE_NONE, 0, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_a_interface_init (TestIClass *iface) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_signal_override_class_closure (foo_signal_id, | 
					
						
							|  |  |  | 				   TEST_TYPE_A, | 
					
						
							|  |  |  | 				   g_cclosure_new (G_CALLBACK (test_a_foo), | 
					
						
							|  |  |  | 						   NULL, NULL)); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | static DEFINE_TYPE_FULL (TestA, test_a, | 
					
						
							|  |  |  | 			 test_a_class_init, NULL, NULL, | 
					
						
							|  |  |  | 			 G_TYPE_OBJECT, | 
					
						
							|  |  |  | 			 INTERFACE (test_a_interface_init, TEST_TYPE_I)) | 
					
						
							|  |  |  |       | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | #define TEST_TYPE_B (test_b_get_type())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct _TestB TestB; | 
					
						
							|  |  |  | typedef struct _TestBClass TestBClass; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct _TestB { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   TestA parent; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | struct _TestBClass { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   TestAClass parent_class; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_b_foo (TestA *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GValue args[1] = { { 0, } }; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestB::foo"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_init (&args[0], TEST_TYPE_A); | 
					
						
							|  |  |  |   g_value_set_object (&args[0], self); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); | 
					
						
							|  |  |  |   g_signal_chain_from_overridden (args, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_unset (&args[0]); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_b_bar (TestI *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GValue args[1] = { { 0, } }; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestB::bar"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_init (&args[0], TEST_TYPE_A); | 
					
						
							|  |  |  |   g_value_set_object (&args[0], self); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id); | 
					
						
							|  |  |  |   g_signal_chain_from_overridden (args, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_unset (&args[0]); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_b_class_init (TestBClass *class) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_signal_override_class_closure (foo_signal_id, | 
					
						
							|  |  |  | 				   TEST_TYPE_B, | 
					
						
							|  |  |  | 				   g_cclosure_new (G_CALLBACK (test_b_foo), | 
					
						
							|  |  |  | 						   NULL, NULL)); | 
					
						
							|  |  |  |   g_signal_override_class_closure (bar_signal_id, | 
					
						
							|  |  |  | 				   TEST_TYPE_B, | 
					
						
							|  |  |  | 				   g_cclosure_new (G_CALLBACK (test_b_bar), | 
					
						
							|  |  |  | 						   NULL, NULL)); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | static DEFINE_TYPE (TestB, test_b, | 
					
						
							|  |  |  | 		    test_b_class_init, NULL, NULL, | 
					
						
							|  |  |  | 		    TEST_TYPE_A) | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define TEST_TYPE_C (test_c_get_type())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct _TestC TestC; | 
					
						
							|  |  |  | typedef struct _TestCClass TestCClass; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct _TestC { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   TestB parent; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | struct _TestCClass { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   TestBClass parent_class; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_c_foo (TestA *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GValue args[1] = { { 0, } }; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestC::foo"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_init (&args[0], TEST_TYPE_A); | 
					
						
							|  |  |  |   g_value_set_object (&args[0], self); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id); | 
					
						
							|  |  |  |   g_signal_chain_from_overridden (args, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_unset (&args[0]); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_c_bar (TestI *self) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   GValue args[1] = { { 0, } }; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   record ("TestC::bar"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_init (&args[0], TEST_TYPE_A); | 
					
						
							|  |  |  |   g_value_set_object (&args[0], self); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id); | 
					
						
							|  |  |  |   g_signal_chain_from_overridden (args, NULL); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_value_unset (&args[0]); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test_c_class_init (TestBClass *class) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_signal_override_class_closure (foo_signal_id, | 
					
						
							|  |  |  | 				   TEST_TYPE_C, | 
					
						
							|  |  |  | 				   g_cclosure_new (G_CALLBACK (test_c_foo), | 
					
						
							|  |  |  | 						   NULL, NULL)); | 
					
						
							|  |  |  |   g_signal_override_class_closure (bar_signal_id, | 
					
						
							|  |  |  | 				   TEST_TYPE_C, | 
					
						
							|  |  |  | 				   g_cclosure_new (G_CALLBACK (test_c_bar), | 
					
						
							|  |  |  | 						   NULL, NULL)); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static DEFINE_TYPE (TestC, test_c, | 
					
						
							|  |  |  | 		    test_c_class_init, NULL, NULL, | 
					
						
							|  |  |  | 		    TEST_TYPE_B) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static GString *test_string = NULL; | 
					
						
							|  |  |  | gboolean failed = FALSE; | 
					
						
							|  |  |  |       | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | record (const gchar *str) | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   if (test_string->len) | 
					
						
							|  |  |  |     g_string_append_c (test_string, ','); | 
					
						
							|  |  |  |   g_string_append (test_string, str); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |       | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | test (GType        type, | 
					
						
							|  |  |  |       const gchar *signal, | 
					
						
							|  |  |  |       const gchar *expected) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   GObject *self = g_object_new (type, NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test_string = g_string_new (NULL); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   g_signal_emit_by_name (self, signal, 0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef VERBOSE
 | 
					
						
							|  |  |  |   if (strcmp (test_string->str, expected) != 0) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       g_printerr ("*** emitting %s on a %s instance\n" | 
					
						
							|  |  |  | 		  "    Expecting: %s\n" | 
					
						
							|  |  |  | 		  "    Got: %s\n", | 
					
						
							|  |  |  | 		  signal, g_type_name (type), | 
					
						
							|  |  |  | 		  expected, | 
					
						
							|  |  |  | 		  test_string->str); | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       if (strcmp (test_string->str, expected) != 0) | 
					
						
							|  |  |  | 	failed = TRUE; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   g_string_free (test_string, TRUE); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  |       | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | int | 
					
						
							|  |  |  | main (int argc, char **argv) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   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(); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   test (TEST_TYPE_A, "foo", "TestA::foo,TestI::foo"); | 
					
						
							|  |  |  |   test (TEST_TYPE_A, "bar", "TestA::bar"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   test (TEST_TYPE_B, "foo", "TestB::foo,TestA::foo,TestI::foo"); | 
					
						
							|  |  |  |   test (TEST_TYPE_B, "bar", "TestB::bar,TestA::bar"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   test (TEST_TYPE_C, "foo", "TestC::foo,TestB::foo,TestA::foo,TestI::foo"); | 
					
						
							|  |  |  |   test (TEST_TYPE_C, "bar", "TestC::bar,TestB::bar,TestA::bar"); | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-12 20:37:09 +00:00
										 |  |  |   return failed ? 1 : 0; | 
					
						
							| 
									
										
										
										
											2001-12-14 04:48:56 +00:00
										 |  |  | } |