tests::uriclip: Use a real file to test still images
authorThibault Saunier <thibault.saunier@collabora.com>
Fri, 22 Mar 2013 00:42:31 +0000 (21:42 -0300)
committerThibault Saunier <thibault.saunier@collabora.com>
Fri, 22 Mar 2013 01:00:21 +0000 (22:00 -0300)
  + Make use of GESAssets

And do proper refactoring

tests/check/Makefile.am
tests/check/ges/image.png [new file with mode: 0644]
tests/check/ges/test-utils.c
tests/check/ges/test-utils.h
tests/check/ges/uriclip.c

index a5f49bd..75fb150 100644 (file)
@@ -53,6 +53,7 @@ LDADD = $(common_ldadd) libtestutils.la
 EXTRA_DIST = \
        ges/test-project.xges \
        ges/audio_only.ogg \
+       ges/image.png \
        ges/audio_video.ogg
 
 COVERAGE_DIRS = \
diff --git a/tests/check/ges/image.png b/tests/check/ges/image.png
new file mode 100644 (file)
index 0000000..9dfd5b2
Binary files /dev/null and b/tests/check/ges/image.png differ
index 7f3fd65..8e2d6bb 100644 (file)
@@ -61,6 +61,12 @@ ges_test_get_audio_video_uri (void)
 }
 
 gchar *
+ges_test_get_image_uri (void)
+{
+  return ges_test_file_uri ("image.png");
+}
+
+gchar *
 ges_test_file_uri (const gchar * filename)
 {
   gchar *uri;
index 5d9477e..e4809d2 100644 (file)
@@ -26,6 +26,7 @@
 
 gchar * ges_test_get_audio_only_uri (void);
 gchar * ges_test_get_audio_video_uri (void);
+gchar * ges_test_get_image_uri (void);
 gchar * ges_test_file_uri (const gchar *filename);
 
 #define gnl_object_check(gnlobj, start, duration, mstart, mduration, priority, active) { \
index fa67a45..5f49900 100644 (file)
 
 
 static gchar *av_uri;
+static gchar *image_uri;
 GMainLoop *mainloop;
 
+typedef struct _AssetUri
+{
+  const gchar *uri;
+  GESAsset *asset;
+} AssetUri;
+
 static void
 asset_created_cb (GObject * source, GAsyncResult * res, gpointer udata)
 {
@@ -109,17 +116,21 @@ GST_END_TEST;
   assert_equals_int (pact, active);                                    \
   }
 
-static void
-create_asset (GESUriClipAsset ** asset)
+static gboolean
+create_asset (AssetUri * asset_uri)
 {
-  *asset = ges_uri_clip_asset_request_sync (av_uri, NULL);
+  asset_uri->asset =
+      GES_ASSET (ges_uri_clip_asset_request_sync (asset_uri->uri, NULL));
   g_main_loop_quit (mainloop);
+
+  return FALSE;
 }
 
 GST_START_TEST (test_filesource_properties)
 {
   GESClip *clip;
   GESTrack *track;
+  AssetUri asset_uri;
   GESTimeline *timeline;
   GESUriClipAsset *asset;
   GESTimelineLayer *layer;
@@ -139,10 +150,12 @@ GST_START_TEST (test_filesource_properties)
   ASSERT_OBJECT_REFCOUNT (timeline, "timeline", 1);
 
   mainloop = g_main_loop_new (NULL, FALSE);
-  g_timeout_add (1, (GSourceFunc) create_asset, &asset);
-  g_main_loop_run (mainloop);
+  asset_uri.uri = av_uri;
   /* Right away request the asset synchronously */
+  g_timeout_add (1, (GSourceFunc) create_asset, &asset_uri);
+  g_main_loop_run (mainloop);
 
+  asset = GES_URI_CLIP_ASSET (asset_uri.asset);
   fail_unless (GES_IS_ASSET (asset));
   clip = ges_timeline_layer_add_asset (layer, GES_ASSET (asset),
       42, 12, 51, 1, GES_TRACK_TYPE_AUDIO);
@@ -154,6 +167,9 @@ GST_START_TEST (test_filesource_properties)
   assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip)), 1);
   trackelement = GES_CONTAINER_CHILDREN (clip)->data;
   fail_unless (trackelement != NULL);
+  fail_unless (GES_TIMELINE_ELEMENT_PARENT (trackelement) ==
+      GES_TIMELINE_ELEMENT (clip));
+  fail_unless (ges_track_element_get_track (trackelement) == track);
 
   /* Check that trackelement has the same properties */
   assert_equals_uint64 (_START (trackelement), 42);
@@ -189,52 +205,69 @@ GST_START_TEST (test_filesource_properties)
   ges_container_remove (GES_CONTAINER (clip),
       GES_TIMELINE_ELEMENT (trackelement));
 
