From 2bed61ee2ff5f1bb7c8ce068ae3dd992e074ffea Mon Sep 17 00:00:00 2001 From: Matthieu Bouron Date: Mon, 12 Aug 2013 18:33:39 +0100 Subject: [PATCH] aiffparse: add tests https://bugzilla.gnome.org/show_bug.cgi?id=705993 --- tests/check/Makefile.am | 1 + tests/check/elements/aiffparse.c | 249 +++++++++++++++++++++++++++++++++++++++ tests/files/Makefile.am | 1 + tests/files/s16be-id3v2.aiff | Bin 0 -> 23254 bytes 4 files changed, 251 insertions(+) create mode 100644 tests/check/elements/aiffparse.c create mode 100644 tests/files/s16be-id3v2.aiff diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 943f78b..ae06100 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -202,6 +202,7 @@ check_PROGRAMS = \ $(check_opus) \ $(check_curl) \ $(check_shm) \ + elements/aiffparse \ elements/autoconvert \ elements/autovideoconvert \ elements/asfmux \ diff --git a/tests/check/elements/aiffparse.c b/tests/check/elements/aiffparse.c new file mode 100644 index 0000000..2d88e49 --- /dev/null +++ b/tests/check/elements/aiffparse.c @@ -0,0 +1,249 @@ +/* GStreamer + * + * unit test for aiffparse + * + * Copyright (C) <2013> Matthieu Bouron + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +#define DATA_FILENAME "s16be-id3v2.aiff" +#define DATA_SIZE 23254 +#define SSND_DATA_OFFSET 68 +#define SSND_DATA_SIZE 20480 + +static GstPad *sinkpad; +static GMainLoop *loop = NULL; +static gboolean have_eos = FALSE; +static gboolean have_tags = FALSE; +static gchar *data = NULL; +static guint64 data_size = 0; +static guint64 data_read = 0; +static guint64 data_offset = 0; + +static GstStaticPadTemplate sinktemplate = +GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + +static void +sink_check_caps (GstPad * pad, GstCaps * caps) +{ + GstCaps *tcaps = gst_caps_new_simple ("audio/x-raw", + "rate", G_TYPE_INT, 44100, + "channels", G_TYPE_INT, 2, + "format", G_TYPE_STRING, "S16BE", + "layout", G_TYPE_STRING, "interleaved", + NULL); + + fail_unless (gst_caps_can_intersect (caps, tcaps)); + gst_caps_unref (tcaps); +} + +static GstFlowReturn +sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) +{ + GstMapInfo info; + + gst_buffer_map (buffer, &info, GST_MAP_READ); + + fail_unless ((data_offset + info.size) <= data_size); + fail_unless (memcmp (info.data, data + data_offset, info.size) == 0); + + data_read += info.size; + data_offset += info.size; + + gst_buffer_unmap (buffer, &info); + gst_buffer_unref (buffer); + + return GST_FLOW_OK; +} + +static gboolean +sink_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GST_DEBUG_OBJECT (pad, "Got %s event %p: %" GST_PTR_FORMAT, + GST_EVENT_TYPE_NAME (event), event, event); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_EOS: + if (loop) { + while (!g_main_loop_is_running (loop)); + } + + have_eos = TRUE; + if (loop) + g_main_loop_quit (loop); + break; + case GST_EVENT_CAPS: + { + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + sink_check_caps (pad, caps); + break; + } + case GST_EVENT_TAG: + { + int i, ret; + gchar *buf = NULL; + GstTagList *aiff_tags = NULL; + const gchar *tags[][2] = { + {"title", "Title"}, {"artist", "Artist"}, + }; + + gst_event_parse_tag (event, &aiff_tags); + fail_unless (aiff_tags != NULL); + + for (i = 0; i < sizeof (tags) / sizeof (*tags); i++) { + buf = NULL; + fail_unless (gst_tag_list_get_string (aiff_tags, tags[i][0], &buf)); + ret = g_strcmp0 (buf, tags[i][1]); + g_free (buf); + fail_unless (ret == 0); + } + + have_tags = TRUE; + break; + } + default: + break; + } + + gst_event_unref (event); + + return TRUE; +} + +static GstPad * +create_sink_pad (void) +{ + sinkpad = gst_pad_new_from_static_template (&sinktemplate, "sink"); + + gst_pad_set_chain_function (sinkpad, sink_chain); + gst_pad_set_event_function (sinkpad, sink_event); + + return sinkpad; +} + +static void +run_check (gboolean push_mode) +{ + gchar *path; + GstPad *aiff_srcpad; + GError *error = NULL; + GstElement *src, *sep, *aiffparse; + + have_eos = FALSE; + have_tags = FALSE; + data_read = 0; + data_size = 0; + data_offset = SSND_DATA_OFFSET; + loop = g_main_loop_new (NULL, FALSE); + + GST_INFO ("%s mode", push_mode ? "Pull" : "Push"); + + aiffparse = gst_element_factory_make ("aiffparse", "aiffparse"); + fail_unless (aiffparse != NULL); + + aiff_srcpad = gst_element_get_static_pad (aiffparse, "src"); + fail_unless (aiff_srcpad != NULL); + + src = gst_element_factory_make ("filesrc", "filesrc"); + fail_unless (src != NULL); + + sinkpad = create_sink_pad (); + fail_unless (sinkpad != NULL); + + if (push_mode) { + sep = gst_element_factory_make ("queue", "queue"); + } else { + sep = gst_element_factory_make ("identity", "identity"); + } + fail_unless (sep != NULL); + + fail_unless (gst_element_link (src, sep)); + fail_unless (gst_element_link (sep, aiffparse)); + + fail_unless (gst_pad_link (aiff_srcpad, sinkpad) == GST_PAD_LINK_OK); + gst_object_unref (aiff_srcpad); + + path = g_build_filename (GST_TEST_FILES_PATH, DATA_FILENAME, NULL); + GST_LOG ("Reading file '%s'", path); + g_object_set (src, "location", path, NULL); + + fail_unless (g_file_get_contents (path, &data, &data_size, &error)); + fail_unless (data_size == DATA_SIZE); + + GST_INFO ("Setting to PLAYING"); + gst_pad_set_active (sinkpad, TRUE); + fail_unless (gst_element_set_state (src, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS); + fail_unless (gst_element_set_state (sep, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS); + fail_unless (gst_element_set_state (aiffparse, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS); + + g_main_loop_run (loop); + fail_unless (have_eos == TRUE); + fail_unless (data_read == SSND_DATA_SIZE); + fail_unless (push_mode || (have_tags == TRUE)); + + gst_element_set_state (src, GST_STATE_NULL); + gst_element_set_state (sep, GST_STATE_NULL); + gst_element_set_state (aiffparse, GST_STATE_NULL); + gst_pad_set_active (sinkpad, FALSE); + + gst_object_unref (aiffparse); + gst_object_unref (src); + gst_object_unref (sinkpad); + g_main_loop_unref (loop); + loop = NULL; +} + +GST_START_TEST (test_pull) +{ + run_check (FALSE); +} + +GST_END_TEST; + +GST_START_TEST (test_push) +{ + run_check (TRUE); +} + +GST_END_TEST; + +static Suite * +aiffparse_suite (void) +{ + Suite *s = suite_create ("aiffparse"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_set_timeout (tc_chain, 180); + tcase_add_test (tc_chain, test_pull); + tcase_add_test (tc_chain, test_push); + + return s; +} + +GST_CHECK_MAIN (aiffparse); diff --git a/tests/files/Makefile.am b/tests/files/Makefile.am index d46c18e..710d286 100644 --- a/tests/files/Makefile.am +++ b/tests/files/Makefile.am @@ -1,5 +1,6 @@ EXTRA_DIST = \ barcode.png \ cbr_stream.mp3 \ + s16be-id3v2.aiff \ stream.mp2 \ vbr_stream.mp3 diff --git a/tests/files/s16be-id3v2.aiff b/tests/files/s16be-id3v2.aiff new file mode 100644 index 0000000000000000000000000000000000000000..4f1e5b18bf77e6153d15b2b1210b6dca54ce4932 GIT binary patch literal 23254 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 literal 0 HcmV?d00001 -- 2.7.4