1 #include <gtk/gtk.h>
2
3 static void
simple(void)4 simple (void)
5 {
6 GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
7 GtkWidget *l = gtk_label_new ("");
8
9 gtk_box_append (GTK_BOX (box), 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
21 static void
two(void)22 two (void)
23 {
24 GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
25 GtkWidget *l1 = gtk_label_new ("");
26 GtkWidget *l2 = gtk_label_new ("");
27
28 gtk_box_append (GTK_BOX (box), l1);
29 gtk_box_append (GTK_BOX (box), 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
43 static void
prepend(void)44 prepend (void)
45 {
46 GtkWidget *p = gtk_label_new ("");
47 GtkWidget *l1 = gtk_label_new ("");
48 GtkWidget *l2 = gtk_label_new ("");
49
50 gtk_widget_set_parent (l1, p);
51 gtk_widget_insert_after (l2, 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
67 static void
append(void)68 append (void)
69 {
70 GtkWidget *p = gtk_label_new ("");
71 GtkWidget *l1 = gtk_label_new ("");
72 GtkWidget *l2 = gtk_label_new ("");
73
74 gtk_widget_set_parent (l1, p);
75 gtk_widget_insert_before (l2, 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
89 static void
insert_after(void)90 insert_after (void)
91 {
92 GtkWidget *p = gtk_label_new ("");
93 GtkWidget *l1 = gtk_label_new ("");
94 GtkWidget *l2 = gtk_label_new ("");
95 GtkWidget *l3 = gtk_label_new ("");
96
97 gtk_widget_set_parent (l1, p);
98 gtk_widget_set_parent (l3, 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 (l2, p, 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
126 static void
insert_before(void)127 insert_before (void)
128 {
129 GtkWidget *p = gtk_label_new ("");
130 GtkWidget *l1 = gtk_label_new ("");
131 GtkWidget *l2 = gtk_label_new ("");
132 GtkWidget *l3 = gtk_label_new ("");
133
134 gtk_widget_set_parent (l1, p);
135 gtk_widget_set_parent (l3, 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 (l2, p, 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
163 static void
insert_after_self(void)164 insert_after_self (void)
165 {
166 GtkWidget *p = gtk_label_new ("");
167 GtkWidget *l = gtk_label_new ("");
168
169 gtk_widget_insert_after (l, 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 (l, p, 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
193 static void
insert_before_self(void)194 insert_before_self (void)
195 {
196 GtkWidget *p = gtk_label_new ("");
197 GtkWidget *l = gtk_label_new ("");
198
199 gtk_widget_insert_before (l, 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 (l, p, 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
223 static void
reorder_after(void)224 reorder_after (void)
225 {
226 GtkWidget *p = gtk_label_new ("");
227 GtkWidget *l1 = gtk_label_new ("");
228 GtkWidget *l2 = gtk_label_new ("");
229 GtkWidget *l3 = gtk_label_new ("");
230
231 gtk_widget_set_parent (l1, p);
232 gtk_widget_set_parent (l3, 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 (l2, p, 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 (l3, p, 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
277 static void
reorder_before(void)278 reorder_before (void)
279 {
280 GtkWidget *p = gtk_label_new ("");
281 GtkWidget *l1 = gtk_label_new ("");
282 GtkWidget *l2 = gtk_label_new ("");
283 GtkWidget *l3 = gtk_label_new ("");
284
285 gtk_widget_set_parent (l1, p);
286 gtk_widget_set_parent (l3, 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 (l2, p, 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 (l3, p, 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
331 static void
reorder_start(void)332 reorder_start (void)
333 {
334 GtkWidget *p = gtk_label_new ("");
335 GtkWidget *l1 = gtk_label_new ("");
336 GtkWidget *l2 = gtk_label_new ("");
337 GtkWidget *l3 = gtk_label_new ("");
338
339 gtk_widget_set_parent (l1, p);
340 gtk_widget_set_parent (l3, 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 (l2, p, 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 (l3, 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
385 static void
reorder_end(void)386 reorder_end (void)
387 {
388 GtkWidget *p = gtk_label_new ("");
389 GtkWidget *l1 = gtk_label_new ("");
390 GtkWidget *l2 = gtk_label_new ("");
391 GtkWidget *l3 = gtk_label_new ("");
392
393 gtk_widget_set_parent (l1, p);
394 gtk_widget_set_parent (l3, 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 (l2, p, 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 (l1, 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
439 static void
same_after(void)440 same_after (void)
441 {
442 GtkWidget *p = gtk_label_new ("");
443 GtkWidget *l1 = gtk_label_new ("");
444 GtkWidget *l2 = gtk_label_new ("");
445
446 gtk_widget_set_parent (l1, p);
447 gtk_widget_set_parent (l2, 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 (l2, p, 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
473 static void
same_before(void)474 same_before (void)
475 {
476 GtkWidget *p = gtk_label_new ("");
477 GtkWidget *l1 = gtk_label_new ("");
478 GtkWidget *l2 = gtk_label_new ("");
479
480 gtk_widget_set_parent (l1, p);
481 gtk_widget_set_parent (l2, 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 (l1, p, 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
507 static void
no_loop(void)508 no_loop (void)
509 {
510 GtkWidget *p = gtk_label_new ("");
511 GtkWidget *l1 = gtk_label_new ("");
512 GtkWidget *l2 = gtk_label_new ("");
513 GtkWidget *l3 = gtk_label_new ("");
514
515 gtk_widget_set_parent (l1, p);
516 gtk_widget_set_parent (l2, p);
517 gtk_widget_set_parent (l3, p);
518
519 /* l1 -> l2 -> l3 */
520
521 gtk_widget_insert_after (l1, p, 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 (l2, p, 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 (l1, 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
548 static void
reorder_refcount(void)549 reorder_refcount (void)
550 {
551 GtkWidget *p = gtk_label_new ("");
552 GtkWidget *l1 = gtk_label_new ("");
553 GtkWidget *l2 = gtk_label_new ("");
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 (l1, 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 (l2, 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 (l2, p, 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 (l1);
581 gtk_widget_unparent (l2);
582 g_object_unref (g_object_ref_sink (p));
583 }
584
585 int
main(int argc,char ** argv)586 main (int argc, char **argv)
587 {
588 gtk_init ();
589 (g_test_init) (&argc, &argv, NULL);
590
591 g_test_add_func ("/widgetorder/simple", simple);
592 g_test_add_func ("/widgetorder/two", two);
593 g_test_add_func ("/widgetorder/prepend", prepend);
594 g_test_add_func ("/widgetorder/append", append);
595 g_test_add_func ("/widgetorder/insert-after", insert_after);
596 g_test_add_func ("/widgetorder/insert-before", insert_before);
597 g_test_add_func ("/widgetorder/insert-after-self", insert_after_self);
598 g_test_add_func ("/widgetorder/insert-before-self", insert_before_self);
599 g_test_add_func ("/widgetorder/reorder-after", reorder_after);
600 g_test_add_func ("/widgetorder/reorder-before", reorder_before);
601 g_test_add_func ("/widgetorder/reorder-start", reorder_start);
602 g_test_add_func ("/widgetorder/reorder-end", reorder_end);
603 g_test_add_func ("/widgetorder/same-after", same_after);
604 g_test_add_func ("/widgetorder/same-before", same_before);
605 g_test_add_func ("/widgetorder/no-loop", no_loop);
606 g_test_add_func ("/widgetorder/reorder-refcount", reorder_refcount);
607
608 return g_test_run ();
609 }
610