From 9f2f21d8dfe6fdcf2dea3032b336d1b4b20c2348 Mon Sep 17 00:00:00 2001 From: Brandon Lewis Date: Fri, 22 Oct 2010 14:01:34 +0100 Subject: [PATCH] tests: test for track removal while timeline contains timeline objects --- tests/check/ges/basic.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/tests/check/ges/basic.c b/tests/check/ges/basic.c index 839c049..0dbeae6 100644 --- a/tests/check/ges/basic.c +++ b/tests/check/ges/basic.c @@ -296,6 +296,93 @@ GST_START_TEST (test_ges_timeline_add_layer_first) GST_END_TEST; +GST_START_TEST (test_ges_timeline_remove_track) +{ + GESTimeline *timeline; + GESTimelineLayer *layer; + GESTrack *track; + GESCustomTimelineSource *s1, *s2, *s3; + GESTrackObject *t1, *t2, *t3; + + ges_init (); + + /* Timeline and 1 Layer */ + GST_DEBUG ("Create a timeline"); + timeline = ges_timeline_new (); + fail_unless (timeline != NULL); + + GST_DEBUG ("Create a layer"); + layer = ges_timeline_layer_new (); + fail_unless (layer != NULL); + /* Give the Timeline a Track */ + GST_DEBUG ("Create a Track"); + track = ges_track_new (GES_TRACK_TYPE_CUSTOM, GST_CAPS_ANY); + fail_unless (track != NULL); + + /* Create a source and add it to the Layer */ + GST_DEBUG ("Creating a source"); + s1 = ges_custom_timeline_source_new (my_fill_track_func, NULL); + fail_unless (s1 != NULL); + fail_unless (ges_timeline_layer_add_object (layer, GES_TIMELINE_OBJECT (s1))); + fail_unless (GES_TIMELINE_OBJECT (s1)->layer == layer); + + GST_DEBUG ("Creating a source"); + s2 = ges_custom_timeline_source_new (my_fill_track_func, NULL); + fail_unless (s2 != NULL); + fail_unless (ges_timeline_layer_add_object (layer, GES_TIMELINE_OBJECT (s2))); + fail_unless (GES_TIMELINE_OBJECT (s2)->layer == layer); + + GST_DEBUG ("Creating a source"); + s3 = ges_custom_timeline_source_new (my_fill_track_func, NULL); + fail_unless (s3 != NULL); + fail_unless (ges_timeline_layer_add_object (layer, GES_TIMELINE_OBJECT (s3))); + fail_unless (GES_TIMELINE_OBJECT (s3)->layer == layer); + + GST_DEBUG ("Add the layer to the timeline"); + fail_unless (ges_timeline_add_layer (timeline, layer)); + /* The timeline steals our reference to the layer */ + ASSERT_OBJECT_REFCOUNT (layer, "layer", 1); + fail_unless (layer->timeline == timeline); + fail_unless (g_list_find (timeline->layers, layer) != NULL); + + GST_DEBUG ("Add the track to the timeline"); + fail_unless (ges_timeline_add_track (timeline, track)); + ASSERT_OBJECT_REFCOUNT (track, "track", 1); + fail_unless (track->timeline == timeline); + fail_unless ((gpointer) GST_ELEMENT_PARENT (track) == (gpointer) timeline); + + /* Make sure the associated TrackObjects are in the Track */ + fail_unless (GES_TIMELINE_OBJECT (s1)->trackobjects != NULL); + fail_unless (GES_TIMELINE_OBJECT (s2)->trackobjects != NULL); + fail_unless (GES_TIMELINE_OBJECT (s3)->trackobjects != NULL); + + t1 = GES_TRACK_OBJECT ((GES_TIMELINE_OBJECT (s1)->trackobjects)->data); + g_object_ref (t1); + ASSERT_OBJECT_REFCOUNT (t1, "trackobject", 2); + + t2 = GES_TRACK_OBJECT ((GES_TIMELINE_OBJECT (s2)->trackobjects)->data); + g_object_ref (t2); + ASSERT_OBJECT_REFCOUNT (t2, "t2", 2); + + t3 = GES_TRACK_OBJECT ((GES_TIMELINE_OBJECT (s3)->trackobjects)->data); + g_object_ref (t3); + ASSERT_OBJECT_REFCOUNT (t3, "t3", 2); + + /* remove the track and check that the track objects have been released */ + fail_unless (ges_timeline_remove_track (timeline, track)); + + ASSERT_OBJECT_REFCOUNT (t1, "trackobject", 1); + ASSERT_OBJECT_REFCOUNT (t2, "trackobject", 1); + ASSERT_OBJECT_REFCOUNT (t3, "trackobject", 1); + + g_object_unref (t1); + g_object_unref (t2); + g_object_unref (t3); + + g_object_unref (timeline); +} + +GST_END_TEST; static Suite * ges_suite (void) @@ -309,6 +396,7 @@ ges_suite (void) tcase_add_test (tc_chain, test_ges_scenario); tcase_add_test (tc_chain, test_ges_timeline_add_layer); tcase_add_test (tc_chain, test_ges_timeline_add_layer_first); + tcase_add_test (tc_chain, test_ges_timeline_remove_track); return s; } -- 2.7.4