1 /* GStreamer Editing Services
3 * Copyright (C) <2013> Thibault Saunier <thibault.saunier@collabora.com>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
21 #include "test-utils.h"
23 #include <gst/check/gstcheck.h>
25 GST_START_TEST (test_move_group)
29 GESTimeline *timeline;
30 GESLayer *layer, *layer1;
31 GESClip *clip, *clip1, *clip2;
37 timeline = ges_timeline_new_audio_video ();
39 layer = ges_timeline_append_layer (timeline);
40 layer1 = ges_timeline_append_layer (timeline);
41 asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
47 * 0------------Group1---------------110
51 * |----------------------------------|
52 * | 0--------- 0-----------|
53 * layer1: | | clip1 | | clip2 |
54 * | 10--------20 50----------|
55 * |----------------------------------|
57 clip = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
59 ges_layer_add_asset (layer1, asset, 10, 0, 10, GES_TRACK_TYPE_UNKNOWN);
61 ges_layer_add_asset (layer1, asset, 50, 0, 60, GES_TRACK_TYPE_UNKNOWN);
62 clips = g_list_prepend (clips, clip);
63 clips = g_list_prepend (clips, clip1);
64 clips = g_list_prepend (clips, clip2);
65 group = GES_GROUP (ges_container_group (clips));
67 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
69 fail_unless (GES_IS_GROUP (group));
70 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
71 fail_unless (g_list_length (GES_CONTAINER_CHILDREN (group)) == 3);
72 assert_equals_int (GES_CONTAINER_HEIGHT (group), 2);
74 /* Nothing should move */
75 ges_timeline_element_set_start (GES_TIMELINE_ELEMENT (clip1), 5);
77 CHECK_OBJECT_PROPS (clip, 0, 0, 10);
78 CHECK_OBJECT_PROPS (clip1, 10, 0, 10);
79 CHECK_OBJECT_PROPS (clip2, 50, 0, 60);
80 CHECK_OBJECT_PROPS (group, 0, 0, 110);
83 * 0 10------------Group1---------------120
87 * |----------------------------------|
88 * | 0--------- 0-----------|
89 * layer1: | | clip1 | | clip2 |
90 * | 20--------30 60----------|
91 * |----------------------------------|
93 ges_timeline_element_set_start (GES_TIMELINE_ELEMENT (clip), 10);
94 CHECK_OBJECT_PROPS (clip, 10, 0, 10);
95 CHECK_OBJECT_PROPS (clip1, 20, 0, 10);
96 CHECK_OBJECT_PROPS (clip2, 60, 0, 60);
97 CHECK_OBJECT_PROPS (group, 10, 0, 110);
100 * 0 10------------Group1---------------120
104 * |----------------------------------|
105 * | 0--------- 0-----------|
106 * layer1: | | clip1 | | clip2 |
107 * | 20--------30 60----------|
108 * |----------------------------------|
110 ges_timeline_element_set_duration (GES_TIMELINE_ELEMENT (clip), 5);
111 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
112 CHECK_OBJECT_PROPS (clip1, 20, 0, 10);
113 CHECK_OBJECT_PROPS (clip2, 60, 0, 60);
114 CHECK_OBJECT_PROPS (group, 10, 0, 110);
115 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
118 * 0 10------------Group1---------------110
122 * |----------------------------------|
123 * | 0--------- 0-----------|
124 * layer1: | | clip1 | | clip2 |
125 * | 20--------30 60----------|
126 * |----------------------------------|
128 ges_timeline_element_set_duration (GES_TIMELINE_ELEMENT (clip2), 50);
129 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
130 CHECK_OBJECT_PROPS (clip1, 20, 0, 10);
131 CHECK_OBJECT_PROPS (clip2, 60, 0, 50);
132 CHECK_OBJECT_PROPS (group, 10, 0, 100);
135 * 0 10------------Group1---------------110
139 * |----------------------------------|
140 * | 5--------- 0-----------|
141 * layer1: | | clip1 | | clip2 |
142 * | 20--------30 60----------|
143 * |----------------------------------|
145 ges_timeline_element_set_inpoint (GES_TIMELINE_ELEMENT (clip1), 5);
146 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
147 CHECK_OBJECT_PROPS (clip1, 20, 5, 10);
148 CHECK_OBJECT_PROPS (clip2, 60, 0, 50);
149 CHECK_OBJECT_PROPS (group, 10, 0, 100);
152 * 0 10------------Group1---------------110
156 * |----------------------------------|
157 * | 5--------- 0-----------|
158 * layer1: | | clip1 | | clip2 |
159 * | 20--------30 60----------|
160 * |----------------------------------|
162 ges_timeline_element_set_inpoint (GES_TIMELINE_ELEMENT (clip1), 5);
163 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
164 CHECK_OBJECT_PROPS (clip1, 20, 5, 10);
165 CHECK_OBJECT_PROPS (clip2, 60, 0, 50);
166 CHECK_OBJECT_PROPS (group, 10, 0, 100);
167 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
168 fail_if (ges_timeline_element_trim (GES_TIMELINE_ELEMENT (group), 20));
169 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
170 CHECK_OBJECT_PROPS (clip1, 20, 5, 10);
171 CHECK_OBJECT_PROPS (clip2, 60, 0, 50);
172 CHECK_OBJECT_PROPS (group, 10, 0, 100);
173 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
175 fail_if (ges_timeline_element_trim (GES_TIMELINE_ELEMENT (group), 25));
176 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
177 CHECK_OBJECT_PROPS (clip1, 20, 5, 10);
178 CHECK_OBJECT_PROPS (clip2, 60, 0, 50);
179 CHECK_OBJECT_PROPS (group, 10, 0, 100);
180 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
182 /* Same thing in the end... */
183 ges_timeline_element_trim (GES_TIMELINE_ELEMENT (group), 10);
184 CHECK_OBJECT_PROPS (clip, 10, 0, 5);
185 CHECK_OBJECT_PROPS (clip1, 20, 5, 10);
186 CHECK_OBJECT_PROPS (clip2, 60, 0, 50);
187 CHECK_OBJECT_PROPS (group, 10, 0, 100);
188 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
191 * 0 12------------Group1---------------110
195 * |----------------------------------|
196 * | 7--------- 2----------|
197 * layer1: | | clip1 | | clip2 |
198 * | 22--------30 62----------|
199 * |----------------------------------|
201 ges_timeline_element_trim (GES_TIMELINE_ELEMENT (group), 12);
202 CHECK_OBJECT_PROPS (clip, 12, 2, 3);
203 CHECK_OBJECT_PROPS (clip1, 22, 7, 8);
204 CHECK_OBJECT_PROPS (clip2, 62, 2, 48);
205 CHECK_OBJECT_PROPS (group, 12, 0, 98);
206 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
208 /* Setting the duration would lead to overlaps */
209 ges_timeline_element_set_duration (GES_TIMELINE_ELEMENT (group), 10);
210 CHECK_OBJECT_PROPS (clip, 12, 2, 3);
211 CHECK_OBJECT_PROPS (clip1, 22, 7, 8);
212 CHECK_OBJECT_PROPS (clip2, 62, 2, 48);
213 CHECK_OBJECT_PROPS (group, 12, 0, 98);
214 ges_timeline_element_set_duration (GES_TIMELINE_ELEMENT (group), 100);
215 CHECK_OBJECT_PROPS (clip, 12, 2, 3);
216 CHECK_OBJECT_PROPS (clip1, 22, 7, 8);
217 CHECK_OBJECT_PROPS (clip2, 62, 2, 50);
218 CHECK_OBJECT_PROPS (group, 12, 0, 100);
220 ges_timeline_element_set_start (GES_TIMELINE_ELEMENT (group), 20);
221 CHECK_OBJECT_PROPS (clip, 20, 2, 3);
222 CHECK_OBJECT_PROPS (clip1, 30, 7, 8);
223 CHECK_OBJECT_PROPS (clip2, 70, 2, 50);
224 CHECK_OBJECT_PROPS (group, 20, 0, 100);
226 fail_if (ges_timeline_element_trim (GES_TIMELINE_ELEMENT (group), 10));
227 CHECK_OBJECT_PROPS (clip, 20, 2, 3);
228 CHECK_OBJECT_PROPS (clip1, 30, 7, 8);
229 CHECK_OBJECT_PROPS (clip2, 70, 2, 50);
230 CHECK_OBJECT_PROPS (group, 20, 0, 100);
232 ASSERT_OBJECT_REFCOUNT (group, "2 ref for the timeline", 2);
233 check_destroyed (G_OBJECT (timeline), G_OBJECT (group), NULL);
234 gst_object_unref (asset);
244 _changed_layer_cb (GESTimelineElement * clip,
245 GParamSpec * arg G_GNUC_UNUSED, guint * nb_calls)
247 *nb_calls = *nb_calls + 1;
250 GST_START_TEST (test_group_in_group)
253 GESTimeline *timeline;
254 GESGroup *group, *group1;
255 GESLayer *layer, *layer1, *layer2, *layer3;
256 GESClip *c, *c1, *c2, *c3, *c4, *c5;
258 guint nb_layer_notifies = 0;
263 timeline = ges_timeline_new_audio_video ();
267 * --0------------10-Group-----20---------------30-------Group1----------70
268 * | +-----------+ |+-----------50 |
269 * L | | C | || C3 | |
270 * | +-----------+ |+-----------+ |
271 * --|-------------------------------------------|-----40----------------|
272 * | +------------+ +-------------+ | +--------60 |
273 * L1 | | C1 | | C2 | | | C4 | |
274 * | +------------+ +-------------+ | +--------+ |
275 * --|-------------------------------------------|-----------------------|
279 * --+-------------------------------------------+-----------------------+
283 * -----------------------------------------------------------------------
286 layer = ges_timeline_append_layer (timeline);
287 layer1 = ges_timeline_append_layer (timeline);
288 layer2 = ges_timeline_append_layer (timeline);
289 layer3 = ges_timeline_append_layer (timeline);
290 assert_equals_int (ges_layer_get_priority (layer3), 3);
291 asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
293 c = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
294 c1 = ges_layer_add_asset (layer1, asset, 10, 0, 10, GES_TRACK_TYPE_UNKNOWN);
295 c2 = ges_layer_add_asset (layer1, asset, 20, 0, 10, GES_TRACK_TYPE_UNKNOWN);
296 clips = g_list_prepend (clips, c);
297 clips = g_list_prepend (clips, c1);
298 clips = g_list_prepend (clips, c2);
299 group = GES_GROUP (ges_container_group (clips));
300 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
303 fail_unless (GES_IS_GROUP (group));
304 CHECK_OBJECT_PROPS (c, 0, 0, 10);
305 CHECK_OBJECT_PROPS (c1, 10, 0, 10);
306 CHECK_OBJECT_PROPS (c2, 20, 0, 10);
307 CHECK_OBJECT_PROPS (group, 0, 0, 30);
309 c3 = ges_layer_add_asset (layer, asset, 30, 0, 20, GES_TRACK_TYPE_UNKNOWN);
310 c4 = ges_layer_add_asset (layer1, asset, 40, 0, 20, GES_TRACK_TYPE_UNKNOWN);
311 c5 = ges_layer_add_asset (layer2, asset, 50, 0, 20, GES_TRACK_TYPE_UNKNOWN);
312 clips = g_list_prepend (NULL, c3);
313 clips = g_list_prepend (clips, c4);
314 clips = g_list_prepend (clips, c5);
315 group1 = GES_GROUP (ges_container_group (clips));
316 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group1) == timeline);
319 fail_unless (GES_IS_GROUP (group1));
320 CHECK_OBJECT_PROPS (c3, 30, 0, 20);
321 CHECK_OBJECT_PROPS (c4, 40, 0, 20);
322 CHECK_OBJECT_PROPS (c5, 50, 0, 20);
323 CHECK_OBJECT_PROPS (group1, 30, 0, 40);
331 fail_unless (ges_container_add (GES_CONTAINER (group),
332 GES_TIMELINE_ELEMENT (group1)));
333 CHECK_OBJECT_PROPS (c, 0, 0, 10);
334 CHECK_OBJECT_PROPS (c1, 10, 0, 10);
335 CHECK_OBJECT_PROPS (c2, 20, 0, 10);
336 CHECK_OBJECT_PROPS (c3, 30, 0, 20);
337 CHECK_OBJECT_PROPS (c4, 40, 0, 20);
338 CHECK_OBJECT_PROPS (c5, 50, 0, 20);
339 CHECK_OBJECT_PROPS (group, 0, 0, 70);
340 CHECK_OBJECT_PROPS (group1, 30, 0, 40);
348 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
349 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group1) == timeline);
351 ges_timeline_element_set_start (GES_TIMELINE_ELEMENT (c4), 50);
352 CHECK_OBJECT_PROPS (c, 10, 0, 10);
353 CHECK_OBJECT_PROPS (c1, 20, 0, 10);
354 CHECK_OBJECT_PROPS (c2, 30, 0, 10);
355 CHECK_OBJECT_PROPS (c3, 40, 0, 20);
356 CHECK_OBJECT_PROPS (c4, 50, 0, 20);
357 CHECK_OBJECT_PROPS (c5, 60, 0, 20);
358 CHECK_OBJECT_PROPS (group, 10, 0, 70);
359 CHECK_OBJECT_PROPS (group1, 40, 0, 40);
360 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
361 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group1) == timeline);
372 * -----------------------------------------------------------------------
373 * 0------------10-Group-----20---------------30-------Group1----------70
374 * | +-----------+ |+-----------50 |
375 * L1 | | C | || C3 | |
376 * | +-----------+ |+-----------+ |
378 * --|-------------------------------------------|-----40----------------|
379 * | +------------+ +-------------+ | +--------60 |
380 * L2 | | C1 | | C2 | | | C4 | |
381 * | +------------+ +-------------+ | +--------+ |
382 * --|-------------------------------------------|-----------------------|
386 * --+-------------------------------------------+-----------------------+
388 fail_unless (ges_clip_move_to_layer (c, layer1));
395 assert_equals_int (_PRIORITY (group), 1);
396 assert_equals_int (_PRIORITY (group1), 1);
398 /* We can not move so far! */
399 g_signal_connect_after (c4, "notify::layer",
400 (GCallback) _changed_layer_cb, &nb_layer_notifies);
401 fail_if (ges_clip_move_to_layer (c4, layer));
402 assert_equals_int (nb_layer_notifies, 0);
409 assert_equals_int (_PRIORITY (group), 1);
410 assert_equals_int (_PRIORITY (group1), 1);
412 clips = ges_container_ungroup (GES_CONTAINER (group), FALSE);
413 assert_equals_int (g_list_length (clips), 4);
414 g_list_free_full (clips, gst_object_unref);
416 gst_object_unref (timeline);
417 gst_object_unref (asset);
424 GST_START_TEST (test_group_in_group_layer_moving)
427 GESTimeline *timeline;
429 GESLayer *layer, *layer1, *layer2, *layer3;
436 timeline = ges_timeline_new_audio_video ();
440 * --0------------10-Group-----20
444 * --|--------------------------
448 * -----------------------------
451 layer = ges_timeline_append_layer (timeline);
452 layer1 = ges_timeline_append_layer (timeline);
453 layer2 = ges_timeline_append_layer (timeline);
454 layer3 = ges_timeline_append_layer (timeline);
455 fail_unless (layer2 && layer3);
456 assert_equals_int (ges_layer_get_priority (layer3), 3);
457 asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
459 c = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
460 c1 = ges_layer_add_asset (layer1, asset, 10, 0, 10, GES_TRACK_TYPE_UNKNOWN);
461 clips = g_list_prepend (clips, c);
462 clips = g_list_prepend (clips, c1);
463 group = GES_GROUP (ges_container_group (clips));
464 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
467 fail_unless (GES_IS_GROUP (group));
468 CHECK_OBJECT_PROPS (c, 0, 0, 10);
469 CHECK_OBJECT_PROPS (c1, 10, 0, 10);
470 CHECK_OBJECT_PROPS (group, 0, 0, 20);
474 * --0--------10-----------20-Group----30
478 * --|-----------------------------------
482 * -------------------------------------
484 fail_unless (ges_container_edit (GES_CONTAINER (c), NULL,
485 -1, GES_EDIT_MODE_NORMAL, GES_EDGE_NONE, 10));
487 CHECK_OBJECT_PROPS (c, 10, 0, 10);
488 CHECK_OBJECT_PROPS (c1, 20, 0, 10);
489 CHECK_OBJECT_PROPS (group, 10, 0, 20);
490 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c), 0);
491 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c1), 1);
493 ges_layer_set_priority (layer2, 0);
494 ges_layer_set_priority (layer, 1);
495 ges_layer_set_priority (layer1, 2);
497 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c), 1);
498 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c1), 2);
502 * --0--------10-----------20-Group----30
506 * --|-----------------------------------
510 * -------------------------------------
513 * -------------------------------------
515 fail_unless (ges_container_edit (GES_CONTAINER (c), NULL,
516 0, GES_EDIT_MODE_NORMAL, GES_EDGE_NONE, 10));
517 CHECK_OBJECT_PROPS (c, 10, 0, 10);
518 CHECK_OBJECT_PROPS (c1, 20, 0, 10);
519 CHECK_OBJECT_PROPS (group, 10, 0, 20);
520 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c), 0);
521 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c1), 1);
525 * --0--------10-----------20-Group----30
527 * --------------------------------------
531 * --|-----------------------------------
535 * -------------------------------------
537 fail_unless (ges_container_edit (GES_CONTAINER (c), NULL,
538 1, GES_EDIT_MODE_NORMAL, GES_EDGE_NONE, 10));
539 CHECK_OBJECT_PROPS (c, 10, 0, 10);
540 CHECK_OBJECT_PROPS (c1, 20, 0, 10);
541 CHECK_OBJECT_PROPS (group, 10, 0, 20);
542 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c), 1);
543 assert_equals_int (GES_TIMELINE_ELEMENT_LAYER_PRIORITY (c1), 2);
545 gst_object_unref (timeline);
546 gst_object_unref (asset);
554 GST_START_TEST (test_group_in_self)
559 GESTimeline *timeline;
566 timeline = ges_timeline_new_audio_video ();
568 layer = ges_timeline_append_layer (timeline);
569 asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
571 c = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
572 c1 = ges_layer_add_asset (layer, asset, 10, 0, 10, GES_TRACK_TYPE_UNKNOWN);
573 clips = g_list_prepend (clips, c);
574 clips = g_list_prepend (clips, c1);
577 group = GES_GROUP (ges_container_group (clips));
578 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
581 fail_if (ges_container_add (GES_CONTAINER (group),
582 GES_TIMELINE_ELEMENT (group)));
583 clips = ges_container_get_children (GES_CONTAINER (group), TRUE);
584 assert_equals_int (g_list_length (clips), 6);
586 gst_object_unref (timeline);
587 gst_object_unref (asset);
595 project_loaded_cb (GESProject * project, GESTimeline * timeline,
596 GMainLoop * mainloop)
598 GST_ERROR ("LOADED!");
599 g_main_loop_quit (mainloop);
602 GST_START_TEST (test_group_serialization)
606 GESClip *c, *c1, *c2, *c3;
608 GESTimeline *timeline;
614 GList *tmp, *clips = NULL;
618 timeline = ges_timeline_new_audio_video ();
620 layer = ges_timeline_append_layer (timeline);
621 asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
623 c = ges_layer_add_asset (layer, asset, 0, 0, 10, GES_TRACK_TYPE_UNKNOWN);
625 c1 = ges_layer_add_asset (layer, asset, 10, 0, 10, GES_TRACK_TYPE_UNKNOWN);
627 clips = g_list_prepend (clips, c);
628 clips = g_list_prepend (clips, c1);
630 c2 = ges_layer_add_asset (layer, asset, 20, 0, 10, GES_TRACK_TYPE_UNKNOWN);
632 c3 = ges_layer_add_asset (layer, asset, 30, 0, 10, GES_TRACK_TYPE_UNKNOWN);
634 group = GES_GROUP (ges_container_group (clips));
635 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
639 clips = g_list_append (NULL, group);
640 clips = g_list_append (clips, c2);
641 group = GES_GROUP (ges_container_group (clips));
642 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
645 clips = g_list_append (NULL, group);
646 clips = g_list_append (clips, c3);
647 group = GES_GROUP (ges_container_group (clips));
648 fail_unless (GES_TIMELINE_ELEMENT_TIMELINE (group) == timeline);
652 GES_PROJECT (ges_extractable_get_asset (GES_EXTRACTABLE (timeline)));
654 tmpuri = ges_test_get_tmp_uri ("test-auto-transition-save.xges");
655 fail_unless (ges_project_save (project, timeline, tmpuri, NULL, TRUE, NULL));
656 gst_object_unref (timeline);
657 gst_object_unref (asset);
659 project = ges_project_new (tmpuri);
660 mainloop = g_main_loop_new (NULL, FALSE);
661 g_signal_connect (project, "loaded", (GCallback) project_loaded_cb, mainloop);
662 timeline = GES_TIMELINE (ges_asset_extract (GES_ASSET (project), &err));
663 g_main_loop_run (mainloop);
665 fail_unless (err == NULL, "%s", err ? err->message : "Nothing");
666 fail_unless (timeline != NULL);
668 layer = timeline->layers->data;
669 for (tmp = ges_layer_get_clips (layer); tmp; tmp = tmp->next) {
670 fail_unless (GES_IS_GROUP (GES_TIMELINE_ELEMENT_PARENT (tmp->data)),
671 "%s parent is %p, NOT a group", GES_TIMELINE_ELEMENT_NAME (tmp->data),
672 GES_TIMELINE_ELEMENT_PARENT (tmp->data));
677 gst_object_unref (timeline);
687 Suite *s = suite_create ("ges-group");
688 TCase *tc_chain = tcase_create ("group");
690 suite_add_tcase (s, tc_chain);
692 tcase_add_test (tc_chain, test_move_group);
693 tcase_add_test (tc_chain, test_group_in_group);
694 tcase_add_test (tc_chain, test_group_in_self);
695 tcase_add_test (tc_chain, test_group_serialization);
696 tcase_add_test (tc_chain, test_group_in_group_layer_moving);
701 GST_CHECK_MAIN (ges);