-  g_object_unref (timeline);
+  gst_object_unref (timeline);
 }
 
 GST_END_TEST;
 
 GST_START_TEST (test_filesource_images)
 {
-  GESTrackElement *track_element;
   GESClip *clip;
-  GESUriClip *uriclip;
+  GESAsset *asset;
   GESTrack *a, *v;
+  GESUriClip *uriclip;
+  AssetUri asset_uri;
+  GESTimeline *timeline;
+  GESTimelineLayer *layer;
+  GESTrackElement *track_element;
 
   ges_init ();
 
-  uriclip = ges_uri_clip_new ((gchar *) TEST_URI);
-  g_object_set (G_OBJECT (uriclip), "supported-formats",
-      (GESTrackType) GES_TRACK_TYPE_AUDIO | GES_TRACK_TYPE_VIDEO, NULL);
-  clip = GES_CLIP (uriclip);
-
   a = ges_track_audio_raw_new ();
   v = ges_track_video_raw_new ();
 
-  /* set the is_image property to true then create a video track element. */
-  g_object_set (G_OBJECT (uriclip), "is-image", TRUE, NULL);
-
-  /* the returned track element should be an image source */
-  track_element = ges_clip_create_track_element (clip, v->type);
-  ges_container_add (GES_CONTAINER (clip),
-      GES_TIMELINE_ELEMENT (track_element));
-  fail_unless (GES_IS_IMAGE_SOURCE (track_element));
+  layer = ges_timeline_layer_new ();
+  fail_unless (layer != NULL);
+  timeline = ges_timeline_new ();
+  fail_unless (timeline != NULL);
+  fail_unless (ges_timeline_add_layer (timeline, layer));
+  fail_unless (ges_timeline_add_track (timeline, a));
+  fail_unless (ges_timeline_add_track (timeline, v));
+  ASSERT_OBJECT_REFCOUNT (timeline, "timeline", 1);
 
-  /* The track holds a reference to the clip
-   * and the timelinobject holds a reference to the clip */
-  ASSERT_OBJECT_REFCOUNT (track_element, "Video Track Element", 2);
+  mainloop = g_main_loop_new (NULL, FALSE);
+  /* Right away request the asset synchronously */
+  asset_uri.uri = image_uri;
+  g_timeout_add (1, (GSourceFunc) create_asset, &asset_uri);
+  g_main_loop_run (mainloop);
 
-  ges_track_remove_element (v, track_element);
-  ges_container_remove (GES_CONTAINER (clip),
-      GES_TIMELINE_ELEMENT (track_element));
+  asset = asset_uri.asset;
+  fail_unless (GES_IS_ASSET (asset));
+  fail_unless (ges_uri_clip_asset_is_image (GES_URI_CLIP_ASSET (asset)));
+  uriclip = GES_URI_CLIP (ges_asset_extract (asset, NULL));
+  fail_unless (GES_IS_URI_CLIP (uriclip));
+  fail_unless (ges_clip_get_supported_formats (GES_CLIP (uriclip)) ==
+      GES_TRACK_TYPE_VIDEO);
+  clip = GES_CLIP (uriclip);
+  fail_unless (ges_uri_clip_is_image (uriclip));
+  ges_timeline_element_set_duration (GES_TIMELINE_ELEMENT (clip),
+      1 * GST_SECOND);
 
+  /* the returned track element should be an image source */
   /* the clip should not create any TrackElement in the audio track */
-  track_element = ges_clip_create_track_element (clip, a->type);
-  fail_unless (track_element == NULL);
+  ges_timeline_layer_add_clip (layer, GES_CLIP (clip));
+  assert_equals_int (g_list_length (GES_CONTAINER_CHILDREN (clip)), 1);
+  track_element = GES_CONTAINER_CHILDREN (clip)->data;
+  fail_unless (track_element != NULL);
+  fail_unless (GES_TIMELINE_ELEMENT_PARENT (track_element) ==
+      GES_TIMELINE_ELEMENT (clip));
+  fail_unless (ges_track_element_get_track (track_element) == v);
+  fail_unless (GES_IS_IMAGE_SOURCE (track_element));
 
-  g_object_unref (a);
-  g_object_unref (v);
-  g_object_unref (clip);
+  ASSERT_OBJECT_REFCOUNT (track_element, "1 in track, 1 in clip 1 in timeline",
+      3);
+
+  gst_object_unref (timeline);
 }
 
 GST_END_TEST;
@@ -266,12 +299,14 @@ main (int argc, char **argv)
   gst_check_init (&argc, &argv);
 
   av_uri = ges_test_get_audio_video_uri ();
+  image_uri = ges_test_get_image_uri ();
 
   srunner_run_all (sr, CK_NORMAL);
   nf = srunner_ntests_failed (sr);
   srunner_free (sr);
 
   g_free (av_uri);
+  g_free (image_uri);
 
   return nf;
 }