22 /* |
26 /* |
23 Define NULL explictly here rather than expecting e32def.h to be included! |
27 Define NULL explictly here rather than expecting e32def.h to be included! |
24 */ |
28 */ |
25 #define NULL 0 |
29 #define NULL 0 |
26 |
30 |
27 #define G_TYPE_TEST (g_test_get_type ()) |
31 #define G_TYPE_TEST (my_test_get_type ()) |
28 #define G_TEST(test) (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest)) |
32 #define MY_TEST(test) (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest)) |
29 #define G_IS_TEST(test) (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST)) |
33 #define MY_IS_TEST(test) (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST)) |
30 #define G_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass)) |
34 #define MY_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass)) |
31 #define G_IS_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST)) |
35 #define MY_IS_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST)) |
32 #define G_TEST_GET_CLASS(test) (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass)) |
36 #define MY_TEST_GET_CLASS(test) (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass)) |
33 |
37 |
34 static GRand *grand; |
38 static GRand *grand; |
35 |
39 |
36 typedef struct _GTest GTest; |
40 typedef struct _GTest GTest; |
37 typedef struct _GTestClass GTestClass; |
41 typedef struct _GTestClass GTestClass; |
49 |
53 |
50 void (*test_signal1) (GTest * test, gint an_int); |
54 void (*test_signal1) (GTest * test, gint an_int); |
51 void (*test_signal2) (GTest * test, gint an_int); |
55 void (*test_signal2) (GTest * test, gint an_int); |
52 }; |
56 }; |
53 |
57 |
54 static GType g_test_get_type (void); |
58 static GType my_test_get_type (void); |
55 static volatile gboolean stopping; |
59 static volatile gboolean stopping; |
56 |
60 |
57 /* Element signals and args */ |
61 /* Element signals and args */ |
58 enum |
62 enum |
59 { |
63 { |
67 { |
71 { |
68 ARG_0, |
72 ARG_0, |
69 ARG_TEST_PROP |
73 ARG_TEST_PROP |
70 }; |
74 }; |
71 |
75 |
72 static void g_test_class_init (GTestClass * klass); |
76 static void my_test_class_init (GTestClass * klass); |
73 static void g_test_init (GTest * test); |
77 static void my_test_init (GTest * test); |
74 static void g_test_dispose (GObject * object); |
78 static void my_test_dispose (GObject * object); |
75 |
79 |
76 static void signal2_handler (GTest * test, gint anint); |
80 static void signal2_handler (GTest * test, gint anint); |
77 |
81 |
78 static void g_test_set_property (GObject * object, guint prop_id, |
82 static void my_test_set_property (GObject * object, guint prop_id, |
79 const GValue * value, GParamSpec * pspec); |
83 const GValue * value, GParamSpec * pspec); |
80 static void g_test_get_property (GObject * object, guint prop_id, |
84 static void my_test_get_property (GObject * object, guint prop_id, |
81 GValue * value, GParamSpec * pspec); |
85 GValue * value, GParamSpec * pspec); |
82 |
86 |
83 static GObjectClass *parent_class = NULL; |
87 static GObjectClass *parent_class = NULL; |
84 |
88 |
85 static guint g_test_signals[LAST_SIGNAL] = { 0 }; |
89 static guint my_test_signals[LAST_SIGNAL] = { 0 }; |
86 |
90 |
87 static GType |
91 static GType |
88 g_test_get_type (void) |
92 my_test_get_type (void) |
89 { |
93 { |
90 static GType test_type = 0; |
94 static GType test_type = 0; |
91 |
95 |
92 if (!test_type) { |
96 if (!test_type) { |
93 static const GTypeInfo test_info = { |
97 static const GTypeInfo test_info = { |
94 sizeof (GTestClass), |
98 sizeof (GTestClass), |
95 NULL, |
99 NULL, |
96 NULL, |
100 NULL, |
97 (GClassInitFunc) g_test_class_init, |
101 (GClassInitFunc) my_test_class_init, |
98 NULL, |
102 NULL, |
99 NULL, |
103 NULL, |
100 sizeof (GTest), |
104 sizeof (GTest), |
101 0, |
105 0, |
102 (GInstanceInitFunc) g_test_init, |
106 (GInstanceInitFunc) my_test_init, |
103 NULL |
107 NULL |
104 }; |
108 }; |
105 |
109 |
106 grand = g_rand_new(); |
110 grand = g_rand_new(); |
107 |
111 |
128 if (!g_thread_supported ()) |
132 if (!g_thread_supported ()) |
129 g_thread_init (NULL); |
133 g_thread_init (NULL); |
130 #endif /*MULTITHREAD*/ |
134 #endif /*MULTITHREAD*/ |
131 |
135 |
132 #endif /*SYMBAIN*/ |
136 #endif /*SYMBAIN*/ |
133 |
137 gobject_class->dispose = my_test_dispose; |
134 gobject_class->dispose = g_test_dispose; |
138 gobject_class->set_property = my_test_set_property; |
135 gobject_class->set_property = g_test_set_property; |
139 gobject_class->get_property = my_test_get_property; |
136 gobject_class->get_property = g_test_get_property; |
140 |
137 |
141 my_test_signals[TEST_SIGNAL1] = |
138 g_test_signals[TEST_SIGNAL1] = |
|
139 g_signal_new ("test-signal1", G_TYPE_FROM_CLASS (klass), |
142 g_signal_new ("test-signal1", G_TYPE_FROM_CLASS (klass), |
140 G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GTestClass, test_signal1), NULL, |
143 G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GTestClass, test_signal1), NULL, |
141 NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); |
144 NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); |
142 g_test_signals[TEST_SIGNAL2] = |
145 my_test_signals[TEST_SIGNAL2] = |
143 g_signal_new ("test-signal2", G_TYPE_FROM_CLASS (klass), |
146 g_signal_new ("test-signal2", G_TYPE_FROM_CLASS (klass), |
144 G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GTestClass, test_signal2), NULL, |
147 G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GTestClass, test_signal2), NULL, |
145 NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); |
148 NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); |
146 |
149 |
147 g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TEST_PROP, |
150 g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TEST_PROP, |
166 |
169 |
167 test->value = 0; |
170 test->value = 0; |
168 } |
171 } |
169 |
172 |
170 static void |
173 static void |
171 g_test_dispose (GObject * object) |
174 my_test_dispose (GObject * object) |
172 { |
175 { |
173 GTest *test; |
176 GTest *test; |
174 |
177 |
175 test = G_TEST (object); |
178 test = MY_TEST (object); |
176 |
179 |
177 g_print ("dispose %p!\n", object); |
180 g_print ("dispose %p!\n", object); |
178 |
181 |
179 G_OBJECT_CLASS (parent_class)->dispose (object); |
182 G_OBJECT_CLASS (parent_class)->dispose (object); |
180 } |
183 } |
181 |
184 |
182 static void |
185 static void |
183 g_test_set_property (GObject * object, guint prop_id, |
186 my_test_set_property (GObject * object, guint prop_id, |
184 const GValue * value, GParamSpec * pspec) |
187 const GValue * value, GParamSpec * pspec) |
185 { |
188 { |
186 GTest *test; |
189 GTest *test; |
187 |
190 |
188 test = G_TEST (object); |
191 test = MY_TEST (object); |
189 |
192 |
190 switch (prop_id) { |
193 switch (prop_id) { |
191 case ARG_TEST_PROP: |
194 case ARG_TEST_PROP: |
192 test->value = g_value_get_int (value); |
195 test->value = g_value_get_int (value); |
193 break; |
196 break; |
196 break; |
199 break; |
197 } |
200 } |
198 } |
201 } |
199 |
202 |
200 static void |
203 static void |
201 g_test_get_property (GObject * object, guint prop_id, |
204 my_test_get_property (GObject * object, guint prop_id, |
202 GValue * value, GParamSpec * pspec) |
205 GValue * value, GParamSpec * pspec) |
203 { |
206 { |
204 GTest *test; |
207 GTest *test; |
205 |
208 |
206 test = G_TEST (object); |
209 test = MY_TEST (object); |
207 |
210 |
208 switch (prop_id) { |
211 switch (prop_id) { |
209 case ARG_TEST_PROP: |
212 case ARG_TEST_PROP: |
210 g_value_set_int (value, test->value); |
213 g_value_set_int (value, test->value); |
211 break; |
214 break; |
230 |
233 |
231 handlernum++; |
234 handlernum++; |
232 } |
235 } |
233 |
236 |
234 static void |
237 static void |
235 g_test_do_signal2 (GTest * test) |
238 my_test_do_signal2 (GTest * test) |
236 { |
239 { |
237 g_signal_emit (G_OBJECT (test), g_test_signals[TEST_SIGNAL2], 0, 0); |
240 g_signal_emit (G_OBJECT (test), my_test_signals[TEST_SIGNAL2], 0, 0); |
238 } |
241 } |
239 |
242 |
240 static void |
243 static void |
241 g_test_do_prop (GTest * test) |
244 my_test_do_prop (GTest * test) |
242 { |
245 { |
243 test->value = g_rand_int (grand); |
246 test->value = g_rand_int (grand); |
244 g_object_notify (G_OBJECT (test), "test-prop"); |
247 g_object_notify (G_OBJECT (test), "test-prop"); |
245 } |
248 } |
246 |
249 |
251 |
254 |
252 #ifndef SYMBIAN |
255 #ifndef SYMBIAN |
253 while (!stopping) |
256 while (!stopping) |
254 { |
257 { |
255 if (TESTNUM == 1) |
258 if (TESTNUM == 1) |
256 g_test_do_signal1 (test); |
259 my_test_do_signal1 (test); |
257 if (TESTNUM == 2) |
260 if (TESTNUM == 2) |
258 g_test_do_signal2 (test); |
261 my_test_do_signal2 (test); |
259 if (TESTNUM == 3) |
262 if (TESTNUM == 3) |
260 g_test_do_prop (test); |
263 my_test_do_prop (test); |
261 if ((i++ % 10000) == 0) { |
264 if ((i++ % 10000) == 0) { |
262 g_print ("."); |
265 g_print ("."); |
263 g_thread_yield(); /*force context switch */ |
266 g_thread_yield(); /* force context switch */ |
264 } |
267 } |
265 } |
268 } |
266 #else |
269 #else |
267 |
270 |
268 #ifdef MULTITHREAD |
271 #ifdef MULTITHREAD |
269 while (!stopping) |
272 while (!stopping) |
270 { |
273 { |
271 if (TESTNUM == 1) |
274 if (TESTNUM == 1) |
272 g_test_do_signal1 (test); |
275 my_test_do_signal1 (test); |
273 if (TESTNUM == 2) |
276 if (TESTNUM == 2) |
274 g_test_do_signal2 (test); |
277 my_test_do_signal2 (test); |
275 if (TESTNUM == 3) |
278 if (TESTNUM == 3) |
276 g_test_do_prop (test); |
279 my_test_do_prop (test); |
277 if ((i++ % 10/*000*/) == 0) |
280 if ((i++ % 10/*000*/) == 0) |
278 { |
281 { |
279 #ifdef VERBOSE |
282 #ifdef VERBOSE |
280 g_print ("."); |
283 g_print ("."); |
281 #endif /*VERBOSE*/ |
284 #endif /*VERBOSE*/ |
339 const gint n_threads = 1; |
339 const gint n_threads = 1; |
340 |
340 |
341 #ifdef SYMBIAN |
341 #ifdef SYMBIAN |
342 g_log_set_handler (NULL, G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL); |
342 g_log_set_handler (NULL, G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL); |
343 g_set_print_handler(mrtPrintHandler); |
343 g_set_print_handler(mrtPrintHandler); |
344 #endif /*SYMBIAN*/ |
344 #endif /*__SYMBIAN32__*/ |
345 |
345 |
346 g_thread_init (NULL); |
346 g_thread_init (NULL); |
347 |
347 |
348 #ifndef SYMBIAN |
348 #ifndef SYMBIAN |
349 g_print ("START: %s\n", argv[0]); |
349 g_print ("START: %s\n", argv[0]); |
622 |
622 |
623 /*******************/ |
623 /*******************/ |
624 |
624 |
625 |
625 |
626 handlernum=0; |
626 handlernum=0; |
627 g_signal_emit(G_OBJECT (test1), g_test_signals[TEST_SIGNAL1], 0, 0); |
627 g_signal_emit(G_OBJECT (test1), my_test_signals[TEST_SIGNAL1], 0, 0); |
628 g_signal_emit(G_OBJECT (test2), g_test_signals[TEST_SIGNAL1], 0, 0); |
628 g_signal_emit(G_OBJECT (test2), my_test_signals[TEST_SIGNAL1], 0, 0); |
629 g_assert(handlernum==2); |
629 g_assert(handlernum==2); |
630 |
630 |
631 |
631 |
632 g_signal_remove_emission_hook(g_signal_lookup("test-signal1",G_TYPE_TEST),hookid); |
632 g_signal_remove_emission_hook(g_signal_lookup("test-signal1",G_TYPE_TEST),hookid); |
633 |
633 |
634 #ifdef VERBOSE |
634 #ifdef VERBOSE |
635 g_print("Emitting signal again after removing emission hook\n"); |
635 g_print("Emitting signal again after removing emission hook\n"); |
636 #endif |
636 #endif |
637 |
637 |
638 handlernum=0; |
638 handlernum=0; |
639 g_signal_emit (G_OBJECT (test1), g_test_signals[TEST_SIGNAL1], 0, 0); |
639 g_signal_emit (G_OBJECT (test1), my_test_signals[TEST_SIGNAL1], 0, 0); |
640 g_signal_emit (G_OBJECT (test2), g_test_signals[TEST_SIGNAL1], 0, 0); |
640 g_signal_emit (G_OBJECT (test2), my_test_signals[TEST_SIGNAL1], 0, 0); |
641 g_assert(handlernum==0); |
641 g_assert(handlernum==0); |
642 |
642 |
643 g_assert (strcmp ("test-signal1", g_signal_name (g_signal_lookup("test-signal1",G_TYPE_TEST))) == 0); |
643 g_assert (strcmp ("test-signal1", g_signal_name (g_signal_lookup("test-signal1",G_TYPE_TEST))) == 0); |
644 g_assert (strcmp ("test-signal2", g_signal_name (g_signal_lookup("test-signal2",G_TYPE_TEST))) == 0); |
644 g_assert (strcmp ("test-signal2", g_signal_name (g_signal_lookup("test-signal2",G_TYPE_TEST))) == 0); |
645 |
645 |
651 gi=0; |
651 gi=0; |
652 g_signal_list_ids(G_OBJECT_TYPE(test1),&gi); |
652 g_signal_list_ids(G_OBJECT_TYPE(test1),&gi); |
653 g_assert(g_signal_lookup("test-signal1",G_TYPE_TEST)==gi); |
653 g_assert(g_signal_lookup("test-signal1",G_TYPE_TEST)==gi); |
654 |
654 |
655 notifynum=0; |
655 notifynum=0; |
656 g_signal_emitv (&gv, g_test_signals[TEST_SIGNAL1], 0, &gv); |
656 g_signal_emitv (&gv, my_test_signals[TEST_SIGNAL1], 0, &gv); |
657 g_assert(notifynum==1); |
657 g_assert(notifynum==1); |
658 |
658 |
659 g_signal_query(g_signal_lookup("test-signal1",G_TYPE_TEST),&gq); |
659 g_signal_query(g_signal_lookup("test-signal1",G_TYPE_TEST),&gq); |
660 g_assert(strcmp("test-signal1",gq.signal_name)==0); |
660 g_assert(strcmp("test-signal1",gq.signal_name)==0); |
661 g_assert(g_signal_lookup("test-signal1",G_TYPE_TEST)==gq.signal_id); |
661 g_assert(g_signal_lookup("test-signal1",G_TYPE_TEST)==gq.signal_id); |
668 handlernum=g_signal_handlers_unblock_matched(G_OBJECT(test1),G_SIGNAL_MATCH_FUNC,g_signal_lookup("test-signal2",G_TYPE_TEST),NULL,NULL,(gpointer)G_CALLBACK(notify),NULL); |
668 handlernum=g_signal_handlers_unblock_matched(G_OBJECT(test1),G_SIGNAL_MATCH_FUNC,g_signal_lookup("test-signal2",G_TYPE_TEST),NULL,NULL,(gpointer)G_CALLBACK(notify),NULL); |
669 g_assert(notifynum==handlernum); |
669 g_assert(notifynum==handlernum); |
670 |
670 |
671 #endif /*MULTITHREAD*/ |
671 #endif /*MULTITHREAD*/ |
672 |
672 |
673 |
|
674 #ifdef VERBOSE |
673 #ifdef VERBOSE |
675 g_printf ("\nsignals-multithread.c: Completed all tests\n"); |
674 g_printf ("\nsignals-singlethread.c: Completed all tests\n"); |
676 #endif |
675 #endif |
677 |
676 |
678 #endif /*SYMBIAN*/ |
677 #endif /*SYMBIAN*/ |
679 |
678 |
680 |
679 |