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