1#include <gtk/gtk.h>
2
3static void
4simple (void)
5{
6 GtkWidget *box = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 0);
7 GtkWidget *l = gtk_label_new (str: "");
8
9 gtk_box_append (GTK_BOX (box), child: l);
10
11 g_assert_true (gtk_widget_get_parent (l) == box);
12 g_assert_null (gtk_widget_get_prev_sibling (l));
13 g_assert_null (gtk_widget_get_next_sibling (l));
14 g_assert_null (gtk_widget_get_first_child (l));
15 g_assert_null (gtk_widget_get_last_child (l));
16
17 g_assert_true (gtk_widget_get_first_child (box) == l);
18 g_assert_true (gtk_widget_get_last_child (box) == l);
19}
20
21static void
22two (void)
23{
24 GtkWidget *box = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 0);
25 GtkWidget *l1 = gtk_label_new (str: "");
26 GtkWidget *l2 = gtk_label_new (str: "");
27
28 gtk_box_append (GTK_BOX (box), child: l1);
29 gtk_box_append (GTK_BOX (box), child: l2);
30
31 g_assert_true (gtk_widget_get_parent (l1) == box);
32 g_assert_null (gtk_widget_get_prev_sibling (l1));
33 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
34
35 g_assert_true (gtk_widget_get_parent (l2) == box);
36 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
37 g_assert_null (gtk_widget_get_next_sibling (l2));
38
39 g_assert_true (gtk_widget_get_first_child (box) == l1);
40 g_assert_true (gtk_widget_get_last_child (box) == l2);
41}
42
43static void
44prepend (void)
45{
46 GtkWidget *p = gtk_label_new (str: "");
47 GtkWidget *l1 = gtk_label_new (str: "");
48 GtkWidget *l2 = gtk_label_new (str: "");
49
50 gtk_widget_set_parent (widget: l1, parent: p);
51 gtk_widget_insert_after (widget: l2, parent: p, NULL);
52
53 /* l2 should now be *before* l1 */
54
55 g_assert_true (gtk_widget_get_parent (l1) == p);
56 g_assert_true (gtk_widget_get_prev_sibling (l1) == l2);
57 g_assert_null (gtk_widget_get_next_sibling (l1));
58
59 g_assert_true (gtk_widget_get_parent (l2) == p);
60 g_assert_null (gtk_widget_get_prev_sibling (l2));
61 g_assert_true (gtk_widget_get_next_sibling (l2) == l1);
62
63 g_assert_true (gtk_widget_get_first_child (p) == l2);
64 g_assert_true (gtk_widget_get_last_child (p) == l1);
65}
66
67static void
68append (void)
69{
70 GtkWidget *p = gtk_label_new (str: "");
71 GtkWidget *l1 = gtk_label_new (str: "");
72 GtkWidget *l2 = gtk_label_new (str: "");
73
74 gtk_widget_set_parent (widget: l1, parent: p);
75 gtk_widget_insert_before (widget: l2, parent: p, NULL);
76
77 g_assert_true (gtk_widget_get_parent (l1) == p);
78 g_assert_null (gtk_widget_get_prev_sibling (l1));
79 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
80
81 g_assert_true (gtk_widget_get_parent (l2) == p);
82 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
83 g_assert_null (gtk_widget_get_next_sibling (l2));
84
85 g_assert_true (gtk_widget_get_first_child (p) == l1);
86 g_assert_true (gtk_widget_get_last_child (p) == l2);
87}
88
89static void
90insert_after (void)
91{
92 GtkWidget *p = gtk_label_new (str: "");
93 GtkWidget *l1 = gtk_label_new (str: "");
94 GtkWidget *l2 = gtk_label_new (str: "");
95 GtkWidget *l3 = gtk_label_new (str: "");
96
97 gtk_widget_set_parent (widget: l1, parent: p);
98 gtk_widget_set_parent (widget: l3, parent: p);
99
100 g_assert_true (gtk_widget_get_parent (l1) == p);
101 g_assert_null (gtk_widget_get_prev_sibling (l1));
102 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
103
104 g_assert_true (gtk_widget_get_parent (l3) == p);
105 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
106 g_assert_null (gtk_widget_get_next_sibling (l3));
107
108 g_assert_true (gtk_widget_get_first_child (p) == l1);
109 g_assert_true (gtk_widget_get_last_child (p) == l3);
110
111 /* Now add l2 between l1 and l3 */
112 gtk_widget_insert_after (widget: l2, parent: p, previous_sibling: l1);
113
114 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
115
116 g_assert_true (gtk_widget_get_parent (l2) == p);
117 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
118 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
119
120 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
121
122 g_assert_true (gtk_widget_get_first_child (p) == l1);
123 g_assert_true (gtk_widget_get_last_child (p) == l3);
124}
125
126static void
127insert_before (void)
128{
129 GtkWidget *p = gtk_label_new (str: "");
130 GtkWidget *l1 = gtk_label_new (str: "");
131 GtkWidget *l2 = gtk_label_new (str: "");
132 GtkWidget *l3 = gtk_label_new (str: "");
133
134 gtk_widget_set_parent (widget: l1, parent: p);
135 gtk_widget_set_parent (widget: l3, parent: p);
136
137 g_assert_true (gtk_widget_get_parent (l1) == p);
138 g_assert_null (gtk_widget_get_prev_sibling (l1));
139 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
140
141 g_assert_true (gtk_widget_get_parent (l3) == p);
142 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
143 g_assert_null (gtk_widget_get_next_sibling (l3));
144
145 g_assert_true (gtk_widget_get_first_child (p) == l1);
146 g_assert_true (gtk_widget_get_last_child (p) == l3);
147
148 /* Now add l2 between l1 and l3 */
149 gtk_widget_insert_before (widget: l2, parent: p, next_sibling: l3);
150
151 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
152
153 g_assert_true (gtk_widget_get_parent (l2) == p);
154 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
155 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
156
157 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
158
159 g_assert_true (gtk_widget_get_first_child (p) == l1);
160 g_assert_true (gtk_widget_get_last_child (p) == l3);
161}
162
163static void
164insert_after_self (void)
165{
166 GtkWidget *p = gtk_label_new (str: "");
167 GtkWidget *l = gtk_label_new (str: "");
168
169 gtk_widget_insert_after (widget: l, parent: p, NULL);
170
171 g_assert_true (gtk_widget_get_parent (l) == p);
172 g_assert_null (gtk_widget_get_prev_sibling (l));
173 g_assert_null (gtk_widget_get_next_sibling (l));
174 g_assert_null (gtk_widget_get_first_child (l));
175 g_assert_null (gtk_widget_get_last_child (l));
176
177 g_assert_true (gtk_widget_get_first_child (p) == l);
178 g_assert_true (gtk_widget_get_last_child (p) == l);
179
180 /* Insert l after l */
181 gtk_widget_insert_after (widget: l, parent: p, previous_sibling: l);
182
183 g_assert_true (gtk_widget_get_parent (l) == p);
184 g_assert_null (gtk_widget_get_prev_sibling (l));
185 g_assert_null (gtk_widget_get_next_sibling (l));
186 g_assert_null (gtk_widget_get_first_child (l));
187 g_assert_null (gtk_widget_get_last_child (l));
188
189 g_assert_true (gtk_widget_get_first_child (p) == l);
190 g_assert_true (gtk_widget_get_last_child (p) == l);
191}
192
193static void
194insert_before_self (void)
195{
196 GtkWidget *p = gtk_label_new (str: "");
197 GtkWidget *l = gtk_label_new (str: "");
198
199 gtk_widget_insert_before (widget: l, parent: p, NULL);
200
201 g_assert_true (gtk_widget_get_parent (l) == p);
202 g_assert_null (gtk_widget_get_prev_sibling (l));
203 g_assert_null (gtk_widget_get_next_sibling (l));
204 g_assert_null (gtk_widget_get_first_child (l));
205 g_assert_null (gtk_widget_get_last_child (l));
206
207 g_assert_true (gtk_widget_get_first_child (p) == l);
208 g_assert_true (gtk_widget_get_last_child (p) == l);
209
210 /* Insert l before l */
211 gtk_widget_insert_before (widget: l, parent: p, next_sibling: l);
212
213 g_assert_true (gtk_widget_get_parent (l) == p);
214 g_assert_null (gtk_widget_get_prev_sibling (l));
215 g_assert_null (gtk_widget_get_next_sibling (l));
216 g_assert_null (gtk_widget_get_first_child (l));
217 g_assert_null (gtk_widget_get_last_child (l));
218
219 g_assert_true (gtk_widget_get_first_child (p) == l);
220 g_assert_true (gtk_widget_get_last_child (p) == l);
221}
222
223static void
224reorder_after (void)
225{
226 GtkWidget *p = gtk_label_new (str: "");
227 GtkWidget *l1 = gtk_label_new (str: "");
228 GtkWidget *l2 = gtk_label_new (str: "");
229 GtkWidget *l3 = gtk_label_new (str: "");
230
231 gtk_widget_set_parent (widget: l1, parent: p);
232 gtk_widget_set_parent (widget: l3, parent: p);
233
234 g_assert_true (gtk_widget_get_parent (l1) == p);
235 g_assert_null (gtk_widget_get_prev_sibling (l1));
236 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
237
238 g_assert_true (gtk_widget_get_parent (l3) == p);
239 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
240 g_assert_null (gtk_widget_get_next_sibling (l3));
241
242 g_assert_true (gtk_widget_get_first_child (p) == l1);
243 g_assert_true (gtk_widget_get_last_child (p) == l3);
244
245 /* Now add l2 between l1 and l3 */
246 gtk_widget_insert_before (widget: l2, parent: p, next_sibling: l3);
247
248 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
249
250 g_assert_true (gtk_widget_get_parent (l2) == p);
251 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
252 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
253
254 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
255
256 g_assert_true (gtk_widget_get_first_child (p) == l1);
257 g_assert_true (gtk_widget_get_last_child (p) == l3);
258
259 /* The order is now l1, l2, l3. Now reorder l3 after l1 so
260 * the correct order is l1, l3, l2 */
261
262 gtk_widget_insert_after (widget: l3, parent: p, previous_sibling: l1);
263
264 g_assert_null (gtk_widget_get_prev_sibling (l1));
265 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
266
267 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
268 g_assert_true (gtk_widget_get_next_sibling (l3) == l2);
269
270 g_assert_true (gtk_widget_get_prev_sibling (l2) == l3);
271 g_assert_null (gtk_widget_get_next_sibling (l2));
272
273 g_assert_true (gtk_widget_get_first_child (p) == l1);
274 g_assert_true (gtk_widget_get_last_child (p) == l2);
275}
276
277static void
278reorder_before (void)
279{
280 GtkWidget *p = gtk_label_new (str: "");
281 GtkWidget *l1 = gtk_label_new (str: "");
282 GtkWidget *l2 = gtk_label_new (str: "");
283 GtkWidget *l3 = gtk_label_new (str: "");
284
285 gtk_widget_set_parent (widget: l1, parent: p);
286 gtk_widget_set_parent (widget: l3, parent: p);
287
288 g_assert_true (gtk_widget_get_parent (l1) == p);
289 g_assert_null (gtk_widget_get_prev_sibling (l1));
290 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
291
292 g_assert_true (gtk_widget_get_parent (l3) == p);
293 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
294 g_assert_null (gtk_widget_get_next_sibling (l3));
295
296 g_assert_true (gtk_widget_get_first_child (p) == l1);
297 g_assert_true (gtk_widget_get_last_child (p) == l3);
298
299 /* Now add l2 between l1 and l3 */
300 gtk_widget_insert_before (widget: l2, parent: p, next_sibling: l3);
301
302 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
303
304 g_assert_true (gtk_widget_get_parent (l2) == p);
305 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
306 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
307
308 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
309
310 g_assert_true (gtk_widget_get_first_child (p) == l1);
311 g_assert_true (gtk_widget_get_last_child (p) == l3);
312
313 /* The order is now l1, l2, l3. Now reorder l3 before l2 so
314 * the correct order is l1, l3, l2 */
315
316 gtk_widget_insert_before (widget: l3, parent: p, next_sibling: l2);
317
318 g_assert_null (gtk_widget_get_prev_sibling (l1));
319 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
320
321 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
322 g_assert_true (gtk_widget_get_next_sibling (l3) == l2);
323
324 g_assert_true (gtk_widget_get_prev_sibling (l2) == l3);
325 g_assert_null (gtk_widget_get_next_sibling (l2));
326
327 g_assert_true (gtk_widget_get_first_child (p) == l1);
328 g_assert_true (gtk_widget_get_last_child (p) == l2);
329}
330
331static void
332reorder_start (void)
333{
334 GtkWidget *p = gtk_label_new (str: "");
335 GtkWidget *l1 = gtk_label_new (str: "");
336 GtkWidget *l2 = gtk_label_new (str: "");
337 GtkWidget *l3 = gtk_label_new (str: "");
338
339 gtk_widget_set_parent (widget: l1, parent: p);
340 gtk_widget_set_parent (widget: l3, parent: p);
341
342 g_assert_true (gtk_widget_get_parent (l1) == p);
343 g_assert_null (gtk_widget_get_prev_sibling (l1));
344 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
345
346 g_assert_true (gtk_widget_get_parent (l3) == p);
347 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
348 g_assert_null (gtk_widget_get_next_sibling (l3));
349
350 g_assert_true (gtk_widget_get_first_child (p) == l1);
351 g_assert_true (gtk_widget_get_last_child (p) == l3);
352
353 /* Now add l2 between l1 and l3 */
354 gtk_widget_insert_before (widget: l2, parent: p, next_sibling: l3);
355
356 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
357
358 g_assert_true (gtk_widget_get_parent (l2) == p);
359 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
360 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
361
362 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
363
364 g_assert_true (gtk_widget_get_first_child (p) == l1);
365 g_assert_true (gtk_widget_get_last_child (p) == l3);
366
367 /* The order is now l1, l2, l3. Now reorder l3 to the start so
368 * the correct order is l3, l1, l2 */
369
370 gtk_widget_insert_after (widget: l3, parent: p, NULL);
371
372 g_assert_true (gtk_widget_get_prev_sibling (l1) == l3);
373 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
374
375 g_assert_null (gtk_widget_get_prev_sibling (l3));
376 g_assert_true (gtk_widget_get_next_sibling (l3) == l1);
377
378 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
379 g_assert_null (gtk_widget_get_next_sibling (l2));
380
381 g_assert_true (gtk_widget_get_first_child (p) == l3);
382 g_assert_true (gtk_widget_get_last_child (p) == l2);
383}
384
385static void
386reorder_end (void)
387{
388 GtkWidget *p = gtk_label_new (str: "");
389 GtkWidget *l1 = gtk_label_new (str: "");
390 GtkWidget *l2 = gtk_label_new (str: "");
391 GtkWidget *l3 = gtk_label_new (str: "");
392
393 gtk_widget_set_parent (widget: l1, parent: p);
394 gtk_widget_set_parent (widget: l3, parent: p);
395
396 g_assert_true (gtk_widget_get_parent (l1) == p);
397 g_assert_null (gtk_widget_get_prev_sibling (l1));
398 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
399
400 g_assert_true (gtk_widget_get_parent (l3) == p);
401 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
402 g_assert_null (gtk_widget_get_next_sibling (l3));
403
404 g_assert_true (gtk_widget_get_first_child (p) == l1);
405 g_assert_true (gtk_widget_get_last_child (p) == l3);
406
407 /* Now add l2 between l1 and l3 */
408 gtk_widget_insert_before (widget: l2, parent: p, next_sibling: l3);
409
410 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
411
412 g_assert_true (gtk_widget_get_parent (l2) == p);
413 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
414 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
415
416 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
417
418 g_assert_true (gtk_widget_get_first_child (p) == l1);
419 g_assert_true (gtk_widget_get_last_child (p) == l3);
420
421 /* The order is now l1, l2, l3. Now reorder l1 to the end so
422 * the correct order is l2, l3, l1 */
423
424 gtk_widget_insert_before (widget: l1, parent: p, NULL);
425
426 g_assert_true (gtk_widget_get_prev_sibling (l1) == l3);
427 g_assert_null (gtk_widget_get_next_sibling (l1));
428
429 g_assert_true (gtk_widget_get_prev_sibling (l3) == l2);
430 g_assert_true (gtk_widget_get_next_sibling (l3) == l1);
431
432 g_assert_null (gtk_widget_get_prev_sibling (l2));
433 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
434
435 g_assert_true (gtk_widget_get_first_child (p) == l2);
436 g_assert_true (gtk_widget_get_last_child (p) == l1);
437}
438
439static void
440same_after (void)
441{
442 GtkWidget *p = gtk_label_new (str: "");
443 GtkWidget *l1 = gtk_label_new (str: "");
444 GtkWidget *l2 = gtk_label_new (str: "");
445
446 gtk_widget_set_parent (widget: l1, parent: p);
447 gtk_widget_set_parent (widget: l2, parent: p);
448
449 g_assert_true (gtk_widget_get_parent (l1) == p);
450 g_assert_null (gtk_widget_get_prev_sibling (l1));
451 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
452
453 g_assert_true (gtk_widget_get_parent (l2) == p);
454 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
455 g_assert_null (gtk_widget_get_next_sibling (l2));
456
457 g_assert_true (gtk_widget_get_first_child (p) == l1);
458 g_assert_true (gtk_widget_get_last_child (p) == l2);
459
460 /* l2 is already after l1, so this shouldn't change anything! */
461 gtk_widget_insert_after (widget: l2, parent: p, previous_sibling: l1);
462
463 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
464 g_assert_null (gtk_widget_get_next_sibling (l2));
465
466 g_assert_null (gtk_widget_get_prev_sibling (l1));
467 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
468
469 g_assert_true (gtk_widget_get_first_child (p) == l1);
470 g_assert_true (gtk_widget_get_last_child (p) == l2);
471}
472
473static void
474same_before (void)
475{
476 GtkWidget *p = gtk_label_new (str: "");
477 GtkWidget *l1 = gtk_label_new (str: "");
478 GtkWidget *l2 = gtk_label_new (str: "");
479
480 gtk_widget_set_parent (widget: l1, parent: p);
481 gtk_widget_set_parent (widget: l2, parent: p);
482
483 g_assert_true (gtk_widget_get_parent (l1) == p);
484 g_assert_null (gtk_widget_get_prev_sibling (l1));
485 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
486
487 g_assert_true (gtk_widget_get_parent (l2) == p);
488 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
489 g_assert_null (gtk_widget_get_next_sibling (l2));
490
491 g_assert_true (gtk_widget_get_first_child (p) == l1);
492 g_assert_true (gtk_widget_get_last_child (p) == l2);
493
494 /* l1 is already before l2, so this shouldn't change anything! */
495 gtk_widget_insert_before (widget: l1, parent: p, next_sibling: l2);
496
497 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
498 g_assert_null (gtk_widget_get_next_sibling (l2));
499
500 g_assert_null (gtk_widget_get_prev_sibling (l1));
501 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
502
503 g_assert_true (gtk_widget_get_first_child (p) == l1);
504 g_assert_true (gtk_widget_get_last_child (p) == l2);
505}
506
507static void
508no_loop (void)
509{
510 GtkWidget *p = gtk_label_new (str: "");
511 GtkWidget *l1 = gtk_label_new (str: "");
512 GtkWidget *l2 = gtk_label_new (str: "");
513 GtkWidget *l3 = gtk_label_new (str: "");
514
515 gtk_widget_set_parent (widget: l1, parent: p);
516 gtk_widget_set_parent (widget: l2, parent: p);
517 gtk_widget_set_parent (widget: l3, parent: p);
518
519 /* l1 -> l2 -> l3 */
520
521 gtk_widget_insert_after (widget: l1, parent: p, previous_sibling: l3);
522 /* Now: l2 -> l3 -> l1 */
523 g_assert_null (gtk_widget_get_prev_sibling (l2));
524 g_assert_true (gtk_widget_get_next_sibling (l2) == l3);
525 g_assert_true (gtk_widget_get_next_sibling (l3) == l1);
526 g_assert_null (gtk_widget_get_next_sibling (l1));
527 g_assert_true (gtk_widget_get_prev_sibling (l1) == l3);
528
529 gtk_widget_insert_after (widget: l2, parent: p, previous_sibling: l1);
530 /* Now: l3 -> l1 -> l2 */
531 g_assert_null (gtk_widget_get_prev_sibling (l3));
532 g_assert_true (gtk_widget_get_next_sibling (l3) == l1);
533 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
534 g_assert_true (gtk_widget_get_prev_sibling (l1) == l3);
535 g_assert_true (gtk_widget_get_prev_sibling (l2) == l1);
536 g_assert_null (gtk_widget_get_next_sibling (l2));
537
538 gtk_widget_insert_after (widget: l1, parent: p, NULL);
539 /* Now: l1 -> l3 -> l2 */
540 g_assert_null (gtk_widget_get_prev_sibling (l1));
541 g_assert_true (gtk_widget_get_next_sibling (l1) == l3);
542 g_assert_true (gtk_widget_get_next_sibling (l3) == l2);
543 g_assert_true (gtk_widget_get_prev_sibling (l3) == l1);
544 g_assert_true (gtk_widget_get_prev_sibling (l2) == l3);
545 g_assert_null (gtk_widget_get_next_sibling (l2));
546}
547
548static void
549reorder_refcount (void)
550{
551 GtkWidget *p = gtk_label_new (str: "");
552 GtkWidget *l1 = gtk_label_new (str: "");
553 GtkWidget *l2 = gtk_label_new (str: "");
554
555 g_assert_true (g_object_is_floating (l1));
556 g_assert_cmpint (G_OBJECT (l1)->ref_count, ==, 1);
557
558 gtk_widget_set_parent (widget: l1, parent: p);
559
560 g_assert_true (!g_object_is_floating (l1));
561 g_assert_cmpint (G_OBJECT (l1)->ref_count, ==, 1);
562
563 g_assert_true (g_object_is_floating (l2));
564 g_assert_cmpint (G_OBJECT (l2)->ref_count, ==, 1);
565
566 gtk_widget_set_parent (widget: l2, parent: p);
567
568 g_assert_true (!g_object_is_floating (l2));
569 g_assert_cmpint (G_OBJECT (l2)->ref_count, ==, 1);
570
571 g_assert_true (gtk_widget_get_next_sibling (l1) == l2);
572
573 gtk_widget_insert_before (widget: l2, parent: p, next_sibling: l1);
574
575 g_assert_true (gtk_widget_get_prev_sibling (l1) == l2);
576
577 g_assert_cmpint (G_OBJECT (l1)->ref_count, ==, 1);
578 g_assert_cmpint (G_OBJECT (l2)->ref_count, ==, 1);
579
580 gtk_widget_unparent (widget: l1);
581 gtk_widget_unparent (widget: l2);
582 g_object_unref (g_object_ref_sink (p));
583}
584
585int
586main (int argc, char **argv)
587{
588 gtk_init ();
589 (g_test_init) (argc: &argc, argv: &argv, NULL);
590
591 g_test_add_func (testpath: "/widgetorder/simple", test_func: simple);
592 g_test_add_func (testpath: "/widgetorder/two", test_func: two);
593 g_test_add_func (testpath: "/widgetorder/prepend", test_func: prepend);
594 g_test_add_func (testpath: "/widgetorder/append", test_func: append);
595 g_test_add_func (testpath: "/widgetorder/insert-after", test_func: insert_after);
596 g_test_add_func (testpath: "/widgetorder/insert-before", test_func: insert_before);
597 g_test_add_func (testpath: "/widgetorder/insert-after-self", test_func: insert_after_self);
598 g_test_add_func (testpath: "/widgetorder/insert-before-self", test_func: insert_before_self);
599 g_test_add_func (testpath: "/widgetorder/reorder-after", test_func: reorder_after);
600 g_test_add_func (testpath: "/widgetorder/reorder-before", test_func: reorder_before);
601 g_test_add_func (testpath: "/widgetorder/reorder-start", test_func: reorder_start);
602 g_test_add_func (testpath: "/widgetorder/reorder-end", test_func: reorder_end);
603 g_test_add_func (testpath: "/widgetorder/same-after", test_func: same_after);
604 g_test_add_func (testpath: "/widgetorder/same-before", test_func: same_before);
605 g_test_add_func (testpath: "/widgetorder/no-loop", test_func: no_loop);
606 g_test_add_func (testpath: "/widgetorder/reorder-refcount", test_func: reorder_refcount);
607
608 return g_test_run ();
609}
610

source code of gtk/testsuite/gtk/widgetorder.c