sl@0
|
1 |
/*
|
sl@0
|
2 |
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
|
sl@0
|
3 |
*
|
sl@0
|
4 |
* This library is free software; you can redistribute it and/or
|
sl@0
|
5 |
* modify it under the terms of the GNU Lesser General Public
|
sl@0
|
6 |
* License as published by the Free Software Foundation; either
|
sl@0
|
7 |
* version 2 of the License, or (at your option) any later version.
|
sl@0
|
8 |
*
|
sl@0
|
9 |
* This library is distributed in the hope that it will be useful,
|
sl@0
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
sl@0
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
sl@0
|
12 |
* Lesser General Public License for more details.
|
sl@0
|
13 |
*
|
sl@0
|
14 |
* You should have received a copy of the GNU Lesser General Public
|
sl@0
|
15 |
* License along with this library; if not, write to the
|
sl@0
|
16 |
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
sl@0
|
17 |
* Boston, MA 02111-1307, USA.
|
sl@0
|
18 |
*
|
sl@0
|
19 |
* Description:
|
sl@0
|
20 |
*
|
sl@0
|
21 |
*/
|
sl@0
|
22 |
|
sl@0
|
23 |
|
sl@0
|
24 |
#undef G_LOG_DOMAIN
|
sl@0
|
25 |
|
sl@0
|
26 |
#undef G_DISABLE_ASSERT
|
sl@0
|
27 |
#undef G_DISABLE_CHECKS
|
sl@0
|
28 |
#undef G_DISABLE_CAST_CHECKS
|
sl@0
|
29 |
|
sl@0
|
30 |
#undef VERBOSE
|
sl@0
|
31 |
#include <stdio.h>
|
sl@0
|
32 |
#include <string.h>
|
sl@0
|
33 |
#include <glib.h>
|
sl@0
|
34 |
#include <gmodule.h>
|
sl@0
|
35 |
|
sl@0
|
36 |
#include <string.h>
|
sl@0
|
37 |
|
sl@0
|
38 |
#include <glib.h>
|
sl@0
|
39 |
#include <glib-object.h>
|
sl@0
|
40 |
|
sl@0
|
41 |
#include "testcommon.h"
|
sl@0
|
42 |
#include <stdlib.h>
|
sl@0
|
43 |
|
sl@0
|
44 |
#ifdef SYMBIAN
|
sl@0
|
45 |
#include "mrt2_glib2_test.h"
|
sl@0
|
46 |
#endif /*SYMBIAN*/
|
sl@0
|
47 |
|
sl@0
|
48 |
typedef struct _BaseObject BaseObject;
|
sl@0
|
49 |
|
sl@0
|
50 |
struct _EphyModule
|
sl@0
|
51 |
{
|
sl@0
|
52 |
GTypeModule parent_instance;
|
sl@0
|
53 |
|
sl@0
|
54 |
GModule *library;
|
sl@0
|
55 |
|
sl@0
|
56 |
char *path;
|
sl@0
|
57 |
GType type;
|
sl@0
|
58 |
guint resident : 1;
|
sl@0
|
59 |
};
|
sl@0
|
60 |
|
sl@0
|
61 |
typedef struct _EphyModule EphyModule;
|
sl@0
|
62 |
|
sl@0
|
63 |
struct _BaseObject
|
sl@0
|
64 |
{
|
sl@0
|
65 |
GObject parent_instance;
|
sl@0
|
66 |
|
sl@0
|
67 |
gint val1;
|
sl@0
|
68 |
gint val2;
|
sl@0
|
69 |
gint val3;
|
sl@0
|
70 |
gint val4;
|
sl@0
|
71 |
};
|
sl@0
|
72 |
static guint foo_signal_id = 0;
|
sl@0
|
73 |
static guint bar_signal_id = 0;
|
sl@0
|
74 |
|
sl@0
|
75 |
static GType test_i_get_type (void);
|
sl@0
|
76 |
static GType test_a_get_type (void);
|
sl@0
|
77 |
static GType test_b_get_type (void);
|
sl@0
|
78 |
static GType test_c_get_type (void);
|
sl@0
|
79 |
|
sl@0
|
80 |
static void record (const gchar *str);
|
sl@0
|
81 |
|
sl@0
|
82 |
#define TEST_TYPE_I (test_i_get_type ())
|
sl@0
|
83 |
#define DERIVED_TYPE_OBJECT (derived_object_get_type ())
|
sl@0
|
84 |
|
sl@0
|
85 |
typedef struct _TestI TestI;
|
sl@0
|
86 |
typedef struct _TestIClass TestIClass;
|
sl@0
|
87 |
|
sl@0
|
88 |
struct _TestIClass
|
sl@0
|
89 |
{
|
sl@0
|
90 |
GTypeInterface base_iface;
|
sl@0
|
91 |
};
|
sl@0
|
92 |
|
sl@0
|
93 |
//Added code
|
sl@0
|
94 |
#define TEST_TYPE_IFACE (test_iface_get_type ())
|
sl@0
|
95 |
#define TEST_IFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_IFACE, TestIface))
|
sl@0
|
96 |
#define TEST_IS_IFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_IFACE))
|
sl@0
|
97 |
#define TEST_IFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TEST_TYPE_IFACE, TestIfaceClass))
|
sl@0
|
98 |
typedef struct _TestIface TestIface;
|
sl@0
|
99 |
typedef struct _TestIfaceClass TestIfaceClass;
|
sl@0
|
100 |
struct _TestIfaceClass
|
sl@0
|
101 |
{
|
sl@0
|
102 |
GTypeInterface base_iface;
|
sl@0
|
103 |
void (*print_string) (TestIface *tiobj,
|
sl@0
|
104 |
const gchar *string);
|
sl@0
|
105 |
};
|
sl@0
|
106 |
static void iface_base_init (TestIfaceClass *iface);
|
sl@0
|
107 |
static void iface_base_finalize (TestIfaceClass *iface);
|
sl@0
|
108 |
static void print_foo (TestIface *tiobj,
|
sl@0
|
109 |
const gchar *string);
|
sl@0
|
110 |
|
sl@0
|
111 |
gpointer my_boxed_copy_function(gpointer boxed)
|
sl@0
|
112 |
{
|
sl@0
|
113 |
return boxed;
|
sl@0
|
114 |
}
|
sl@0
|
115 |
|
sl@0
|
116 |
void my_boxed_free_function(gpointer boxed)
|
sl@0
|
117 |
{
|
sl@0
|
118 |
}
|
sl@0
|
119 |
|
sl@0
|
120 |
GType
|
sl@0
|
121 |
test_iface_get_type (void)
|
sl@0
|
122 |
{
|
sl@0
|
123 |
static GType test_iface_type = 0;
|
sl@0
|
124 |
|
sl@0
|
125 |
if (!test_iface_type)
|
sl@0
|
126 |
{
|
sl@0
|
127 |
static const GTypeInfo test_iface_info =
|
sl@0
|
128 |
{
|
sl@0
|
129 |
sizeof (TestIfaceClass),
|
sl@0
|
130 |
(GBaseInitFunc) iface_base_init, /* base_init */
|
sl@0
|
131 |
(GBaseFinalizeFunc) iface_base_finalize, /* base_finalize */
|
sl@0
|
132 |
};
|
sl@0
|
133 |
|
sl@0
|
134 |
test_iface_type = g_type_register_static (G_TYPE_INTERFACE, "TestIface", &test_iface_info, 0);
|
sl@0
|
135 |
g_type_interface_add_prerequisite (test_iface_type, G_TYPE_OBJECT);
|
sl@0
|
136 |
}
|
sl@0
|
137 |
|
sl@0
|
138 |
return test_iface_type;
|
sl@0
|
139 |
}
|
sl@0
|
140 |
|
sl@0
|
141 |
|
sl@0
|
142 |
static guint iface_base_init_count = 0;
|
sl@0
|
143 |
static void
|
sl@0
|
144 |
iface_base_init (TestIfaceClass *iface)
|
sl@0
|
145 |
{
|
sl@0
|
146 |
iface_base_init_count++;
|
sl@0
|
147 |
if (iface_base_init_count == 1)
|
sl@0
|
148 |
{
|
sl@0
|
149 |
/* add signals here */
|
sl@0
|
150 |
}
|
sl@0
|
151 |
}
|
sl@0
|
152 |
static void
|
sl@0
|
153 |
iface_base_finalize (TestIfaceClass *iface)
|
sl@0
|
154 |
{
|
sl@0
|
155 |
iface_base_init_count--;
|
sl@0
|
156 |
if (iface_base_init_count == 0)
|
sl@0
|
157 |
{
|
sl@0
|
158 |
/* destroy signals here */
|
sl@0
|
159 |
}
|
sl@0
|
160 |
}
|
sl@0
|
161 |
static void
|
sl@0
|
162 |
print_foo (TestIface *tiobj,
|
sl@0
|
163 |
const gchar *string)
|
sl@0
|
164 |
{
|
sl@0
|
165 |
if (!string)
|
sl@0
|
166 |
string = "<NULL>";
|
sl@0
|
167 |
g_print ("Iface-FOO: \"%s\" from %p\n", string, tiobj);
|
sl@0
|
168 |
}
|
sl@0
|
169 |
static void
|
sl@0
|
170 |
test_object_test_iface_init (gpointer giface,
|
sl@0
|
171 |
gpointer iface_data)
|
sl@0
|
172 |
{
|
sl@0
|
173 |
TestIfaceClass *iface = giface;
|
sl@0
|
174 |
|
sl@0
|
175 |
g_assert (iface_data == GUINT_TO_POINTER (42));
|
sl@0
|
176 |
|
sl@0
|
177 |
g_assert (G_TYPE_FROM_INTERFACE (iface) == TEST_TYPE_IFACE);
|
sl@0
|
178 |
|
sl@0
|
179 |
/* assert iface_base_init() was already called */
|
sl@0
|
180 |
g_assert (iface_base_init_count > 0);
|
sl@0
|
181 |
|
sl@0
|
182 |
/* initialize stuff */
|
sl@0
|
183 |
iface->print_string = print_foo;
|
sl@0
|
184 |
}
|
sl@0
|
185 |
|
sl@0
|
186 |
/* --- TestObject --- */
|
sl@0
|
187 |
#define TEST_TYPE_OBJECT (test_object_get_type ())
|
sl@0
|
188 |
#define TEST_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject))
|
sl@0
|
189 |
#define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass))
|
sl@0
|
190 |
#define TEST_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT))
|
sl@0
|
191 |
#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT))
|
sl@0
|
192 |
#define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass))
|
sl@0
|
193 |
#define TEST_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TEST_TYPE_OBJECT, TestObjectPrivate))
|
sl@0
|
194 |
typedef struct _TestObject TestObject;
|
sl@0
|
195 |
typedef struct _TestObjectClass TestObjectClass;
|
sl@0
|
196 |
typedef struct _TestObjectPrivate TestObjectPrivate;
|
sl@0
|
197 |
struct _TestObject
|
sl@0
|
198 |
{
|
sl@0
|
199 |
GObject parent_instance;
|
sl@0
|
200 |
};
|
sl@0
|
201 |
|
sl@0
|
202 |
struct _TestObjectClass
|
sl@0
|
203 |
{
|
sl@0
|
204 |
GObjectClass parent_class;
|
sl@0
|
205 |
|
sl@0
|
206 |
gchar* (*test_signal) (TestObject *tobject,
|
sl@0
|
207 |
TestIface *iface_object,
|
sl@0
|
208 |
gpointer tdata);
|
sl@0
|
209 |
};
|
sl@0
|
210 |
struct _TestObjectPrivate
|
sl@0
|
211 |
{
|
sl@0
|
212 |
int dummy1;
|
sl@0
|
213 |
gdouble dummy2;
|
sl@0
|
214 |
};
|
sl@0
|
215 |
static void test_object_class_init (TestObjectClass *class);
|
sl@0
|
216 |
static void test_object_init (TestObject *tobject);
|
sl@0
|
217 |
static gboolean test_signal_accumulator (GSignalInvocationHint *ihint,
|
sl@0
|
218 |
GValue *return_accu,
|
sl@0
|
219 |
const GValue *handler_return,
|
sl@0
|
220 |
gpointer data);
|
sl@0
|
221 |
static gchar* test_object_test_signal (TestObject *tobject,
|
sl@0
|
222 |
TestIface *iface_object,
|
sl@0
|
223 |
gpointer tdata);
|
sl@0
|
224 |
|
sl@0
|
225 |
|
sl@0
|
226 |
GType
|
sl@0
|
227 |
test_object_get_type (void)
|
sl@0
|
228 |
{
|
sl@0
|
229 |
static GType test_object_type = 0;
|
sl@0
|
230 |
|
sl@0
|
231 |
if (!test_object_type)
|
sl@0
|
232 |
{
|
sl@0
|
233 |
static const GTypeInfo test_object_info =
|
sl@0
|
234 |
{
|
sl@0
|
235 |
sizeof (TestObjectClass),
|
sl@0
|
236 |
NULL, /* base_init */
|
sl@0
|
237 |
NULL, /* base_finalize */
|
sl@0
|
238 |
(GClassInitFunc) test_object_class_init,
|
sl@0
|
239 |
NULL, /* class_finalize */
|
sl@0
|
240 |
NULL, /* class_data */
|
sl@0
|
241 |
sizeof (TestObject),
|
sl@0
|
242 |
5, /* n_preallocs */
|
sl@0
|
243 |
(GInstanceInitFunc) test_object_init,
|
sl@0
|
244 |
};
|
sl@0
|
245 |
GInterfaceInfo iface_info = { test_object_test_iface_init, NULL, GUINT_TO_POINTER (42) };
|
sl@0
|
246 |
|
sl@0
|
247 |
test_object_type = g_type_register_static (G_TYPE_OBJECT, "TestObject", &test_object_info, 0);
|
sl@0
|
248 |
g_type_add_interface_static (test_object_type, TEST_TYPE_IFACE, &iface_info);
|
sl@0
|
249 |
}
|
sl@0
|
250 |
|
sl@0
|
251 |
return test_object_type;
|
sl@0
|
252 |
}
|
sl@0
|
253 |
|
sl@0
|
254 |
static void
|
sl@0
|
255 |
test_object_class_init (TestObjectClass *class)
|
sl@0
|
256 |
{
|
sl@0
|
257 |
/* GObjectClass *gobject_class = G_OBJECT_CLASS (class); */
|
sl@0
|
258 |
guint sig_id;
|
sl@0
|
259 |
GQuark detail;
|
sl@0
|
260 |
gulong hook_id;
|
sl@0
|
261 |
GSignalEmissionHook hook_func;
|
sl@0
|
262 |
gpointer hook_data;
|
sl@0
|
263 |
GDestroyNotify data_destroy;
|
sl@0
|
264 |
gulong handler_id;
|
sl@0
|
265 |
GClosure closure;
|
sl@0
|
266 |
gpointer instance;
|
sl@0
|
267 |
GValue args[2];
|
sl@0
|
268 |
|
sl@0
|
269 |
class->test_signal = test_object_test_signal;
|
sl@0
|
270 |
|
sl@0
|
271 |
sig_id = g_signal_new ("test-signal",
|
sl@0
|
272 |
G_OBJECT_CLASS_TYPE (class),
|
sl@0
|
273 |
G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST | G_SIGNAL_RUN_CLEANUP | G_SIGNAL_DETAILED,
|
sl@0
|
274 |
G_STRUCT_OFFSET (TestObjectClass, test_signal),
|
sl@0
|
275 |
test_signal_accumulator, NULL,
|
sl@0
|
276 |
g_cclosure_marshal_STRING__OBJECT_POINTER,
|
sl@0
|
277 |
G_TYPE_STRING, 2, TEST_TYPE_IFACE, G_TYPE_POINTER);
|
sl@0
|
278 |
|
sl@0
|
279 |
hook_id = g_signal_add_emission_hook ( sig_id,
|
sl@0
|
280 |
detail,
|
sl@0
|
281 |
hook_func,
|
sl@0
|
282 |
"Data",
|
sl@0
|
283 |
data_destroy);
|
sl@0
|
284 |
|
sl@0
|
285 |
|
sl@0
|
286 |
g_type_class_add_private (class, sizeof (TestObjectPrivate));
|
sl@0
|
287 |
}
|
sl@0
|
288 |
|
sl@0
|
289 |
static void
|
sl@0
|
290 |
print_bar (TestIface *tiobj,
|
sl@0
|
291 |
const gchar *string)
|
sl@0
|
292 |
{
|
sl@0
|
293 |
TestIfaceClass *parent_iface;
|
sl@0
|
294 |
|
sl@0
|
295 |
g_return_if_fail (TEST_IS_IFACE (tiobj));
|
sl@0
|
296 |
|
sl@0
|
297 |
if (!string)
|
sl@0
|
298 |
string = "<NULL>";
|
sl@0
|
299 |
g_print ("Iface-BAR: \"%s\" from %p\n", string, tiobj);
|
sl@0
|
300 |
|
sl@0
|
301 |
g_print ("chaining: ");
|
sl@0
|
302 |
parent_iface = g_type_interface_peek_parent (TEST_IFACE_GET_CLASS (tiobj));
|
sl@0
|
303 |
parent_iface->print_string (tiobj, string);
|
sl@0
|
304 |
|
sl@0
|
305 |
g_assert (g_type_interface_peek_parent (parent_iface) == NULL);
|
sl@0
|
306 |
}
|
sl@0
|
307 |
static void
|
sl@0
|
308 |
test_object_init (TestObject *tobject)
|
sl@0
|
309 |
{
|
sl@0
|
310 |
TestObjectPrivate *priv;
|
sl@0
|
311 |
|
sl@0
|
312 |
priv = TEST_OBJECT_GET_PRIVATE (tobject);
|
sl@0
|
313 |
|
sl@0
|
314 |
g_assert (priv);
|
sl@0
|
315 |
g_assert ((gchar *)priv >= (gchar *)tobject + sizeof (TestObject));
|
sl@0
|
316 |
|
sl@0
|
317 |
priv->dummy1 = 54321;
|
sl@0
|
318 |
}
|
sl@0
|
319 |
|
sl@0
|
320 |
static gchar*
|
sl@0
|
321 |
test_object_test_signal (TestObject *tobject,
|
sl@0
|
322 |
TestIface *iface_object,
|
sl@0
|
323 |
gpointer tdata)
|
sl@0
|
324 |
{
|
sl@0
|
325 |
g_message ("::test_signal default_handler called");
|
sl@0
|
326 |
|
sl@0
|
327 |
g_return_val_if_fail (TEST_IS_IFACE (iface_object), NULL);
|
sl@0
|
328 |
|
sl@0
|
329 |
return g_strdup ("<default_handler>");
|
sl@0
|
330 |
}
|
sl@0
|
331 |
static gboolean
|
sl@0
|
332 |
test_signal_accumulator (GSignalInvocationHint *ihint,
|
sl@0
|
333 |
GValue *return_accu,
|
sl@0
|
334 |
const GValue *handler_return,
|
sl@0
|
335 |
gpointer data)
|
sl@0
|
336 |
{
|
sl@0
|
337 |
const gchar *accu_string = g_value_get_string (return_accu);
|
sl@0
|
338 |
const gchar *new_string = g_value_get_string (handler_return);
|
sl@0
|
339 |
gchar *result_string;
|
sl@0
|
340 |
|
sl@0
|
341 |
if (accu_string)
|
sl@0
|
342 |
result_string = g_strconcat (accu_string, new_string, NULL);
|
sl@0
|
343 |
else if (new_string)
|
sl@0
|
344 |
result_string = g_strdup (new_string);
|
sl@0
|
345 |
else
|
sl@0
|
346 |
result_string = NULL;
|
sl@0
|
347 |
|
sl@0
|
348 |
g_value_take_string (return_accu, result_string);
|
sl@0
|
349 |
|
sl@0
|
350 |
return TRUE;
|
sl@0
|
351 |
}
|
sl@0
|
352 |
|
sl@0
|
353 |
static void
|
sl@0
|
354 |
derived_object_test_iface_init (gpointer giface,
|
sl@0
|
355 |
gpointer iface_data)
|
sl@0
|
356 |
{
|
sl@0
|
357 |
TestIfaceClass *iface = giface;
|
sl@0
|
358 |
|
sl@0
|
359 |
g_assert (iface_data == GUINT_TO_POINTER (87));
|
sl@0
|
360 |
|
sl@0
|
361 |
g_assert (G_TYPE_FROM_INTERFACE (iface) == TEST_TYPE_IFACE);
|
sl@0
|
362 |
|
sl@0
|
363 |
/* assert test_object_test_iface_init() was already called */
|
sl@0
|
364 |
g_assert (iface->print_string == print_foo);
|
sl@0
|
365 |
|
sl@0
|
366 |
/* override stuff */
|
sl@0
|
367 |
iface->print_string = print_bar;
|
sl@0
|
368 |
}
|
sl@0
|
369 |
|
sl@0
|
370 |
/* --- DerivedObject --- */
|
sl@0
|
371 |
#define DERIVED_TYPE_OBJECT (derived_object_get_type ())
|
sl@0
|
372 |
#define DERIVED_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), DERIVED_TYPE_OBJECT, DerivedObject))
|
sl@0
|
373 |
#define DERIVED_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DERIVED_TYPE_OBJECT, DerivedObjectClass))
|
sl@0
|
374 |
#define DERIVED_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), DERIVED_TYPE_OBJECT))
|
sl@0
|
375 |
#define DERIVED_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DERIVED_TYPE_OBJECT))
|
sl@0
|
376 |
#define DERIVED_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DERIVED_TYPE_OBJECT, DerivedObjectClass))
|
sl@0
|
377 |
#define DERIVED_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DERIVED_TYPE_OBJECT, DerivedObjectPrivate))
|
sl@0
|
378 |
|
sl@0
|
379 |
typedef struct _DerivedObject DerivedObject;
|
sl@0
|
380 |
typedef struct _TestObjectClass DerivedObjectClass;
|
sl@0
|
381 |
typedef struct _DerivedObjectPrivate DerivedObjectPrivate;
|
sl@0
|
382 |
struct _DerivedObject
|
sl@0
|
383 |
{
|
sl@0
|
384 |
TestObject parent_instance;
|
sl@0
|
385 |
int dummy1;
|
sl@0
|
386 |
int dummy2;
|
sl@0
|
387 |
};
|
sl@0
|
388 |
struct _DerivedObjectPrivate
|
sl@0
|
389 |
{
|
sl@0
|
390 |
char dummy;
|
sl@0
|
391 |
};
|
sl@0
|
392 |
static void derived_object_class_init (DerivedObjectClass *class);
|
sl@0
|
393 |
static void derived_object_init (DerivedObject *dobject);
|
sl@0
|
394 |
|
sl@0
|
395 |
|
sl@0
|
396 |
GType
|
sl@0
|
397 |
derived_object_get_type (void)
|
sl@0
|
398 |
{
|
sl@0
|
399 |
static GType derived_object_type = 0;
|
sl@0
|
400 |
|
sl@0
|
401 |
if (!derived_object_type)
|
sl@0
|
402 |
{
|
sl@0
|
403 |
static const GTypeInfo derived_object_info =
|
sl@0
|
404 |
{
|
sl@0
|
405 |
sizeof (DerivedObjectClass),
|
sl@0
|
406 |
NULL, /* base_init */
|
sl@0
|
407 |
NULL, /* base_finalize */
|
sl@0
|
408 |
(GClassInitFunc) derived_object_class_init,
|
sl@0
|
409 |
NULL, /* class_finalize */
|
sl@0
|
410 |
NULL, /* class_data */
|
sl@0
|
411 |
sizeof (DerivedObject),
|
sl@0
|
412 |
5, /* n_preallocs */
|
sl@0
|
413 |
(GInstanceInitFunc) derived_object_init,
|
sl@0
|
414 |
};
|
sl@0
|
415 |
GInterfaceInfo iface_info = { derived_object_test_iface_init, NULL, GUINT_TO_POINTER (87) };
|
sl@0
|
416 |
|
sl@0
|
417 |
derived_object_type = g_type_register_static (TEST_TYPE_OBJECT, "DerivedObject", &derived_object_info, 0);
|
sl@0
|
418 |
g_type_add_interface_static (derived_object_type, TEST_TYPE_IFACE, &iface_info);
|
sl@0
|
419 |
}
|
sl@0
|
420 |
|
sl@0
|
421 |
return derived_object_type;
|
sl@0
|
422 |
}
|
sl@0
|
423 |
|
sl@0
|
424 |
static void
|
sl@0
|
425 |
derived_object_class_init (DerivedObjectClass *class)
|
sl@0
|
426 |
{
|
sl@0
|
427 |
g_type_class_add_private (class, sizeof (DerivedObjectPrivate));
|
sl@0
|
428 |
}
|
sl@0
|
429 |
static void
|
sl@0
|
430 |
derived_object_init (DerivedObject *dobject)
|
sl@0
|
431 |
{
|
sl@0
|
432 |
TestObjectPrivate *test_priv;
|
sl@0
|
433 |
DerivedObjectPrivate *derived_priv;
|
sl@0
|
434 |
|
sl@0
|
435 |
derived_priv = DERIVED_OBJECT_GET_PRIVATE (dobject);
|
sl@0
|
436 |
|
sl@0
|
437 |
g_assert (derived_priv);
|
sl@0
|
438 |
g_assert ((gchar *)derived_priv >= (gchar *)TEST_OBJECT_GET_PRIVATE (dobject) + sizeof (TestObjectPrivate));
|
sl@0
|
439 |
|
sl@0
|
440 |
test_priv = TEST_OBJECT_GET_PRIVATE (dobject);
|
sl@0
|
441 |
|
sl@0
|
442 |
g_assert (test_priv);
|
sl@0
|
443 |
g_assert ((gchar *)test_priv >= (gchar *)dobject + sizeof (TestObject));
|
sl@0
|
444 |
|
sl@0
|
445 |
}
|
sl@0
|
446 |
|
sl@0
|
447 |
//addition over
|
sl@0
|
448 |
|
sl@0
|
449 |
static void
|
sl@0
|
450 |
test_i_foo (TestI *self)
|
sl@0
|
451 |
{
|
sl@0
|
452 |
record ("TestI::foo");
|
sl@0
|
453 |
}
|
sl@0
|
454 |
|
sl@0
|
455 |
static void
|
sl@0
|
456 |
test_i_default_init (gpointer g_class)
|
sl@0
|
457 |
{
|
sl@0
|
458 |
gint i;
|
sl@0
|
459 |
const char *name;
|
sl@0
|
460 |
GSignalQuery query;
|
sl@0
|
461 |
guint retval;
|
sl@0
|
462 |
guint n_ids[4];
|
sl@0
|
463 |
foo_signal_id = g_signal_newv ("foo",
|
sl@0
|
464 |
TEST_TYPE_I,
|
sl@0
|
465 |
G_SIGNAL_RUN_LAST,
|
sl@0
|
466 |
g_cclosure_new(G_CALLBACK(test_i_foo),
|
sl@0
|
467 |
NULL, NULL),
|
sl@0
|
468 |
NULL, NULL,
|
sl@0
|
469 |
g_cclosure_marshal_VOID__VOID,
|
sl@0
|
470 |
G_TYPE_NONE, 0, NULL);
|
sl@0
|
471 |
|
sl@0
|
472 |
g_assert(!strcmp(g_signal_name(foo_signal_id), "foo"));
|
sl@0
|
473 |
g_signal_query (foo_signal_id, &query);
|
sl@0
|
474 |
g_assert(query.signal_id == foo_signal_id);
|
sl@0
|
475 |
retval = g_signal_lookup("foo",TEST_TYPE_I);
|
sl@0
|
476 |
g_assert(retval == foo_signal_id);
|
sl@0
|
477 |
|
sl@0
|
478 |
g_signal_list_ids (TEST_TYPE_I,
|
sl@0
|
479 |
n_ids);
|
sl@0
|
480 |
g_assert(n_ids[0] == foo_signal_id);
|
sl@0
|
481 |
|
sl@0
|
482 |
i = foo_signal_id ;
|
sl@0
|
483 |
}
|
sl@0
|
484 |
|
sl@0
|
485 |
static DEFINE_IFACE (TestI, test_i, NULL, test_i_default_init)
|
sl@0
|
486 |
|
sl@0
|
487 |
#define TEST_TYPE_A (test_a_get_type())
|
sl@0
|
488 |
|
sl@0
|
489 |
typedef struct _TestA TestA;
|
sl@0
|
490 |
typedef struct _TestAClass TestAClass;
|
sl@0
|
491 |
|
sl@0
|
492 |
struct _TestA {
|
sl@0
|
493 |
GObject parent;
|
sl@0
|
494 |
};
|
sl@0
|
495 |
struct _TestAClass {
|
sl@0
|
496 |
GObjectClass parent_class;
|
sl@0
|
497 |
|
sl@0
|
498 |
void (* bar) (TestA *self);
|
sl@0
|
499 |
};
|
sl@0
|
500 |
|
sl@0
|
501 |
//Dummy function
|
sl@0
|
502 |
gint GMyCompareDataFunc (gconstpointer a,
|
sl@0
|
503 |
gconstpointer b,
|
sl@0
|
504 |
gpointer user_data)
|
sl@0
|
505 |
{
|
sl@0
|
506 |
|
sl@0
|
507 |
return 0;
|
sl@0
|
508 |
}
|
sl@0
|
509 |
|
sl@0
|
510 |
|
sl@0
|
511 |
|
sl@0
|
512 |
//Function to test the apis :
|
sl@0
|
513 |
static void
|
sl@0
|
514 |
test_set_val_apis (void)
|
sl@0
|
515 |
{
|
sl@0
|
516 |
GType type;
|
sl@0
|
517 |
gchar c;
|
sl@0
|
518 |
gchar *p="foo";
|
sl@0
|
519 |
gconstpointer ptr;
|
sl@0
|
520 |
gpointer ret_val = NULL;
|
sl@0
|
521 |
gpointer v_object ;
|
sl@0
|
522 |
gchar *retVal;
|
sl@0
|
523 |
GObject *object;
|
sl@0
|
524 |
GParamFlags flags;
|
sl@0
|
525 |
GParamSpec* paramSpec;
|
sl@0
|
526 |
GParamSpec *gpSpec = (GParamSpec * )g_malloc(sizeof (GParamSpec));
|
sl@0
|
527 |
GValue orig = { 0, };
|
sl@0
|
528 |
GValue orig1 = { 1, };
|
sl@0
|
529 |
GValue xform = { 0, };
|
sl@0
|
530 |
GValue param1 = { 0, };
|
sl@0
|
531 |
GTypeModule module ;
|
sl@0
|
532 |
GEnumValue values[] = { {0,"0","0"}, {1,"1","1"}};
|
sl@0
|
533 |
GValueArray value_array = {
|
sl@0
|
534 |
{
|
sl@0
|
535 |
0
|
sl@0
|
536 |
},
|
sl@0
|
537 |
{
|
sl@0
|
538 |
0
|
sl@0
|
539 |
}};
|
sl@0
|
540 |
|
sl@0
|
541 |
GValueArray *ret_value_array;
|
sl@0
|
542 |
GCompareFunc compare_func;
|
sl@0
|
543 |
GCompareDataFunc compare_func1 = GMyCompareDataFunc;
|
sl@0
|
544 |
GValue *ret_value;
|
sl@0
|
545 |
gpointer user_data;
|
sl@0
|
546 |
GParamSpec *param;
|
sl@0
|
547 |
GQuark detail;
|
sl@0
|
548 |
GValue *return_value;
|
sl@0
|
549 |
GObject *ret_object;
|
sl@0
|
550 |
guint t;
|
sl@0
|
551 |
guint n_children = 10;
|
sl@0
|
552 |
GType *ret_gtype;
|
sl@0
|
553 |
GTypePlugin * ret_plugin;
|
sl@0
|
554 |
guint n_prerequisites = 1;
|
sl@0
|
555 |
const GInterfaceInfo interface_info;
|
sl@0
|
556 |
GType flag_type,boxed_type;
|
sl@0
|
557 |
GFlagsValue flag_value = {0,"0","0"};
|
sl@0
|
558 |
int dummy;
|
sl@0
|
559 |
gpointer boxed_value = &dummy;
|
sl@0
|
560 |
GParamSpec *spec;
|
sl@0
|
561 |
gchar *boxed_variable = "abc";
|
sl@0
|
562 |
|
sl@0
|
563 |
type = g_enum_register_static ("TestEnum", values);
|
sl@0
|
564 |
g_value_init (&orig, type);
|
sl@0
|
565 |
g_value_set_enum (&orig, 5);
|
sl@0
|
566 |
t = g_value_get_enum(&orig);
|
sl@0
|
567 |
g_assert(t == 5);
|
sl@0
|
568 |
|
sl@0
|
569 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
570 |
g_value_init (&xform, G_TYPE_CHAR);
|
sl@0
|
571 |
g_value_set_char (&xform, 10);
|
sl@0
|
572 |
g_assert (xform.data[0].v_int == '\n');
|
sl@0
|
573 |
|
sl@0
|
574 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
575 |
g_value_init (&xform, G_TYPE_DOUBLE);
|
sl@0
|
576 |
g_value_set_double (&xform, 100.00);
|
sl@0
|
577 |
g_assert (xform.data[0].v_double == 100.00);
|
sl@0
|
578 |
g_assert (g_value_get_double (&xform) == 100.00);
|
sl@0
|
579 |
|
sl@0
|
580 |
|
sl@0
|
581 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
582 |
g_value_init (&xform, G_TYPE_FLOAT);
|
sl@0
|
583 |
g_value_set_float (&xform, 1.0);
|
sl@0
|
584 |
g_assert (xform.data[0].v_float == 1.0);
|
sl@0
|
585 |
g_assert (g_value_get_float(&xform) == 1.0);
|
sl@0
|
586 |
|
sl@0
|
587 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
588 |
g_value_init (&xform, G_TYPE_INT64);
|
sl@0
|
589 |
g_value_set_int64 (&xform, 2555);
|
sl@0
|
590 |
g_assert (xform.data[0].v_int64 == 2555);
|
sl@0
|
591 |
|
sl@0
|
592 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
593 |
g_value_init (&xform, G_TYPE_LONG);
|
sl@0
|
594 |
g_value_set_long (&xform, 2555);
|
sl@0
|
595 |
g_assert (xform.data[0].v_long == 2555);
|
sl@0
|
596 |
|
sl@0
|
597 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
598 |
g_value_init (&xform, G_TYPE_UCHAR);
|
sl@0
|
599 |
g_value_set_uchar (&xform, 10);
|
sl@0
|
600 |
g_assert (xform.data[0].v_uint == '\n');
|
sl@0
|
601 |
|
sl@0
|
602 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
603 |
g_value_init (&xform, G_TYPE_UINT);
|
sl@0
|
604 |
g_value_set_uint (&xform, 100);
|
sl@0
|
605 |
g_assert (xform.data[0].v_uint == 100);
|
sl@0
|
606 |
|
sl@0
|
607 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
608 |
g_value_init (&xform, G_TYPE_UINT64);
|
sl@0
|
609 |
g_value_set_uint64 (&xform, 1000000);
|
sl@0
|
610 |
g_assert (xform.data[0].v_uint64 == 1000000);
|
sl@0
|
611 |
|
sl@0
|
612 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
613 |
g_value_init (&xform, G_TYPE_ULONG);
|
sl@0
|
614 |
g_value_set_ulong (&xform, 1000000);
|
sl@0
|
615 |
g_assert (xform.data[0].v_ulong == 1000000);
|
sl@0
|
616 |
|
sl@0
|
617 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
618 |
g_value_init (&xform, G_TYPE_STRING);
|
sl@0
|
619 |
g_value_set_string (&xform, "Hello");
|
sl@0
|
620 |
g_assert (!strcmp(xform.data[0].v_pointer , "Hello"));
|
sl@0
|
621 |
|
sl@0
|
622 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
623 |
g_value_init (&xform, G_TYPE_STRING);
|
sl@0
|
624 |
g_value_set_static_string (&xform, "Hello");
|
sl@0
|
625 |
g_assert (!strcmp(xform.data[0].v_pointer , "Hello"));
|
sl@0
|
626 |
|
sl@0
|
627 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
628 |
g_value_init (&xform, G_TYPE_POINTER);
|
sl@0
|
629 |
g_value_set_pointer (&xform, p);
|
sl@0
|
630 |
g_assert (xform.data[0].v_pointer == p);
|
sl@0
|
631 |
|
sl@0
|
632 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
633 |
g_value_init (&xform, G_TYPE_STRING);
|
sl@0
|
634 |
g_value_set_string (&xform, "World");
|
sl@0
|
635 |
retVal = g_value_dup_string (&xform);
|
sl@0
|
636 |
g_assert (!strcmp(retVal , "World"));
|
sl@0
|
637 |
|
sl@0
|
638 |
ret_value_array = g_value_array_copy (&value_array);
|
sl@0
|
639 |
|
sl@0
|
640 |
g_assert (ret_value_array != NULL );
|
sl@0
|
641 |
|
sl@0
|
642 |
g_value_array_free(ret_value_array);
|
sl@0
|
643 |
|
sl@0
|
644 |
ret_value_array = g_value_array_prepend(&value_array, &orig);
|
sl@0
|
645 |
|
sl@0
|
646 |
g_assert (ret_value_array != NULL );
|
sl@0
|
647 |
|
sl@0
|
648 |
ret_value = g_value_array_get_nth (&value_array, 0);
|
sl@0
|
649 |
|
sl@0
|
650 |
g_assert (ret_value_array != NULL );
|
sl@0
|
651 |
|
sl@0
|
652 |
ret_value_array = g_value_array_sort(&value_array, compare_func);
|
sl@0
|
653 |
|
sl@0
|
654 |
g_assert (ret_value_array != NULL );
|
sl@0
|
655 |
|
sl@0
|
656 |
ret_value_array = g_value_array_sort_with_data (&value_array,
|
sl@0
|
657 |
compare_func1,
|
sl@0
|
658 |
user_data);
|
sl@0
|
659 |
|
sl@0
|
660 |
g_assert (ret_value_array != NULL );
|
sl@0
|
661 |
|
sl@0
|
662 |
|
sl@0
|
663 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
664 |
g_value_init (&xform, G_TYPE_PARAM);
|
sl@0
|
665 |
|
sl@0
|
666 |
g_value_set_param (&xform, NULL);
|
sl@0
|
667 |
|
sl@0
|
668 |
g_assert (&xform != NULL );
|
sl@0
|
669 |
|
sl@0
|
670 |
g_value_set_param_take_ownership(&xform, NULL);
|
sl@0
|
671 |
|
sl@0
|
672 |
g_assert (&xform != NULL );
|
sl@0
|
673 |
|
sl@0
|
674 |
paramSpec = g_value_dup_param (&xform);
|
sl@0
|
675 |
|
sl@0
|
676 |
g_assert (paramSpec == NULL );
|
sl@0
|
677 |
|
sl@0
|
678 |
//g_signal_emitv (&orig, 1, detail, return_value);
|
sl@0
|
679 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
680 |
g_value_init (&xform, G_TYPE_POINTER);
|
sl@0
|
681 |
ret_val = g_value_get_pointer(&xform);
|
sl@0
|
682 |
g_assert (ret_val == NULL );
|
sl@0
|
683 |
|
sl@0
|
684 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
685 |
g_value_init (&xform, G_TYPE_OBJECT);
|
sl@0
|
686 |
ret_object = g_value_dup_object(&xform);
|
sl@0
|
687 |
g_assert (ret_object == NULL );
|
sl@0
|
688 |
g_value_set_object_take_ownership (&xform, NULL);
|
sl@0
|
689 |
|
sl@0
|
690 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
691 |
flag_type = g_flags_register_static("TestFlag",&flag_value);
|
sl@0
|
692 |
g_value_init(&xform , flag_type);
|
sl@0
|
693 |
g_value_set_flags (&xform , 1);
|
sl@0
|
694 |
t = g_value_get_flags (&xform);
|
sl@0
|
695 |
g_assert (t == 1);
|
sl@0
|
696 |
|
sl@0
|
697 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
698 |
boxed_type = g_boxed_type_register_static("TestBoxed",my_boxed_copy_function,my_boxed_free_function);
|
sl@0
|
699 |
g_value_init (&xform, boxed_type);
|
sl@0
|
700 |
g_value_set_boxed (&xform,boxed_variable);
|
sl@0
|
701 |
ret_val = g_value_get_boxed (&xform);
|
sl@0
|
702 |
g_assert (ret_val == boxed_variable);
|
sl@0
|
703 |
|
sl@0
|
704 |
g_value_set_static_boxed (&xform, "abc");
|
sl@0
|
705 |
g_value_set_boxed_take_ownership (&xform, "abc");
|
sl@0
|
706 |
g_assert (&xform != NULL);
|
sl@0
|
707 |
ret_val = g_value_dup_boxed (&xform);
|
sl@0
|
708 |
g_assert (ret_val == boxed_variable);
|
sl@0
|
709 |
|
sl@0
|
710 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
711 |
g_value_init(&xform,G_TYPE_OBJECT);
|
sl@0
|
712 |
ret_val = g_value_get_object(&xform);
|
sl@0
|
713 |
g_assert (ret_val == NULL);
|
sl@0
|
714 |
|
sl@0
|
715 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
716 |
g_value_init (&xform, G_TYPE_PARAM);
|
sl@0
|
717 |
spec = g_param_spec_int
|
sl@0
|
718 |
(
|
sl@0
|
719 |
"property-a", /* property name */
|
sl@0
|
720 |
"a", /* nickname */
|
sl@0
|
721 |
"Mysterty value 1", /* description */
|
sl@0
|
722 |
5, /* minimum */
|
sl@0
|
723 |
10, /* maximum */
|
sl@0
|
724 |
5, /* default */
|
sl@0
|
725 |
G_PARAM_READABLE |G_PARAM_WRITABLE /* GParamSpecFlags */
|
sl@0
|
726 |
);
|
sl@0
|
727 |
g_value_set_param(&xform,spec);
|
sl@0
|
728 |
param = g_value_get_param(&xform);
|
sl@0
|
729 |
g_assert (param == spec);
|
sl@0
|
730 |
|
sl@0
|
731 |
ret_gtype = g_type_children (G_TYPE_INT, &n_children);
|
sl@0
|
732 |
g_assert (ret_gtype != NULL);
|
sl@0
|
733 |
free(ret_gtype);
|
sl@0
|
734 |
|
sl@0
|
735 |
ret_plugin = g_type_interface_get_plugin (G_TYPE_INT, G_TYPE_INTERFACE);
|
sl@0
|
736 |
g_assert (ret_plugin == NULL);
|
sl@0
|
737 |
|
sl@0
|
738 |
ret_gtype = g_type_interface_prerequisites (G_TYPE_INTERFACE,&n_prerequisites);
|
sl@0
|
739 |
g_assert (ret_gtype != NULL);
|
sl@0
|
740 |
free(ret_gtype);
|
sl@0
|
741 |
|
sl@0
|
742 |
//g_type_module_set_name (&module, "Name");
|
sl@0
|
743 |
//g_object_set_property (object,
|
sl@0
|
744 |
// NULL,
|
sl@0
|
745 |
// &xform);
|
sl@0
|
746 |
// g_type_class_unref_uncached (NULL);*/
|
sl@0
|
747 |
|
sl@0
|
748 |
}
|
sl@0
|
749 |
|
sl@0
|
750 |
//Function to test the apis
|
sl@0
|
751 |
|
sl@0
|
752 |
static void
|
sl@0
|
753 |
test_param_spec_apis (void)
|
sl@0
|
754 |
{
|
sl@0
|
755 |
GParamFlags flags;
|
sl@0
|
756 |
GParamSpec* paramSpec;
|
sl@0
|
757 |
gchar *qdata = "abc";
|
sl@0
|
758 |
GQuark quark = g_quark_from_string(qdata);
|
sl@0
|
759 |
gpointer retVal;
|
sl@0
|
760 |
gpointer data= "MY data";
|
sl@0
|
761 |
gchar *testData;
|
sl@0
|
762 |
GDestroyNotify destroy;
|
sl@0
|
763 |
GType type;
|
sl@0
|
764 |
gboolean ret;
|
sl@0
|
765 |
GValue orig = { 0, };
|
sl@0
|
766 |
GValue xform = { 0, };
|
sl@0
|
767 |
GEnumValue values[] = { {0,"0","0"}, {1,"1","1"}};
|
sl@0
|
768 |
GFlagsValue flag_value = {1,"1","1"};
|
sl@0
|
769 |
GType enum_type,flags_type,boxed_type;
|
sl@0
|
770 |
memset (&orig, 0, sizeof (GValue));
|
sl@0
|
771 |
g_value_init (&orig, G_TYPE_POINTER);
|
sl@0
|
772 |
|
sl@0
|
773 |
memset (&xform, 0, sizeof (GValue));
|
sl@0
|
774 |
g_value_init (&xform, G_TYPE_POINTER);
|
sl@0
|
775 |
|
sl@0
|
776 |
paramSpec = g_param_spec_uchar("String1","Hello","World", 0,100,10, flags);
|
sl@0
|
777 |
|
sl@0
|
778 |
g_assert (!strcmp(paramSpec->_nick , "Hello"));
|
sl@0
|
779 |
|
sl@0
|
780 |
paramSpec = g_param_spec_uint("String2","Hello","World", 0,255,50, flags);
|
sl@0
|
781 |
|
sl@0
|
782 |
g_assert (!strcmp(paramSpec->name , "String2"));
|
sl@0
|
783 |
|
sl@0
|
784 |
paramSpec = g_param_spec_uint64("String3","Hello","World", 0,255555,1000, flags);
|
sl@0
|
785 |
|
sl@0
|
786 |
g_assert (!strcmp(paramSpec->name , "String3"));
|
sl@0
|
787 |
|
sl@0
|
788 |
paramSpec = g_param_spec_ulong("String4","Hello","World", 0,255,100, flags);
|
sl@0
|
789 |
|
sl@0
|
790 |
g_assert (!strcmp(paramSpec->name , "String4"));
|
sl@0
|
791 |
|
sl@0
|
792 |
paramSpec = g_param_spec_unichar("String5","Hello","World",'X', flags);
|
sl@0
|
793 |
|
sl@0
|
794 |
g_assert (!strcmp(paramSpec->name , "String5"));
|
sl@0
|
795 |
|
sl@0
|
796 |
paramSpec = g_param_spec_string("String6","Hello","World","String", flags);
|
sl@0
|
797 |
|
sl@0
|
798 |
g_assert (!strcmp(paramSpec->name , "String6"));
|
sl@0
|
799 |
|
sl@0
|
800 |
paramSpec = g_param_spec_int64("String7","Hello","World",-100,25555,500, flags);
|
sl@0
|
801 |
|
sl@0
|
802 |
g_assert (!strcmp(paramSpec->name , "String7"));
|
sl@0
|
803 |
|
sl@0
|
804 |
paramSpec = g_param_spec_long("String8","Hello","World",-100,2555,100, flags);
|
sl@0
|
805 |
|
sl@0
|
806 |
g_assert (!strcmp(paramSpec->name , "String8"));
|
sl@0
|
807 |
|
sl@0
|
808 |
g_param_spec_set_qdata(paramSpec,quark,qdata);
|
sl@0
|
809 |
retVal = g_param_spec_steal_qdata(paramSpec, quark);
|
sl@0
|
810 |
g_assert (retVal == qdata);
|
sl@0
|
811 |
|
sl@0
|
812 |
g_param_spec_set_qdata(paramSpec,100, data);
|
sl@0
|
813 |
|
sl@0
|
814 |
retVal = g_param_spec_get_qdata(paramSpec,100);
|
sl@0
|
815 |
|
sl@0
|
816 |
testData = (gchar *)retVal;
|
sl@0
|
817 |
|
sl@0
|
818 |
g_assert (!strcmp(testData , "MY data"));
|
sl@0
|
819 |
|
sl@0
|
820 |
g_param_spec_set_qdata_full (paramSpec, 200, data, destroy);
|
sl@0
|
821 |
|
sl@0
|
822 |
retVal = g_param_spec_get_qdata(paramSpec, 200);
|
sl@0
|
823 |
testData = (gchar *)retVal;
|
sl@0
|
824 |
g_assert (!strcmp(testData , "MY data"));
|
sl@0
|
825 |
|
sl@0
|
826 |
paramSpec = g_param_spec_object("String9","Hello","World",G_TYPE_OBJECT,flags);
|
sl@0
|
827 |
g_assert (!strcmp(paramSpec->name , "String9"));
|
sl@0
|
828 |
|
sl@0
|
829 |
paramSpec = g_param_spec_param("String10","Hello","World",G_TYPE_PARAM,flags);
|
sl@0
|
830 |
|
sl@0
|
831 |
g_assert (!strcmp(paramSpec->name , "String10"));
|
sl@0
|
832 |
|
sl@0
|
833 |
paramSpec = g_param_spec_pointer("String11", "Hello", "World", flags);
|
sl@0
|
834 |
|
sl@0
|
835 |
g_assert (!strcmp(paramSpec->name , "String11"));
|
sl@0
|
836 |
|
sl@0
|
837 |
ret = g_param_value_convert (paramSpec, &orig, &xform, TRUE);
|
sl@0
|
838 |
|
sl@0
|
839 |
g_assert (ret == TRUE);
|
sl@0
|
840 |
|
sl@0
|
841 |
ret = g_param_value_defaults(paramSpec , &xform);
|
sl@0
|
842 |
|
sl@0
|
843 |
g_assert (ret == TRUE);
|
sl@0
|
844 |
|
sl@0
|
845 |
paramSpec = g_param_spec_value_array ("String12", "Hello", "World", NULL, flags);
|
sl@0
|
846 |
|
sl@0
|
847 |
g_assert (!strcmp(paramSpec->name , "String12"));
|
sl@0
|
848 |
|
sl@0
|
849 |
paramSpec = g_param_spec_float("String13","Hello", "World",0.00,255.00,100.00,flags);
|
sl@0
|
850 |
|
sl@0
|
851 |
g_assert (!strcmp(paramSpec->name , "String13"));
|
sl@0
|
852 |
|
sl@0
|
853 |
paramSpec = g_param_spec_flags("String14","Hello", "World",G_TYPE_FLAGS,0,flags);
|
sl@0
|
854 |
|
sl@0
|
855 |
g_assert (!strcmp(paramSpec->name , "String14"));
|
sl@0
|
856 |
|
sl@0
|
857 |
paramSpec = g_param_spec_double("String15","Hello", "World", 0.00,25554.00,100.00,flags);
|
sl@0
|
858 |
|
sl@0
|
859 |
g_assert (!strcmp(paramSpec->name , "String15"));
|
sl@0
|
860 |
|
sl@0
|
861 |
paramSpec = g_param_spec_char("String16","Hello", "World", 'a','z','c',flags);
|
sl@0
|
862 |
|
sl@0
|
863 |
g_assert (!strcmp(paramSpec->name , "String16"));
|
sl@0
|
864 |
|
sl@0
|
865 |
paramSpec = g_param_spec_boolean("String17", "Hello", "World",TRUE,flags);
|
sl@0
|
866 |
|
sl@0
|
867 |
g_assert (!strcmp(paramSpec->name , "String17"));
|
sl@0
|
868 |
|
sl@0
|
869 |
flags_type = g_flags_register_static("TestFlag1",&flag_value);
|
sl@0
|
870 |
paramSpec = g_param_spec_flags ("String18", "Hello", "World", flags_type, 1, flags);
|
sl@0
|
871 |
g_assert (!strcmp(paramSpec->name , "String18"));
|
sl@0
|
872 |
|
sl@0
|
873 |
enum_type = g_enum_register_static("TestEnum1",values);
|
sl@0
|
874 |
paramSpec = g_param_spec_enum ("String19", "Hello", "World", enum_type, 0, flags);
|
sl@0
|
875 |
g_assert (!strcmp(paramSpec->name , "String19"));
|
sl@0
|
876 |
|
sl@0
|
877 |
boxed_type = g_boxed_type_register_static("TestBoxed1",my_boxed_copy_function,my_boxed_free_function);
|
sl@0
|
878 |
paramSpec = g_param_spec_boxed ("String20", "Hello", "World", boxed_type, flags);
|
sl@0
|
879 |
g_assert (!strcmp(paramSpec->name , "String20"));
|
sl@0
|
880 |
|
sl@0
|
881 |
}
|
sl@0
|
882 |
|
sl@0
|
883 |
static void test_object_apis()
|
sl@0
|
884 |
{
|
sl@0
|
885 |
BaseObject *object;
|
sl@0
|
886 |
EphyModule *module;
|
sl@0
|
887 |
GObjectClass *object_class;
|
sl@0
|
888 |
GParamSpec **properties;
|
sl@0
|
889 |
gint n_properties;
|
sl@0
|
890 |
gpointer p = "Hello";
|
sl@0
|
891 |
|
sl@0
|
892 |
gint val1, val2, val3, val4;
|
sl@0
|
893 |
|
sl@0
|
894 |
g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
|
sl@0
|
895 |
G_LOG_LEVEL_WARNING |
|
sl@0
|
896 |
G_LOG_LEVEL_CRITICAL);
|
sl@0
|
897 |
|
sl@0
|
898 |
g_type_init ();
|
sl@0
|
899 |
|
sl@0
|
900 |
object = g_object_new (DERIVED_TYPE_OBJECT , NULL);
|
sl@0
|
901 |
#if 0
|
sl@0
|
902 |
module = g_object_new (EPHY_TYPE_MODULE, NULL);
|
sl@0
|
903 |
|
sl@0
|
904 |
ephy_module_new_object(module);
|
sl@0
|
905 |
g_type_module_set_name (G_TYPE_MODULE (module),
|
sl@0
|
906 |
"name");
|
sl@0
|
907 |
|
sl@0
|
908 |
#endif
|
sl@0
|
909 |
|
sl@0
|
910 |
}
|
sl@0
|
911 |
|
sl@0
|
912 |
|
sl@0
|
913 |
|
sl@0
|
914 |
static void
|
sl@0
|
915 |
test_a_foo (TestI *self)
|
sl@0
|
916 |
{
|
sl@0
|
917 |
GValue args[1] = { { 0, } };
|
sl@0
|
918 |
|
sl@0
|
919 |
record ("TestA::foo");
|
sl@0
|
920 |
|
sl@0
|
921 |
g_value_init (&args[0], TEST_TYPE_A);
|
sl@0
|
922 |
g_value_set_object (&args[0], self);
|
sl@0
|
923 |
|
sl@0
|
924 |
g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id);
|
sl@0
|
925 |
|
sl@0
|
926 |
g_signal_chain_from_overridden (args, NULL);
|
sl@0
|
927 |
|
sl@0
|
928 |
g_value_unset (&args[0]);
|
sl@0
|
929 |
}
|
sl@0
|
930 |
|
sl@0
|
931 |
static void
|
sl@0
|
932 |
test_a_bar (TestA *self)
|
sl@0
|
933 |
{
|
sl@0
|
934 |
record ("TestA::bar");
|
sl@0
|
935 |
}
|
sl@0
|
936 |
|
sl@0
|
937 |
static void
|
sl@0
|
938 |
test_a_class_init (TestAClass *class)
|
sl@0
|
939 |
{
|
sl@0
|
940 |
class->bar = test_a_bar;
|
sl@0
|
941 |
|
sl@0
|
942 |
bar_signal_id = g_signal_new ("bar",
|
sl@0
|
943 |
TEST_TYPE_A,
|
sl@0
|
944 |
G_SIGNAL_RUN_LAST,
|
sl@0
|
945 |
G_STRUCT_OFFSET (TestAClass, bar),
|
sl@0
|
946 |
NULL, NULL,
|
sl@0
|
947 |
g_cclosure_marshal_VOID__VOID,
|
sl@0
|
948 |
G_TYPE_NONE, 0, NULL);
|
sl@0
|
949 |
}
|
sl@0
|
950 |
|
sl@0
|
951 |
static void
|
sl@0
|
952 |
test_a_interface_init (TestIClass *iface)
|
sl@0
|
953 |
{
|
sl@0
|
954 |
g_signal_override_class_closure (foo_signal_id,
|
sl@0
|
955 |
TEST_TYPE_A,
|
sl@0
|
956 |
g_cclosure_new (G_CALLBACK (test_a_foo),
|
sl@0
|
957 |
NULL, NULL));
|
sl@0
|
958 |
}
|
sl@0
|
959 |
|
sl@0
|
960 |
static DEFINE_TYPE_FULL (TestA, test_a,
|
sl@0
|
961 |
test_a_class_init, NULL, NULL,
|
sl@0
|
962 |
G_TYPE_OBJECT,
|
sl@0
|
963 |
INTERFACE (test_a_interface_init, TEST_TYPE_I))
|
sl@0
|
964 |
|
sl@0
|
965 |
#define TEST_TYPE_B (test_b_get_type())
|
sl@0
|
966 |
|
sl@0
|
967 |
typedef struct _TestB TestB;
|
sl@0
|
968 |
typedef struct _TestBClass TestBClass;
|
sl@0
|
969 |
|
sl@0
|
970 |
struct _TestB {
|
sl@0
|
971 |
TestA parent;
|
sl@0
|
972 |
};
|
sl@0
|
973 |
struct _TestBClass {
|
sl@0
|
974 |
TestAClass parent_class;
|
sl@0
|
975 |
};
|
sl@0
|
976 |
|
sl@0
|
977 |
static void
|
sl@0
|
978 |
test_b_foo (TestA *self)
|
sl@0
|
979 |
{
|
sl@0
|
980 |
GValue args[1] = { { 0, } };
|
sl@0
|
981 |
|
sl@0
|
982 |
record ("TestB::foo");
|
sl@0
|
983 |
|
sl@0
|
984 |
g_value_init (&args[0], TEST_TYPE_A);
|
sl@0
|
985 |
g_value_set_object (&args[0], self);
|
sl@0
|
986 |
|
sl@0
|
987 |
g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id);
|
sl@0
|
988 |
g_signal_chain_from_overridden (args, NULL);
|
sl@0
|
989 |
|
sl@0
|
990 |
g_value_unset (&args[0]);
|
sl@0
|
991 |
}
|
sl@0
|
992 |
|
sl@0
|
993 |
static void
|
sl@0
|
994 |
test_b_bar (TestI *self)
|
sl@0
|
995 |
{
|
sl@0
|
996 |
GValue args[1] = { { 0, } };
|
sl@0
|
997 |
|
sl@0
|
998 |
record ("TestB::bar");
|
sl@0
|
999 |
|
sl@0
|
1000 |
g_value_init (&args[0], TEST_TYPE_A);
|
sl@0
|
1001 |
g_value_set_object (&args[0], self);
|
sl@0
|
1002 |
|
sl@0
|
1003 |
g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id);
|
sl@0
|
1004 |
g_signal_chain_from_overridden (args, NULL);
|
sl@0
|
1005 |
|
sl@0
|
1006 |
g_value_unset (&args[0]);
|
sl@0
|
1007 |
}
|
sl@0
|
1008 |
|
sl@0
|
1009 |
static void
|
sl@0
|
1010 |
test_b_class_init (TestBClass *class)
|
sl@0
|
1011 |
{
|
sl@0
|
1012 |
g_signal_override_class_closure (foo_signal_id,
|
sl@0
|
1013 |
TEST_TYPE_B,
|
sl@0
|
1014 |
g_cclosure_new (G_CALLBACK (test_b_foo),
|
sl@0
|
1015 |
NULL, NULL));
|
sl@0
|
1016 |
g_signal_override_class_closure (bar_signal_id,
|
sl@0
|
1017 |
TEST_TYPE_B,
|
sl@0
|
1018 |
g_cclosure_new (G_CALLBACK (test_b_bar),
|
sl@0
|
1019 |
NULL, NULL));
|
sl@0
|
1020 |
}
|
sl@0
|
1021 |
|
sl@0
|
1022 |
static DEFINE_TYPE (TestB, test_b,
|
sl@0
|
1023 |
test_b_class_init, NULL, NULL,
|
sl@0
|
1024 |
TEST_TYPE_A)
|
sl@0
|
1025 |
|
sl@0
|
1026 |
#define TEST_TYPE_C (test_c_get_type())
|
sl@0
|
1027 |
|
sl@0
|
1028 |
typedef struct _TestC TestC;
|
sl@0
|
1029 |
typedef struct _TestCClass TestCClass;
|
sl@0
|
1030 |
|
sl@0
|
1031 |
struct _TestC {
|
sl@0
|
1032 |
TestB parent;
|
sl@0
|
1033 |
};
|
sl@0
|
1034 |
struct _TestCClass {
|
sl@0
|
1035 |
TestBClass parent_class;
|
sl@0
|
1036 |
};
|
sl@0
|
1037 |
|
sl@0
|
1038 |
static void
|
sl@0
|
1039 |
test_c_foo (TestA *self)
|
sl@0
|
1040 |
{
|
sl@0
|
1041 |
GValue args[1] = { { 0, } };
|
sl@0
|
1042 |
|
sl@0
|
1043 |
record ("TestC::foo");
|
sl@0
|
1044 |
|
sl@0
|
1045 |
g_value_init (&args[0], TEST_TYPE_A);
|
sl@0
|
1046 |
g_value_set_object (&args[0], self);
|
sl@0
|
1047 |
|
sl@0
|
1048 |
g_assert (g_signal_get_invocation_hint (self)->signal_id == foo_signal_id);
|
sl@0
|
1049 |
g_signal_chain_from_overridden (args, NULL);
|
sl@0
|
1050 |
|
sl@0
|
1051 |
g_value_unset (&args[0]);
|
sl@0
|
1052 |
}
|
sl@0
|
1053 |
|
sl@0
|
1054 |
static void
|
sl@0
|
1055 |
test_c_bar (TestI *self)
|
sl@0
|
1056 |
{
|
sl@0
|
1057 |
GValue args[1] = { { 0, } };
|
sl@0
|
1058 |
|
sl@0
|
1059 |
record ("TestC::bar");
|
sl@0
|
1060 |
|
sl@0
|
1061 |
g_value_init (&args[0], TEST_TYPE_A);
|
sl@0
|
1062 |
g_value_set_object (&args[0], self);
|
sl@0
|
1063 |
|
sl@0
|
1064 |
g_assert (g_signal_get_invocation_hint (self)->signal_id == bar_signal_id);
|
sl@0
|
1065 |
g_signal_chain_from_overridden (args, NULL);
|
sl@0
|
1066 |
|
sl@0
|
1067 |
g_value_unset (&args[0]);
|
sl@0
|
1068 |
}
|
sl@0
|
1069 |
|
sl@0
|
1070 |
static void
|
sl@0
|
1071 |
test_c_class_init (TestBClass *class)
|
sl@0
|
1072 |
{
|
sl@0
|
1073 |
g_signal_override_class_closure (foo_signal_id,
|
sl@0
|
1074 |
TEST_TYPE_C,
|
sl@0
|
1075 |
g_cclosure_new (G_CALLBACK (test_c_foo),
|
sl@0
|
1076 |
NULL, NULL));
|
sl@0
|
1077 |
g_signal_override_class_closure (bar_signal_id,
|
sl@0
|
1078 |
TEST_TYPE_C,
|
sl@0
|
1079 |
g_cclosure_new (G_CALLBACK (test_c_bar),
|
sl@0
|
1080 |
NULL, NULL));
|
sl@0
|
1081 |
}
|
sl@0
|
1082 |
|
sl@0
|
1083 |
|
sl@0
|
1084 |
static DEFINE_TYPE (TestC, test_c,
|
sl@0
|
1085 |
test_c_class_init, NULL, NULL,
|
sl@0
|
1086 |
TEST_TYPE_B)
|
sl@0
|
1087 |
|
sl@0
|
1088 |
static GString *test_string = NULL;
|
sl@0
|
1089 |
gboolean failed = FALSE;
|
sl@0
|
1090 |
|
sl@0
|
1091 |
static void
|
sl@0
|
1092 |
record (const gchar *str)
|
sl@0
|
1093 |
{
|
sl@0
|
1094 |
if (test_string->len)
|
sl@0
|
1095 |
g_string_append_c (test_string, ',');
|
sl@0
|
1096 |
g_string_append (test_string, str);
|
sl@0
|
1097 |
}
|
sl@0
|
1098 |
|
sl@0
|
1099 |
int
|
sl@0
|
1100 |
main (int argc, char **argv)
|
sl@0
|
1101 |
{
|
sl@0
|
1102 |
gpointer p;
|
sl@0
|
1103 |
|
sl@0
|
1104 |
#ifdef SYMBIAN
|
sl@0
|
1105 |
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);
|
sl@0
|
1106 |
#endif /*SYMBIAN*/
|
sl@0
|
1107 |
|
sl@0
|
1108 |
g_type_init();
|
sl@0
|
1109 |
|
sl@0
|
1110 |
test_i_default_init(p);
|
sl@0
|
1111 |
|
sl@0
|
1112 |
test_set_val_apis();
|
sl@0
|
1113 |
|
sl@0
|
1114 |
test_param_spec_apis();
|
sl@0
|
1115 |
|
sl@0
|
1116 |
test_object_apis();
|
sl@0
|
1117 |
|
sl@0
|
1118 |
#if SYMBIAN
|
sl@0
|
1119 |
testResultXml("g_test1");
|
sl@0
|
1120 |
#endif /* EMULATOR */
|
sl@0
|
1121 |
|
sl@0
|
1122 |
return failed ? 1 : 0;
|
sl@0
|
1123 |
}
|
sl@0
|
1124 |
|