dataurisrc: Add test that checks various URIs against their expected output
authorSebastian Dröge <sebastian@centricular.com>
Wed, 22 May 2019 07:44:50 +0000 (10:44 +0300)
committerBenjamin Otte <otte@redhat.com>
Thu, 23 May 2019 16:53:35 +0000 (18:53 +0200)
tests/check/elements/dataurisrc.c

index decbe61..0ae1e50 100644 (file)
@@ -21,7 +21,7 @@
 #include "config.h"
 #endif
 
-#include <gst/check/gstcheck.h>
+#include <gst/check/check.h>
 
 /* sine wave encoded in ogg/vorbis, created with:
  *   gst-launch-1.0 audiotestsrc num-buffers=110 ! audioconvert ! \
@@ -519,6 +519,55 @@ GST_START_TEST (test_dataurisrc_from_uri)
 
 GST_END_TEST;
 
+GST_START_TEST (test_dataurisrc_uris)
+{
+#define STRING_CONTENT(s) s, sizeof(s) - 1
+  static const struct
+  {
+    const char *name;
+    const char *uri;
+    const char *mimetype;
+    const char *contents;
+    gsize contents_len;
+  } tests[] = {
+    /* *INDENT-OFF* */
+    {"simple", "data:,HelloWorld", NULL, STRING_CONTENT ("HelloWorld")},
+    {"nodata", "data:,", NULL, STRING_CONTENT ("")},
+    {"case_sensitive", "dATa:,HelloWorld", NULL, STRING_CONTENT ("HelloWorld")},
+    {"semicolon_after_comma", "data:,;base64", NULL,
+        STRING_CONTENT (";base64")},
+    {"mimetype", "data:image/png,nopng", "image/png", STRING_CONTENT ("nopng")},
+    {"charset_base64",
+          "data:text/plain;charset=ISO-8859-5;base64,wOPh29DdILjW0ePb0OLe0g==",
+        "text/plain", STRING_CONTENT ("Руслан Ижбулатов")},
+    /* *INDENT-ON* */
+  };
+  gint i;
+#undef STRING_CONTENT
+
+  for (i = 0; i < G_N_ELEMENTS (tests); i++) {
+    GstHarness *h;
+    GstElement *src;
+    GstBuffer *buf;
+
+    src = gst_element_factory_make ("dataurisrc", NULL);
+    g_object_set (src, "uri", tests[i].uri, NULL);
+    h = gst_harness_new_with_element (src, NULL, "src");
+    gst_harness_play (h);
+
+    buf = gst_harness_pull (h);
+    fail_unless (buf);
+
+    gst_check_buffer_data (buf, tests[i].contents, tests[i].contents_len);
+    gst_buffer_unref (buf);
+
+    gst_harness_teardown (h);
+    gst_object_unref (src);
+  }
+}
+
+GST_END_TEST;
+
 static Suite *
 dataurisrc_suite (void)
 {
@@ -531,6 +580,7 @@ dataurisrc_suite (void)
   tcase_add_test (tc_chain, test_dataurisrc_push);
   tcase_add_test (tc_chain, test_dataurisrc_uri_iface);
   tcase_add_test (tc_chain, test_dataurisrc_from_uri);
+  tcase_add_test (tc_chain, test_dataurisrc_uris);
 
   return s;
 }