9bef3c868ab087d9567d28b8dbfd5a7a75dabbe0
[platform/upstream/gobject-introspection.git] / tests / scanner / regress.h
1 #ifndef __GITESTTYPES_H__
2 #define __GITESTTYPES_H__
3
4 #ifndef _GI_DISABLE_CAIRO
5 #include <cairo-gobject.h>
6 #endif
7 #include <glib-object.h>
8 #include <gio/gio.h>
9 #include <time.h>
10 #include <string.h>
11 #include <stdlib.h>
12
13 #include "gitestmacros.h"
14
15 _GI_TEST_EXTERN
16 void regress_set_abort_on_error (gboolean abort_on_error);
17
18 /* basic types */
19 _GI_TEST_EXTERN
20 gboolean regress_test_boolean (gboolean in);
21
22 _GI_TEST_EXTERN
23 gboolean regress_test_boolean_true (gboolean in);
24
25 _GI_TEST_EXTERN
26 gboolean regress_test_boolean_false (gboolean in);
27
28 _GI_TEST_EXTERN
29 gint8 regress_test_int8 (gint8 in);
30
31 _GI_TEST_EXTERN
32 guint8 regress_test_uint8 (guint8 in);
33
34 _GI_TEST_EXTERN
35 gint16 regress_test_int16 (gint16 in);
36
37 _GI_TEST_EXTERN
38 guint16 regress_test_uint16 (guint16 in);
39
40 _GI_TEST_EXTERN
41 gint32 regress_test_int32 (gint32 in);
42
43 _GI_TEST_EXTERN
44 guint32 regress_test_uint32 (guint32 in);
45
46 _GI_TEST_EXTERN
47 gint64 regress_test_int64 (gint64 in);
48
49 _GI_TEST_EXTERN
50 guint64 regress_test_uint64 (guint64 in);
51
52 _GI_TEST_EXTERN
53 gshort regress_test_short (gshort in);
54
55 _GI_TEST_EXTERN
56 gushort regress_test_ushort (gushort in);
57
58 _GI_TEST_EXTERN
59 gint regress_test_int (gint in);
60
61 _GI_TEST_EXTERN
62 guint regress_test_uint (guint in);
63
64 _GI_TEST_EXTERN
65 glong regress_test_long (glong in);
66
67 _GI_TEST_EXTERN
68 gulong regress_test_ulong (gulong in);
69
70 _GI_TEST_EXTERN
71 gssize regress_test_ssize (gssize in);
72
73 _GI_TEST_EXTERN
74 gsize regress_test_size (gsize in);
75
76 _GI_TEST_EXTERN
77 gfloat regress_test_float (gfloat in);
78
79 _GI_TEST_EXTERN
80 gdouble regress_test_double (gdouble in);
81
82 _GI_TEST_EXTERN
83 gunichar regress_test_unichar (gunichar in);
84
85 _GI_TEST_EXTERN
86 time_t regress_test_timet (time_t in);
87
88 _GI_TEST_EXTERN
89 GType regress_test_gtype (GType in);
90
91 /* utf8 */
92 _GI_TEST_EXTERN
93 const char *regress_test_utf8_const_return (void);
94
95 _GI_TEST_EXTERN
96 char *regress_test_utf8_nonconst_return (void);
97
98 _GI_TEST_EXTERN
99 void regress_test_utf8_const_in (const char *in);
100
101 _GI_TEST_EXTERN
102 void regress_test_utf8_out (char **out);
103
104 _GI_TEST_EXTERN
105 void regress_test_utf8_inout (char **inout);
106
107 _GI_TEST_EXTERN
108 GSList *regress_test_filename_return (void);
109
110 _GI_TEST_EXTERN
111 void regress_test_utf8_null_in (char *in);
112
113 _GI_TEST_EXTERN
114 void regress_test_utf8_null_out (char **char_out);
115
116 /* in arguments after out arguments */
117 _GI_TEST_EXTERN
118 void regress_test_int_out_utf8 (int *length, const char *in);
119
120 /* multiple output arguments */
121
122 _GI_TEST_EXTERN
123 void regress_test_multi_double_args (gdouble in, gdouble *one, gdouble *two);
124
125 _GI_TEST_EXTERN
126 void regress_test_utf8_out_out (char **out0, char **out1);
127
128 _GI_TEST_EXTERN
129 char *regress_test_utf8_out_nonconst_return (char **out);
130
131 /* non-basic-types */
132 /* array */
133 _GI_TEST_EXTERN
134 gboolean regress_test_strv_in (char **arr);
135
136 _GI_TEST_EXTERN
137 int regress_test_array_int_in (int n_ints, int *ints);
138
139 _GI_TEST_EXTERN
140 void regress_test_array_int_out (int *n_ints, int **ints);
141
142 _GI_TEST_EXTERN
143 void regress_test_array_int_inout (int *n_ints, int **ints);
144
145 _GI_TEST_EXTERN
146 int regress_test_array_gint8_in (int n_ints, gint8 *ints);
147
148 _GI_TEST_EXTERN
149 int regress_test_array_gint16_in (int n_ints, gint16 *ints);
150
151 _GI_TEST_EXTERN
152 gint32 regress_test_array_gint32_in (int n_ints, gint32 *ints);
153
154 _GI_TEST_EXTERN
155 gint64 regress_test_array_gint64_in (int n_ints, gint64 *ints);
156
157 _GI_TEST_EXTERN
158 char *regress_test_array_gtype_in (int n_types, GType *types);
159
160 _GI_TEST_EXTERN
161 char **regress_test_strv_out_container (void);
162
163 _GI_TEST_EXTERN
164 char **regress_test_strv_out (void);
165
166 _GI_TEST_EXTERN
167 const char * const * regress_test_strv_out_c (void);
168
169 _GI_TEST_EXTERN
170 void   regress_test_strv_outarg (char ***retp);
171
172 _GI_TEST_EXTERN
173 int regress_test_array_fixed_size_int_in (int *ints);
174
175 _GI_TEST_EXTERN
176 void regress_test_array_fixed_size_int_out (int **ints);
177
178 _GI_TEST_EXTERN
179 int *regress_test_array_fixed_size_int_return (void);
180
181 /* transfer tests */
182 _GI_TEST_EXTERN
183 int *regress_test_array_int_full_out(int *len);
184
185 _GI_TEST_EXTERN
186 int *regress_test_array_int_none_out(int *len);
187
188 _GI_TEST_EXTERN
189 void regress_test_array_int_null_in (int *arr, int len);
190
191 _GI_TEST_EXTERN
192 void regress_test_array_int_null_out (int **arr, int *len);
193
194 /* interface */
195 /* GList */
196 _GI_TEST_EXTERN
197 const GList *regress_test_glist_nothing_return (void);
198
199 _GI_TEST_EXTERN
200 GList *regress_test_glist_nothing_return2 (void);
201
202 _GI_TEST_EXTERN
203 GList *regress_test_glist_container_return (void);
204
205 _GI_TEST_EXTERN
206 GList *regress_test_glist_everything_return (void);
207
208 _GI_TEST_EXTERN
209 void regress_test_glist_nothing_in (const GList *in);
210
211 _GI_TEST_EXTERN
212 void regress_test_glist_nothing_in2 (GList *in);
213
214 _GI_TEST_EXTERN
215 void regress_test_glist_null_in(GSList *in);
216
217 _GI_TEST_EXTERN
218 void regress_test_glist_null_out(GSList **out_list);
219
220 /* GSList */
221 _GI_TEST_EXTERN
222 const GSList *regress_test_gslist_nothing_return (void);
223
224 _GI_TEST_EXTERN
225 GSList *regress_test_gslist_nothing_return2 (void);
226
227 _GI_TEST_EXTERN
228 GSList *regress_test_gslist_container_return (void);
229
230 _GI_TEST_EXTERN
231 GSList *regress_test_gslist_everything_return (void);
232
233 _GI_TEST_EXTERN
234 void regress_test_gslist_nothing_in (const GSList *in);
235
236 _GI_TEST_EXTERN
237 void regress_test_gslist_nothing_in2 (GSList *in);
238
239 _GI_TEST_EXTERN
240 void regress_test_gslist_null_in(GSList *in);
241
242 _GI_TEST_EXTERN
243 void regress_test_gslist_null_out(GSList **out_list);
244
245 /* GHashTable */
246 _GI_TEST_EXTERN
247 const GHashTable *regress_test_ghash_null_return (void);
248
249 _GI_TEST_EXTERN
250 const GHashTable *regress_test_ghash_nothing_return (void);
251
252 _GI_TEST_EXTERN
253 GHashTable *regress_test_ghash_nothing_return2 (void);
254
255 _GI_TEST_EXTERN
256 GHashTable *regress_test_ghash_gvalue_return (void);
257
258 _GI_TEST_EXTERN
259 void regress_test_ghash_gvalue_in (GHashTable *hash);
260
261 _GI_TEST_EXTERN
262 GHashTable *regress_test_ghash_container_return (void);
263
264 _GI_TEST_EXTERN
265 GHashTable *regress_test_ghash_everything_return (void);
266
267 _GI_TEST_EXTERN
268 void regress_test_ghash_null_in (const GHashTable *in);
269
270 _GI_TEST_EXTERN
271 void regress_test_ghash_null_out (const GHashTable **out);
272
273 _GI_TEST_EXTERN
274 void regress_test_ghash_nothing_in (const GHashTable *in);
275
276 _GI_TEST_EXTERN
277 void regress_test_ghash_nothing_in2 (GHashTable *in);
278
279 _GI_TEST_EXTERN
280 GHashTable *regress_test_ghash_nested_everything_return (void);
281
282 _GI_TEST_EXTERN
283 GHashTable *regress_test_ghash_nested_everything_return2 (void);
284
285 /* GPtrArray */
286 _GI_TEST_EXTERN
287 GPtrArray *regress_test_garray_container_return (void);
288
289 _GI_TEST_EXTERN
290 GPtrArray *regress_test_garray_full_return (void);
291
292 /* error? */
293
294 /* closure */
295 _GI_TEST_EXTERN
296 int regress_test_closure (GClosure *closure);
297
298 _GI_TEST_EXTERN
299 int regress_test_closure_one_arg (GClosure *closure, int arg);
300
301 _GI_TEST_EXTERN
302 GVariant *regress_test_closure_variant (GClosure *closure, GVariant* arg);
303
304 /* value */
305 _GI_TEST_EXTERN
306 int regress_test_int_value_arg(const GValue *v);
307
308 _GI_TEST_EXTERN
309 const GValue *regress_test_value_return(int i);
310
311 /* foreign structs */
312 #ifndef _GI_DISABLE_CAIRO
313 _GI_TEST_EXTERN
314 cairo_t *regress_test_cairo_context_full_return (void);
315
316 _GI_TEST_EXTERN
317 void regress_test_cairo_context_none_in (cairo_t *context);
318
319
320 _GI_TEST_EXTERN
321 cairo_surface_t *regress_test_cairo_surface_none_return (void);
322
323 _GI_TEST_EXTERN
324 cairo_surface_t *regress_test_cairo_surface_full_return (void);
325
326 _GI_TEST_EXTERN
327 void regress_test_cairo_surface_none_in (cairo_surface_t *surface);
328
329 _GI_TEST_EXTERN
330 void regress_test_cairo_surface_full_out (cairo_surface_t **surface);
331 #endif
332
333 /* versioning (deprecated, since, stability) */
334 _GI_TEST_EXTERN
335 void regress_test_versioning (void);
336
337
338 _GI_TEST_EXTERN
339 GVariant *regress_test_gvariant_i (void);
340
341 _GI_TEST_EXTERN
342 GVariant *regress_test_gvariant_s (void);
343
344 _GI_TEST_EXTERN
345 GVariant *regress_test_gvariant_asv (void);
346
347 _GI_TEST_EXTERN
348 GVariant *regress_test_gvariant_v (void);
349
350 _GI_TEST_EXTERN
351 GVariant *regress_test_gvariant_as (void);
352
353 /* enums / flags */
354
355 #define NUM_REGRESS_FOO
356
357 /**
358  * RegressTestEnum:
359  * @REGRESS_TEST_VALUE1: value 1
360  * @REGRESS_TEST_VALUE2: value 2
361  *
362  * By purpose, not all members have documentation
363  */
364 typedef enum
365 {
366   REGRESS_TEST_VALUE1,
367   REGRESS_TEST_VALUE2,
368   REGRESS_TEST_VALUE3 = -1,
369   REGRESS_TEST_VALUE4 = '0'
370 } RegressTestEnum;
371
372 typedef enum
373 {
374   REGRESS_TEST_UNSIGNED_VALUE1 = 1,
375   REGRESS_TEST_UNSIGNED_VALUE2 = 0x80000000
376 } RegressTestEnumUnsigned;
377
378 typedef enum
379 {
380   REGRESS_TEST_FLAG1 = 1 << 0,
381   REGRESS_TEST_FLAG2 = 1 << 1,
382   REGRESS_TEST_FLAG3 = 1 << 2,
383 } RegressTestFlags;
384
385 _GI_TEST_EXTERN
386 GType regress_test_enum_get_type (void) G_GNUC_CONST;
387 #define REGRESS_TEST_TYPE_ENUM (regress_test_enum_get_type ())
388
389 _GI_TEST_EXTERN
390 GType regress_test_enum_unsigned_get_type (void) G_GNUC_CONST;
391 #define REGRESS_TEST_TYPE_ENUM_UNSIGNED (regress_test_enum_unsigned_get_type ())
392
393 _GI_TEST_EXTERN
394 GType regress_test_flags_get_type (void) G_GNUC_CONST;
395 #define REGRESS_TEST_TYPE_FLAGS (regress_test_flags_get_type ())
396
397 typedef enum
398 {
399   REGRESS_TEST_REFERENCE_0 = 2 + 2,
400   REGRESS_TEST_REFERENCE_1 = 1 + 1,
401   REGRESS_TEST_REFERENCE_2 = 6 * 9,
402   REGRESS_TEST_REFERENCE_3 = REGRESS_TEST_REFERENCE_1 + REGRESS_TEST_REFERENCE_1,
403   REGRESS_TEST_REFERENCE_4 = REGRESS_TEST_REFERENCE_2 * REGRESS_TEST_REFERENCE_3,
404   REGRESS_TEST_REFERENCE_5 = ~REGRESS_TEST_REFERENCE_4,
405 } RegressTestReferenceEnum;
406
407 /* this is not registered with GType */
408 typedef enum
409 {
410   REGRESS_TEST_EVALUE1,
411   REGRESS_TEST_EVALUE2 = 42,
412   REGRESS_TEST_EVALUE3 = '0'
413 } RegressTestEnumNoGEnum;
414
415 _GI_TEST_EXTERN
416 const gchar * regress_test_enum_param(RegressTestEnum e);
417
418 _GI_TEST_EXTERN
419 const gchar * regress_test_unsigned_enum_param(RegressTestEnumUnsigned e);
420
421
422 _GI_TEST_EXTERN
423 void regress_global_get_flags_out (RegressTestFlags *v);
424
425 /* error domains */
426
427 typedef enum
428 {
429   REGRESS_TEST_ERROR_CODE1 = 1,
430   REGRESS_TEST_ERROR_CODE2 = 2,
431   REGRESS_TEST_ERROR_CODE3 = 3
432 } RegressTestError;
433
434 _GI_TEST_EXTERN
435 GType regress_test_error_get_type (void);
436
437 _GI_TEST_EXTERN
438 GQuark regress_test_error_quark (void);
439
440 /* Test weird names, with and without
441    c_symbol_prefix given by a GType
442 */
443 typedef enum
444 {
445   REGRESS_TEST_ABC_ERROR_CODE1 = 1,
446   REGRESS_TEST_ABC_ERROR_CODE2 = 2,
447   REGRESS_TEST_ABC_ERROR_CODE3 = 3
448 } RegressTestABCError;
449
450 _GI_TEST_EXTERN
451 GType regress_test_abc_error_get_type (void);
452
453 _GI_TEST_EXTERN
454 GQuark regress_test_abc_error_quark (void);
455
456 typedef enum
457 {
458   REGRESS_TEST_OTHER_ERROR_CODE1 = 1,
459   REGRESS_TEST_OTHER_ERROR_CODE2 = 2,
460   REGRESS_TEST_OTHER_ERROR_CODE3 = 3
461 } RegressTestOtherError;
462
463 /* This returns a GType for RegressTestOtherError.
464    The difference is intentional, although it
465    is mainly meant for capitalization problems.
466 */
467 _GI_TEST_EXTERN
468 GType regress_test_unconventional_error_get_type (void);
469
470 _GI_TEST_EXTERN
471 GQuark regress_test_unconventional_error_quark (void);
472
473 typedef enum
474 {
475   REGRESS_TEST_DEF_ERROR_CODE0 = 0,
476   REGRESS_TEST_DEF_ERROR_CODE1 = 1,
477   REGRESS_TEST_DEF_ERROR_CODE2 = 2
478 } RegressTestDEFError;
479
480 _GI_TEST_EXTERN
481 GQuark regress_test_def_error_quark (void);
482
483 /* the scanner used to have problem
484    with two uppercase letter right after
485    the identifier prefix, that's why
486    we break the RegressTest convention */
487 typedef enum
488 {
489   REGRESS_ATEST_ERROR_CODE0 = 0,
490   REGRESS_ATEST_ERROR_CODE1 = 1,
491   REGRESS_ATEST_ERROR_CODE2 = 2
492 } RegressATestError;
493
494 _GI_TEST_EXTERN
495 GQuark regress_atest_error_quark (void);
496
497
498 /* constants */
499
500 #define REGRESS_NEGATIVE_INT_CONSTANT -42
501 #define REGRESS_INT_CONSTANT 4422
502 #define REGRESS_DOUBLE_CONSTANT 44.22
503 #define REGRESS_STRING_CONSTANT "Some String"
504 #define REGRESS_Mixed_Case_Constant 4423
505 #define REGRESS_BOOL_CONSTANT TRUE
506 #define REGRESS_G_GINT64_CONSTANT (G_GINT64_CONSTANT (1000))
507 #define REGRESS_GUINT64_CONSTANT ((guint64) -1)
508
509 typedef guint64 RegressTestTypeGUInt64;
510 #define REGRESS_GUINT64_CONSTANTA ((RegressTestTypeGUInt64) -1)
511
512 /* structures */
513 typedef struct _RegressTestStructA RegressTestStructA;
514 typedef struct _RegressTestStructB RegressTestStructB;
515 typedef struct _RegressTestStructC RegressTestStructC;
516 typedef struct _RegressTestStructD RegressTestStructD;
517 typedef struct _RegressTestStructF RegressTestStructF;
518
519 struct _RegressTestStructA
520 {
521   gint some_int;
522   gint8 some_int8;
523   gdouble some_double;
524   RegressTestEnum some_enum;
525 };
526
527 _GI_TEST_EXTERN
528 void regress_test_struct_a_clone (RegressTestStructA *a,
529                                   RegressTestStructA *a_out);
530
531 _GI_TEST_EXTERN
532 void regress_test_struct_a_parse (RegressTestStructA *a_out, const gchar *string);
533
534 struct _RegressTestStructB
535 {
536   gint8 some_int8;
537   RegressTestStructA nested_a;
538 };
539
540 _GI_TEST_EXTERN
541 void regress_test_struct_b_clone (RegressTestStructB *b,
542                           RegressTestStructB *b_out);
543
544 /* This one has a non-basic member */
545 struct _RegressTestStructC
546 {
547   gint another_int;
548   GObject *obj;
549 };
550
551 /* This one has annotated fields */
552 /**
553  * RegressTestStructD:
554  * @array1: (array zero-terminated=1):
555  * @array2: (array zero-terminated=1) (element-type RegressTestObj):
556  * @field: (type RegressTestObj):
557  * @list: (element-type RegressTestObj):
558  * @garray: (element-type RegressTestObj):
559  * @ref_count:
560  */
561 struct _RegressTestStructD
562 {
563   RegressTestStructA **array1;
564   gpointer            *array2;
565   gpointer             field;
566   GList               *list;
567   GPtrArray           *garray;
568 };
569
570 /* This one has an array of anonymous unions, inspired by GValue */
571 struct RegressTestStructE
572 {
573   GType some_type;
574   union {
575     gint        v_int;
576     guint       v_uint;
577     glong       v_long;
578     gulong      v_ulong;
579     gint64      v_int64;
580     guint64     v_uint64;
581     gfloat      v_float;
582     gdouble     v_double;
583     gpointer    v_pointer;
584   } some_union[2];
585 };
586
587 /* This one has members with const or volatile modifiers. */
588 struct _RegressTestStructF
589 {
590   volatile gint   ref_count;
591   const gint     *data1;
592   const gint     *const data2;
593   const gint     *const *const data3;
594   const gint    **const* data4;
595   volatile gint  *const data5;
596   const gint     *volatile data6;
597 };
598
599 /* plain-old-data boxed types */
600 typedef struct _RegressTestSimpleBoxedA RegressTestSimpleBoxedA;
601 typedef struct _RegressTestSimpleBoxedB RegressTestSimpleBoxedB;
602
603 struct _RegressTestSimpleBoxedA
604 {
605   gint some_int;
606   gint8 some_int8;
607   gdouble some_double;
608   RegressTestEnum some_enum;
609 };
610
611 /* Intentionally uses _get_gtype */
612 _GI_TEST_EXTERN
613 GType                   regress_test_simple_boxed_a_get_gtype     (void);
614
615 _GI_TEST_EXTERN
616 RegressTestSimpleBoxedA *regress_test_simple_boxed_a_copy         (RegressTestSimpleBoxedA *a);
617
618 _GI_TEST_EXTERN
619 gboolean                regress_test_simple_boxed_a_equals       (RegressTestSimpleBoxedA *a,
620                                                           RegressTestSimpleBoxedA *other_a);
621
622 _GI_TEST_EXTERN
623 const RegressTestSimpleBoxedA *regress_test_simple_boxed_a_const_return (void);
624
625
626 struct _RegressTestSimpleBoxedB
627 {
628   gint8 some_int8;
629   RegressTestSimpleBoxedA nested_a;
630 };
631
632
633 _GI_TEST_EXTERN
634 GType             regress_test_simple_boxed_b_get_type (void);
635
636 _GI_TEST_EXTERN
637 RegressTestSimpleBoxedB *regress_test_simple_boxed_b_copy     (RegressTestSimpleBoxedB *b);
638
639 /* opaque boxed */
640 #define REGRESS_TEST_TYPE_BOXED (regress_test_boxed_get_type())
641
642 typedef struct _RegressTestBoxed RegressTestBoxed;
643 typedef struct _RegressTestBoxedPrivate RegressTestBoxedPrivate;
644
645 struct _RegressTestBoxed
646 {
647   gint8 some_int8;
648   RegressTestSimpleBoxedA nested_a;
649
650   RegressTestBoxedPrivate *priv;
651 };
652
653 _GI_TEST_EXTERN
654 GType      regress_test_boxed_get_type (void);
655
656 _GI_TEST_EXTERN
657 RegressTestBoxed *regress_test_boxed_new      (void);
658
659 _GI_TEST_EXTERN
660 RegressTestBoxed *regress_test_boxed_new_alternative_constructor1  (int i);
661
662 _GI_TEST_EXTERN
663 RegressTestBoxed *regress_test_boxed_new_alternative_constructor2  (int i, int j);
664
665 _GI_TEST_EXTERN
666 RegressTestBoxed *regress_test_boxed_new_alternative_constructor3  (char *s);
667
668
669 _GI_TEST_EXTERN
670 RegressTestBoxed *regress_test_boxed_copy     (RegressTestBoxed *boxed);
671
672 _GI_TEST_EXTERN
673 gboolean   regress_test_boxed_equals   (RegressTestBoxed *boxed,
674                                         RegressTestBoxed *other);
675
676
677 _GI_TEST_EXTERN
678 void       regress_test_boxeds_not_a_method (RegressTestBoxed *boxed);
679
680 _GI_TEST_EXTERN
681 void       regress_test_boxeds_not_a_static (void);
682
683 typedef struct _RegressTestBoxedB RegressTestBoxedB;
684
685 struct _RegressTestBoxedB
686 {
687   gint8 some_int8;
688   glong some_long;
689 };
690
691
692 _GI_TEST_EXTERN
693 GType regress_test_boxed_b_get_type (void);
694
695 _GI_TEST_EXTERN
696 RegressTestBoxedB *regress_test_boxed_b_new (gint8 some_int8, glong some_long);
697
698 _GI_TEST_EXTERN
699 RegressTestBoxedB *regress_test_boxed_b_copy (RegressTestBoxedB *boxed);
700
701 typedef struct _RegressTestBoxedC RegressTestBoxedC;
702
703 struct _RegressTestBoxedC
704 {
705   guint refcount;
706   guint another_thing;
707 };
708
709 _GI_TEST_EXTERN
710 GType regress_test_boxed_c_get_type (void);
711
712 _GI_TEST_EXTERN
713 RegressTestBoxedC *regress_test_boxed_c_new (void);
714
715 typedef struct _RegressTestBoxedD RegressTestBoxedD;
716
717
718 _GI_TEST_EXTERN
719 GType regress_test_boxed_d_get_type (void);
720
721
722 _GI_TEST_EXTERN
723 RegressTestBoxedD *regress_test_boxed_d_new (const char *a_string, int a_int);
724
725 _GI_TEST_EXTERN
726 RegressTestBoxedD *regress_test_boxed_d_copy (RegressTestBoxedD *boxed);
727
728 _GI_TEST_EXTERN
729 void regress_test_boxed_d_free (RegressTestBoxedD *boxed);
730
731
732 _GI_TEST_EXTERN
733 int regress_test_boxed_d_get_magic (RegressTestBoxedD *boxed);
734
735 /* gobject */
736 #define REGRESS_TEST_TYPE_OBJ              (regress_test_obj_get_type ())
737 #define REGRESS_TEST_OBJECT(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), REGRESS_TEST_TYPE_OBJ, RegressTestObj))
738 #define REGRESS_TEST_IS_OBJECT(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), REGRESS_TEST_TYPE_OBJ))
739 #define REGRESS_TEST_OBJ_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), REGRESS_TEST_TYPE_OBJ, RegressTestObjClass))
740
741 typedef struct _RegressTestObj          RegressTestObj;
742 typedef struct _RegressTestObjClass     RegressTestObjClass;
743
744 /**
745  * RegressTestObj:
746  * @bare: (allow-none):
747  */
748 struct _RegressTestObj
749 {
750   GObject parent_instance;
751
752   GObject *bare;
753   RegressTestBoxed *boxed;
754   GHashTable *hash_table;
755   GList *list;
756   gint8 some_int8;
757   float some_float;
758   double some_double;
759   char* string;
760   GType gtype;
761
762   /* < private > */
763   void (*function_ptr) (void);
764 };
765
766 typedef void (*RegressTestExternallyDefinedCallback) (RegressTestObj *obj, int someint);
767
768 struct _RegressTestObjClass
769 {
770   GObjectClass parent_class;
771
772   int (*matrix) (RegressTestObj *obj, const char *somestr);
773
774   /**
775    * RegressTestObjClass::allow_none_vfunc:
776    * @two: (allow-none): Another object
777    */
778   void (*allow_none_vfunc) (RegressTestObj *obj, RegressTestObj *two);
779
780   guint test_signal;
781   guint test_signal_with_static_scope_arg;
782
783   RegressTestExternallyDefinedCallback complex_vfunc;
784
785   /* Should be replaced with simple "gpointer" and not be callback */
786   void (*_regress_reserved1) (void);
787   void (*_regress_reserved2) (void);
788 };
789
790 _GI_TEST_EXTERN
791 GType      regress_test_obj_get_type (void);
792
793 _GI_TEST_EXTERN
794 RegressTestObj*   regress_test_obj_new (RegressTestObj *obj);
795
796 _GI_TEST_EXTERN
797 RegressTestObj*   regress_constructor (void);
798
799 _GI_TEST_EXTERN
800 RegressTestObj*   regress_test_obj_new_from_file (const char *x, GError **error);
801
802 _GI_TEST_EXTERN
803 void       regress_test_obj_set_bare (RegressTestObj *obj, GObject *bare);
804
805 _GI_TEST_EXTERN
806 void       regress_test_obj_emit_sig_with_obj (RegressTestObj *obj);
807
808 _GI_TEST_EXTERN
809 void       regress_test_obj_emit_sig_with_foreign_struct (RegressTestObj *obj);
810
811 _GI_TEST_EXTERN
812 void       regress_test_obj_emit_sig_with_int64 (RegressTestObj *obj);
813
814 _GI_TEST_EXTERN
815 void       regress_test_obj_emit_sig_with_uint64 (RegressTestObj *obj);
816
817 _GI_TEST_EXTERN
818 int        regress_test_obj_instance_method (RegressTestObj *obj);
819
820 _GI_TEST_EXTERN
821 void       regress_test_obj_instance_method_full (RegressTestObj *obj);
822
823 _GI_TEST_EXTERN
824 double     regress_test_obj_static_method (int x);
825
826 _GI_TEST_EXTERN
827 void       regress_forced_method (RegressTestObj *obj);
828
829
830 _GI_TEST_EXTERN
831 void regress_test_array_fixed_out_objects (RegressTestObj ***objs);
832
833
834 _GI_TEST_EXTERN
835 void regress_test_obj_torture_signature_0 (RegressTestObj    *obj,
836                                    int        x,
837                                    double     *y,
838                                    int        *z,
839                                    const char *foo,
840                                    int        *q,
841                                    guint       m);
842
843 _GI_TEST_EXTERN
844 gboolean regress_test_obj_torture_signature_1 (RegressTestObj    *obj,
845                                        int        x,
846                                        double     *y,
847                                        int        *z,
848                                        const char *foo,
849                                        int        *q,
850                                        guint       m,
851                                        GError    **error);
852
853
854 _GI_TEST_EXTERN
855 gboolean regress_test_obj_skip_return_val (RegressTestObj *obj,
856                                            gint            a,
857                                            gint           *out_b,
858                                            gdouble         c,
859                                            gint           *inout_d,
860                                            gint           *out_sum,
861                                            gint            num1,
862                                            gint            num2,
863                                            GError        **error);
864
865
866 _GI_TEST_EXTERN
867 gboolean regress_test_obj_skip_return_val_no_out (RegressTestObj *obj,
868                                                   gint            a,
869                                                   GError        **error);
870
871
872 _GI_TEST_EXTERN
873 gboolean regress_test_obj_skip_param (RegressTestObj *obj,
874                                       gint            a,
875                                       gint           *out_b,
876                                       gdouble         c,
877                                       gint           *inout_d,
878                                       gint           *out_sum,
879                                       gint            num1,
880                                       gint            num2,
881                                       GError        **error);
882
883
884 _GI_TEST_EXTERN
885 gboolean regress_test_obj_skip_out_param (RegressTestObj *obj,
886                                           gint            a,
887                                           gint           *out_b,
888                                           gdouble         c,
889                                           gint           *inout_d,
890                                           gint           *out_sum,
891                                           gint            num1,
892                                           gint            num2,
893                                           GError        **error);
894
895
896 _GI_TEST_EXTERN
897 gboolean regress_test_obj_skip_inout_param (RegressTestObj *obj,
898                                             gint            a,
899                                             gint           *out_b,
900                                             gdouble         c,
901                                             gint           *inout_d,
902                                             gint           *out_sum,
903                                             gint            num1,
904                                             gint            num2,
905                                             GError        **error);
906
907 /* virtual */
908 _GI_TEST_EXTERN
909 int        regress_test_obj_do_matrix (RegressTestObj *obj, const char *somestr);
910
911
912 _GI_TEST_EXTERN
913 void regress_func_obj_null_in (RegressTestObj *obj);
914
915 _GI_TEST_EXTERN
916 void regress_test_obj_null_out (RegressTestObj **obj);
917
918 /* inheritance */
919 #define REGRESS_TEST_TYPE_SUB_OBJ           (regress_test_sub_obj_get_type ())
920 #define REGRESS_TEST_SUB_OBJECT(object)     (G_TYPE_CHECK_INSTANCE_CAST ((object), REGRESS_TEST_TYPE_SUB_OBJ, RegressTestSubObj))
921 #define REGRESS_TEST_IS_SUB_OBJECT(object)  (G_TYPE_CHECK_INSTANCE_TYPE ((object), REGRESS_TEST_TYPE_SUB_OBJ))
922 #define REGRESS_TEST_SUB_OBJ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), REGRESS_TEST_TYPE_SUB_OBJ, RegressTestSubObjClass))
923
924 typedef struct _RegressTestSubObj         RegressTestSubObj;
925 typedef struct _RegressTestSubObjClass    RegressTestSubObjClass;
926
927 struct _RegressTestSubObj
928 {
929   RegressTestObj parent_instance;
930 };
931
932 struct _RegressTestSubObjClass
933 {
934   RegressTestObjClass parent_class;
935 };
936
937
938 _GI_TEST_EXTERN
939 GType       regress_test_sub_obj_get_type (void);
940
941 _GI_TEST_EXTERN
942 RegressTestObj* regress_test_sub_obj_new (void);
943
944 _GI_TEST_EXTERN
945 void        regress_test_sub_obj_unset_bare (RegressTestSubObj *obj);
946
947 _GI_TEST_EXTERN
948 int         regress_test_sub_obj_instance_method (RegressTestSubObj *obj);
949
950 /* fundamental object */
951 #define REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT            (regress_test_fundamental_object_get_type())
952 #define REGRESS_TEST_IS_FUNDAMENTAL_OBJECT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT))
953 #define REGRESS_TEST_IS_FUNDAMENTAL_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT))
954 #define REGRESS_TEST_FUNDAMENTAL_OBJECT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT, RegressTestFundamentalObjectClass))
955 #define REGRESS_TEST_FUNDAMENTAL_OBJECT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT, RegressTestFundamentalObject))
956 #define REGRESS_TEST_FUNDAMENTAL_OBJECT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT, RegressTestFundamentalObjectClass))
957 #define REGRESS_TEST_FUNDAMENTAL_OBJECT_CAST(obj)       ((RegressTestFundamentalObject*)(obj))
958
959 typedef struct _RegressTestFundamentalObject RegressTestFundamentalObject;
960 typedef struct _RegressTestFundamentalObjectClass RegressTestFundamentalObjectClass;
961 /**
962  * RegressTestFundamentalObjectCopyFunction:
963  *
964  * Returns: (transfer full):
965  */
966 typedef RegressTestFundamentalObject * (*RegressTestFundamentalObjectCopyFunction) (const RegressTestFundamentalObject *obj);
967 typedef void (*RegressTestFundamentalObjectFinalizeFunction) (RegressTestFundamentalObject *obj);
968
969
970 struct _RegressTestFundamentalObject {
971   GTypeInstance instance;
972   gint refcount;
973   guint flags;
974 };
975
976 struct _RegressTestFundamentalObjectClass {
977   GTypeClass type_class;
978
979   RegressTestFundamentalObjectCopyFunction copy;
980   RegressTestFundamentalObjectFinalizeFunction finalize;
981 };
982
983 _GI_TEST_EXTERN
984 GType                  regress_test_fundamental_object_get_type (void);
985
986 _GI_TEST_EXTERN
987 RegressTestFundamentalObject* regress_test_fundamental_object_ref      (RegressTestFundamentalObject *fundamental_object);
988
989 _GI_TEST_EXTERN
990 void                   regress_test_fundamental_object_unref    (RegressTestFundamentalObject *fundamental_object);
991
992 #define REGRESS_TEST_VALUE_HOLDS_FUNDAMENTAL_OBJECT(value)  (G_VALUE_HOLDS(value, REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT))
993
994 _GI_TEST_EXTERN
995 void                   regress_test_value_set_fundamental_object (GValue *value, RegressTestFundamentalObject *fundamental_object);
996
997 _GI_TEST_EXTERN
998 RegressTestFundamentalObject* regress_test_value_get_fundamental_object (const GValue *value);
999
1000 typedef struct _RegressTestFundamentalSubObject RegressTestFundamentalSubObject;
1001 typedef struct _RegressTestFundamentalSubObjectClass RegressTestFundamentalSubObjectClass;
1002
1003 struct _RegressTestFundamentalSubObject
1004 {
1005   RegressTestFundamentalObject fundamental_object;
1006   char *data;
1007 };
1008
1009 struct _RegressTestFundamentalSubObjectClass {
1010   RegressTestFundamentalObjectClass fundamental_object_class;
1011 };
1012
1013
1014 _GI_TEST_EXTERN
1015 GType regress_test_fundamental_sub_object_get_type(void);
1016
1017
1018 _GI_TEST_EXTERN
1019 RegressTestFundamentalSubObject *
1020 regress_test_fundamental_sub_object_new (const char *data);
1021
1022 /* callback */
1023 typedef void (*RegressTestSimpleCallback) (void);
1024 typedef int (*RegressTestCallback) (void);
1025 typedef int (*RegressTestCallbackUserData) (gpointer user_data);
1026 /**
1027  * RegressTestCallbackHashtable:
1028  * @data: (element-type utf8 gint): a hash table; will be modified
1029  */
1030 typedef void (*RegressTestCallbackHashtable) (GHashTable *data);
1031 typedef void (*RegressTestCallbackGError) (const GError *error);
1032 /**
1033  * RegressTestCallbackOwnedGError:
1034  * @error: (transfer full): GError instance; must be freed by the callback
1035  */
1036 typedef void (*RegressTestCallbackOwnedGError) (GError *error);
1037 /**
1038  * RegressTestCallbackFull:
1039  * @foo: the investment rate
1040  * @bar: how much money
1041  * @path: (type filename): Path to file
1042  */
1043 typedef int (*RegressTestCallbackFull) (int foo, double bar, char *path);
1044 /**
1045  * RegressTestCallbackArray:
1046  * @one: (array length=one_length):
1047  * @one_length:
1048  * @two: (array length=two_length) (element-type utf8):
1049  * @two_length:
1050  */
1051 typedef int (*RegressTestCallbackArray) (int *one, gsize one_length, const char** two, int two_length);
1052 /**
1053  * RegressTestCallbackArrayInOut:
1054  * @ints: (inout) (array length=length):
1055  * @length: (inout):
1056  */
1057 typedef void (* RegressTestCallbackArrayInOut) (int **ints, int *length);
1058
1059 _GI_TEST_EXTERN
1060 void regress_test_simple_callback (RegressTestSimpleCallback callback);
1061
1062 _GI_TEST_EXTERN
1063 int regress_test_callback (RegressTestCallback callback);
1064
1065 _GI_TEST_EXTERN
1066 int regress_test_multi_callback (RegressTestCallback callback);
1067
1068 _GI_TEST_EXTERN
1069 int regress_test_array_callback (RegressTestCallbackArray callback);
1070
1071 _GI_TEST_EXTERN
1072 int regress_test_array_inout_callback (RegressTestCallbackArrayInOut callback);
1073
1074 _GI_TEST_EXTERN
1075 int regress_test_callback_user_data (RegressTestCallbackUserData callback,
1076                              gpointer user_data);
1077
1078 _GI_TEST_EXTERN
1079 int regress_test_callback_destroy_notify (RegressTestCallbackUserData callback,
1080                                   gpointer user_data,
1081                                   GDestroyNotify notify);
1082
1083 _GI_TEST_EXTERN
1084 int regress_test_callback_destroy_notify_no_user_data (RegressTestCallbackUserData callback,
1085                                   GDestroyNotify notify);
1086
1087 _GI_TEST_EXTERN
1088 int regress_test_callback_thaw_notifications (void);
1089
1090
1091 _GI_TEST_EXTERN
1092 void regress_test_callback_async (RegressTestCallbackUserData callback, gpointer user_data);
1093
1094 _GI_TEST_EXTERN
1095 int regress_test_callback_thaw_async (void);
1096
1097
1098 _GI_TEST_EXTERN
1099 void regress_test_async_ready_callback (GAsyncReadyCallback callback);
1100
1101
1102 _GI_TEST_EXTERN
1103 void regress_test_obj_instance_method_callback (RegressTestObj *obj, RegressTestCallback callback);
1104
1105 _GI_TEST_EXTERN
1106 void regress_test_obj_static_method_callback (RegressTestCallback callback);
1107
1108 _GI_TEST_EXTERN
1109 RegressTestObj *regress_test_obj_new_callback (RegressTestCallbackUserData callback,
1110                                 gpointer user_data,
1111                                 GDestroyNotify notify);
1112
1113 _GI_TEST_EXTERN
1114 void regress_test_hash_table_callback (GHashTable *data, RegressTestCallbackHashtable callback);
1115
1116 _GI_TEST_EXTERN
1117 void regress_test_gerror_callback (RegressTestCallbackGError callback);
1118
1119 _GI_TEST_EXTERN
1120 void regress_test_null_gerror_callback (RegressTestCallbackGError callback);
1121
1122 _GI_TEST_EXTERN
1123 void regress_test_owned_gerror_callback (RegressTestCallbackOwnedGError callback);
1124
1125
1126 _GI_TEST_EXTERN
1127 void regress_test_skip_unannotated_callback (RegressTestCallback callback);
1128
1129 typedef struct _RegressTestInterface RegressTestInterface;
1130
1131 /* interface */
1132 #define REGRESS_TEST_TYPE_INTERFACE              (regress_test_interface_get_type ())
1133 #define REGRESS_TEST_INTERFACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), REGRESS_TEST_TYPE_INTERFACE, RegressTestInterface))
1134 #define REGRESS_TEST_IS_INTERFACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), REGRESS_TEST_TYPE_INTERFACE))
1135 #define REGRESS_TEST_INTERFACE_GET_IFACE(obj)    (G_TYPE_INSTANCE_GET_INTERFACE ((obj), REGRESS_TEST_TYPE_INTERFACE, RegressTestInterfaceIface))
1136
1137 typedef struct _RegressTestInterfaceIface RegressTestInterfaceIface;
1138
1139 struct _RegressTestInterfaceIface {
1140     GTypeInterface base_iface;
1141 };
1142
1143 _GI_TEST_EXTERN
1144 GType regress_test_interface_get_type (void) G_GNUC_CONST;
1145
1146 /* gobject with non-standard prefix */
1147 #define REGRESS_TEST_TYPE_WI_802_1X              (regress_test_wi_802_1x_get_type ())
1148 #define REGRESS_TEST_WI_802_1X(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), REGRESS_TEST_TYPE_WI_802_1X, RegressTestWi8021x))
1149 #define REGRESS_TEST_IS_WI_802_1X(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), REGRESS_TEST_TYPE_WI_802_1X))
1150 #define REGRESS_TEST_WI_802_1X_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), REGRESS_TEST_TYPE_WI_802_1X, RegressTestWi8021xClass))
1151
1152 typedef struct
1153 {
1154   GObject parent_instance;
1155
1156   gboolean testbool;
1157 } RegressTestWi8021x;
1158
1159 typedef struct
1160 {
1161   GObjectClass parent_class;
1162 } RegressTestWi8021xClass;
1163
1164
1165 _GI_TEST_EXTERN
1166 GType        regress_test_wi_802_1x_get_type (void);
1167
1168 _GI_TEST_EXTERN
1169 RegressTestWi8021x* regress_test_wi_802_1x_new (void);
1170
1171 _GI_TEST_EXTERN
1172 gboolean     regress_test_wi_802_1x_get_testbool (RegressTestWi8021x *obj);
1173
1174 _GI_TEST_EXTERN
1175 void         regress_test_wi_802_1x_set_testbool (RegressTestWi8021x *obj, gboolean v);
1176
1177 _GI_TEST_EXTERN
1178 int          regress_test_wi_802_1x_static_method (int x);
1179
1180 /* floating gobject */
1181 #define REGRESS_TEST_TYPE_FLOATING           (regress_test_floating_get_type ())
1182 #define REGRESS_TEST_FLOATING(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), REGRESS_TEST_TYPE_FLOATING, RegressTestFloating))
1183 #define REGRESS_TEST_IS_FLOATING(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), REGRESS_TEST_TYPE_FLOATING))
1184 #define REGRESS_TEST_FLOATING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), REGRESS_TEST_TYPE_FLOATING, RegressTestFloatingClass))
1185
1186 typedef struct
1187 {
1188   GInitiallyUnowned parent_instance;
1189 } RegressTestFloating;
1190
1191 typedef struct
1192 {
1193   GInitiallyUnownedClass parent_class;
1194 } RegressTestFloatingClass;
1195
1196
1197 _GI_TEST_EXTERN
1198 GType        regress_test_floating_get_type (void);
1199
1200 _GI_TEST_EXTERN
1201 RegressTestFloating* regress_test_floating_new (void);
1202
1203 /* Function signature torture tests */
1204
1205 _GI_TEST_EXTERN
1206 void regress_test_torture_signature_0 (int        x,
1207                                double     *y,
1208                                int        *z,
1209                                const char *foo,
1210                                int        *q,
1211                                guint       m);
1212
1213 _GI_TEST_EXTERN
1214 gboolean regress_test_torture_signature_1 (int        x,
1215                                    double     *y,
1216                                    int        *z,
1217                                    const char *foo,
1218                                    int        *q,
1219                                    guint       m,
1220                                    GError    **error);
1221
1222 _GI_TEST_EXTERN
1223 void regress_test_torture_signature_2 (int                  x,
1224                                        RegressTestCallbackUserData  callback,
1225                                        gpointer              user_data,
1226                                        GDestroyNotify        notify,
1227                                        double               *y,
1228                                        int                  *z,
1229                                        const char           *foo,
1230                                        int                  *q,
1231                                        guint                 m);
1232
1233
1234 _GI_TEST_EXTERN
1235 GValue *regress_test_date_in_gvalue (void);
1236
1237 _GI_TEST_EXTERN
1238 GValue *regress_test_strv_in_gvalue (void);
1239
1240
1241 _GI_TEST_EXTERN
1242 GObject * _regress_this_is_a_private_symbol (void);
1243
1244
1245 _GI_TEST_EXTERN
1246 void regress_test_multiline_doc_comments (void);
1247
1248 _GI_TEST_EXTERN
1249 void regress_test_nested_parameter (int a);
1250
1251 /**
1252  * RegressSkippedStructure: (skip)
1253  *
1254  * This should be skipped, and moreover, all function which
1255  * use it should be.
1256  */
1257 typedef struct
1258 {
1259   int x;
1260   double v;
1261 } RegressSkippedStructure;
1262
1263
1264 _GI_TEST_EXTERN
1265 void regress_random_function_with_skipped_structure (int x,
1266                                                      RegressSkippedStructure *foo,
1267                                                      double v);
1268
1269 /**
1270  * RegressIntset:
1271  *
1272  * Like telepathy-glib's TpIntset.
1273  *
1274  */
1275 typedef struct _RegressIntset RegressIntset;
1276
1277 /**
1278  * RegressIntsetAlias: (skip)
1279  *
1280  * Compatibility typedef, like telepathy-glib's TpIntSet
1281  *
1282  */
1283 typedef RegressIntset RegressIntsetAlias;
1284
1285 /**
1286  * RegressPtrArrayAlias:
1287  *
1288  * Typedef'd GPtrArray for some reason
1289  */
1290 typedef GPtrArray RegressPtrArrayAlias;
1291
1292
1293 _GI_TEST_EXTERN
1294 void regress_introspectable_via_alias (RegressPtrArrayAlias *data);
1295
1296 /**
1297  * RegressVaListAlias:
1298  *
1299  * Typedef'd va_list for additional reasons
1300  */
1301 typedef va_list RegressVaListAlias;
1302
1303
1304 _GI_TEST_EXTERN
1305 void regress_not_introspectable_via_alias (RegressVaListAlias ok);
1306
1307 /**
1308  * RegressAliasedTestBoxed:
1309  *
1310  * Typedef TestBoxed to test caller-allocates correctness
1311  */
1312 typedef RegressTestBoxed RegressAliasedTestBoxed;
1313
1314
1315 _GI_TEST_EXTERN
1316 void regress_aliased_caller_alloc (RegressAliasedTestBoxed *boxed);
1317
1318 /* private testing */
1319
1320 typedef struct {
1321   gint this_is_public_before;
1322   /* < private > */
1323   gint this_is_private;
1324   /* < public > */
1325   gint this_is_public_after;
1326 } RegressTestPrivateStruct;
1327
1328 typedef enum {
1329   REGRESS_TEST_PUBLIC_ENUM_BEFORE = 1 << 0,
1330   /* <private> */
1331   REGRESS_TEST_PRIVATE_ENUM       = 1 << 1,
1332   /* <public> */
1333   REGRESS_TEST_PUBLIC_ENUM_AFTER  = 1 << 2,
1334 } RegressTestPrivateEnum;
1335
1336 typedef struct {
1337   gint just_int;
1338   gint array[10];
1339 } RegressTestStructFixedArray;
1340
1341
1342 _GI_TEST_EXTERN
1343 void regress_test_struct_fixed_array_frob (RegressTestStructFixedArray *str);
1344
1345 typedef struct {
1346   gchar name[32];
1347 } RegressLikeXklConfigItem;
1348
1349
1350 _GI_TEST_EXTERN
1351 void regress_like_xkl_config_item_set_name (RegressLikeXklConfigItem *self,
1352                                             const char *name);
1353
1354 #define REGRESS_UTF8_CONSTANT "const \xe2\x99\xa5 utf8"
1355
1356 #ifdef __GNUC__
1357 #define REGRESS_TEST_GNUC_EXTENSION_STMT(foo) (G_GNUC_EXTENSION ({ int x[10]; x[5] = 42; x[5]; }))
1358 #endif
1359
1360 /* https://bugzilla.gnome.org/show_bug.cgi?id=662888 */
1361 #define REGRESS_LONG_STRING_CONSTANT \
1362         "TYPE,VALUE,ENCODING,CHARSET,LANGUAGE,DOM,INTL,POSTAL,PARCEL," \
1363         "HOME,WORK,PREF,VOICE,FAX,MSG,CELL,PAGER,BBS,MODEM,CAR,ISDN,VIDEO," \
1364         "AOL,APPLELINK,ATTMAIL,CIS,EWORLD,INTERNET,IBMMAIL,MCIMAIL," \
1365         "POWERSHARE,PRODIGY,TLX,X400,GIF,CGM,WMF,BMP,MET,PMB,DIB,PICT,TIFF," \
1366         "PDF,PS,JPEG,QTIME,MPEG,MPEG2,AVI,WAVE,AIFF,PCM,X509,PGP"
1367
1368 _GI_TEST_EXTERN
1369 void regress_has_parameter_named_attrs (int        foo,
1370                                         gpointer   attributes);
1371
1372 typedef struct {
1373   int dummy;
1374   struct {
1375     const char *name;
1376     guint x;
1377   } attributes[32];
1378
1379   double dummy2;
1380 } RegressLikeGnomeKeyringPasswordSchema;
1381
1382 /* Ensure we ignore symbols that start with _; in particular we don't
1383  * want to issue a namespace warning.
1384  */
1385 #define _DONTSCANTHIS 1
1386
1387 /* https://bugzilla.gnome.org/show_bug.cgi?id=685022 */
1388 #define REGRESS_MININT64 ((gint64) G_GINT64_CONSTANT(0x8000000000000000))
1389 #define REGRESS_MAXUINT64 (G_GINT64_CONSTANT(0xffffffffffffffffU))
1390
1391 /* https://bugzilla.gnome.org/show_bug.cgi?id=698367 */
1392 #ifndef __GI_SCANNER__
1393 #define REGRESS_DONTSCANTHIS 1
1394 #else
1395 #define REGRESS_GI_SCANNER_ELSE 3
1396 #endif
1397 #ifndef BLAH
1398 #ifdef __GI_SCANNER__
1399 #define REGRESS_GI_SCANNER_IFDEF 3
1400 #endif
1401 #endif
1402
1403 /* This struct is one pattern by which padding can be consumed, if
1404  * you're willing to take a hard dependency on anonymous unions. */
1405 typedef struct {
1406   int x;
1407
1408   union {
1409     RegressLikeGnomeKeyringPasswordSchema *a[2];
1410
1411     guint padding[4];
1412   };
1413 } RegressAnAnonymousUnion;
1414
1415 #endif /* __GITESTTYPES_H__ */