tests: discoverer: handle missing ogg/codec plugins gracefully
authorTim-Philipp Müller <tim@centricular.com>
Tue, 21 Jun 2016 17:04:23 +0000 (18:04 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 21 Jun 2016 17:04:23 +0000 (18:04 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=767859

tests/check/libs/discoverer.c

index aa2b9a9..bbee562 100644 (file)
@@ -29,6 +29,7 @@
 #include <glib/gstdio.h>
 #include <glib/gprintf.h>
 
+static gboolean have_theora, have_ogg;
 
 GST_START_TEST (test_disco_init)
 {
@@ -66,8 +67,15 @@ GST_START_TEST (test_disco_serializing)
 
   info = gst_discoverer_discover_uri (dc, uri, &err);
   fail_unless (info);
-  fail_unless_equals_int (gst_discoverer_info_get_result (info),
-      GST_DISCOVERER_OK);
+  if (have_theora && have_ogg) {
+    fail_unless_equals_int (gst_discoverer_info_get_result (info),
+        GST_DISCOVERER_OK);
+  } else {
+    fail_unless_equals_int (gst_discoverer_info_get_result (info),
+        GST_DISCOVERER_MISSING_PLUGINS);
+    g_clear_error (&err);
+    goto missing_plugins;
+  }
   serialized =
       gst_discoverer_info_to_variant (info, GST_DISCOVERER_SERIALIZE_ALL);
 
@@ -85,13 +93,15 @@ GST_START_TEST (test_disco_serializing)
 
   fail_unless (g_variant_equal (serialized, reserialized));
 
-  gst_discoverer_info_unref (info);
   gst_discoverer_info_unref (dinfo);
-  g_free (uri);
   g_variant_unref (serialized);
   g_variant_unref (reserialized);
 
+missing_plugins:
+
+  gst_discoverer_info_unref (info);
   g_object_unref (dc);
+  g_free (uri);
 }
 
 GST_END_TEST;
@@ -239,6 +249,11 @@ discoverer_suite (void)
   Suite *s = suite_create ("discoverer");
   TCase *tc_chain = tcase_create ("general");
 
+  have_theora = gst_registry_check_feature_version (gst_registry_get (),
+      "theoradec", GST_VERSION_MAJOR, GST_VERSION_MINOR, 0);
+  have_ogg = gst_registry_check_feature_version (gst_registry_get (),
+      "oggdemux", GST_VERSION_MAJOR, GST_VERSION_MINOR, 0);
+
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_disco_init);
   tcase_add_test (tc_chain, test_disco_sync);