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