From 88df6839ae2c2880fa8954ce5ae10de5d518cf94 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Wed, 23 Nov 2005 11:52:48 +0000 Subject: [PATCH] check/: add a test for audiotestsrc, testing all waves. Even seems leak-free at first glance, nice job Stefan Original commit message from CVS: * check/Makefile.am: * check/elements/audiotestsrc.c: (setup_audiotestsrc), (cleanup_audiotestsrc), (GST_START_TEST), (audiotestsrc_suite), (main): add a test for audiotestsrc, testing all waves. Even seems leak-free at first glance, nice job Stefan --- ChangeLog | 9 ++ check/Makefile.am | 2 +- check/elements/audiotestsrc.c | 142 ++++++++++++++++++++++++++++ tests/check/Makefile.am | 2 +- tests/check/elements/audiotestsrc.c | 142 ++++++++++++++++++++++++++++ 5 files changed, 295 insertions(+), 2 deletions(-) create mode 100644 check/elements/audiotestsrc.c create mode 100644 tests/check/elements/audiotestsrc.c diff --git a/ChangeLog b/ChangeLog index 4d4cbb8101..669dde22b4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-11-23 Thomas Vander Stichele + + * check/Makefile.am: + * check/elements/audiotestsrc.c: (setup_audiotestsrc), + (cleanup_audiotestsrc), (GST_START_TEST), (audiotestsrc_suite), + (main): + add a test for audiotestsrc, testing all waves. Even seems + leak-free at first glance, nice job Stefan + 2005-11-23 Jan Schmidt * po/af.po: diff --git a/check/Makefile.am b/check/Makefile.am index 77a70fb83a..7d603afaa7 100644 --- a/check/Makefile.am +++ b/check/Makefile.am @@ -30,13 +30,13 @@ endif check_PROGRAMS = \ elements/audioconvert \ elements/audioresample \ + elements/audiotestsrc \ elements/volume \ generic/states \ pipelines/simple_launch_lines \ clocks/selection \ $(check_vorbis) -# tests to fix leaks in VALGRIND_TO_FIX = \ elements/audioresample \ generic/states \ diff --git a/check/elements/audiotestsrc.c b/check/elements/audiotestsrc.c new file mode 100644 index 0000000000..169416b581 --- /dev/null +++ b/check/elements/audiotestsrc.c @@ -0,0 +1,142 @@ +/* GStreamer + * + * unit test for audiotestsrc + * + * Copyright (C) <2005> Thomas Vander Stichele + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +#include + +GList *buffers = NULL; +gboolean have_eos = FALSE; + +/* For ease of programming we use globals to keep refs for our floating + * src and sink pads we create; otherwise we always have to do get_pad, + * get_peer, and then remove references in every test function */ +GstPad *mysinkpad; + + +#define CAPS_TEMPLATE_STRING \ + "audio/x-raw-int, " \ + "channels = (int) 1, " \ + "rate = (int) [ 1, MAX ], " \ + "endianness = (int) BYTE_ORDER, " \ + "width = (int) 16, " \ + "depth = (int) 16, " \ + "signed = (bool) TRUE" + +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (CAPS_TEMPLATE_STRING) + ); + +GstElement * +setup_audiotestsrc () +{ + GstElement *audiotestsrc; + + GST_DEBUG ("setup_audiotestsrc"); + audiotestsrc = gst_check_setup_element ("audiotestsrc"); + mysinkpad = gst_check_setup_sink_pad (audiotestsrc, &sinktemplate, NULL); + gst_pad_set_active (mysinkpad, TRUE); + + return audiotestsrc; +} + +void +cleanup_audiotestsrc (GstElement * audiotestsrc) +{ + GST_DEBUG ("cleanup_audiotestsrc"); + + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + + gst_check_teardown_sink_pad (audiotestsrc); + gst_check_teardown_element (audiotestsrc); +} + +GST_START_TEST (test_all_waves) +{ + GstElement *audiotestsrc; + GObjectClass *oclass; + GParamSpec *property; + GEnumValue *values; + guint j = 0; + + audiotestsrc = setup_audiotestsrc (); + oclass = G_OBJECT_GET_CLASS (audiotestsrc); + property = g_object_class_find_property (oclass, "wave"); + fail_unless (G_IS_PARAM_SPEC_ENUM (property)); + values = G_ENUM_CLASS (g_type_class_ref (property->value_type))->values; + + + while (values[j].value_name) { + GST_DEBUG_OBJECT (audiotestsrc, "testing wave %s", values[j].value_name); + + fail_unless (gst_element_set_state (audiotestsrc, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + while (g_list_length (buffers) < 10); + + gst_element_set_state (audiotestsrc, GST_STATE_READY); + + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ++j; + } + + /* cleanup */ + cleanup_audiotestsrc (audiotestsrc); +} + +GST_END_TEST; + +Suite * +audiotestsrc_suite (void) +{ + Suite *s = suite_create ("audiotestsrc"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_all_waves); + + return s; +} + +int +main (int argc, char **argv) +{ + int nf; + + Suite *s = audiotestsrc_suite (); + SRunner *sr = srunner_create (s); + + gst_check_init (&argc, &argv); + + srunner_run_all (sr, CK_NORMAL); + nf = srunner_ntests_failed (sr); + srunner_free (sr); + + return nf; +} diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 77a70fb83a..7d603afaa7 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -30,13 +30,13 @@ endif check_PROGRAMS = \ elements/audioconvert \ elements/audioresample \ + elements/audiotestsrc \ elements/volume \ generic/states \ pipelines/simple_launch_lines \ clocks/selection \ $(check_vorbis) -# tests to fix leaks in VALGRIND_TO_FIX = \ elements/audioresample \ generic/states \ diff --git a/tests/check/elements/audiotestsrc.c b/tests/check/elements/audiotestsrc.c new file mode 100644 index 0000000000..169416b581 --- /dev/null +++ b/tests/check/elements/audiotestsrc.c @@ -0,0 +1,142 @@ +/* GStreamer + * + * unit test for audiotestsrc + * + * Copyright (C) <2005> Thomas Vander Stichele + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +#include + +GList *buffers = NULL; +gboolean have_eos = FALSE; + +/* For ease of programming we use globals to keep refs for our floating + * src and sink pads we create; otherwise we always have to do get_pad, + * get_peer, and then remove references in every test function */ +GstPad *mysinkpad; + + +#define CAPS_TEMPLATE_STRING \ + "audio/x-raw-int, " \ + "channels = (int) 1, " \ + "rate = (int) [ 1, MAX ], " \ + "endianness = (int) BYTE_ORDER, " \ + "width = (int) 16, " \ + "depth = (int) 16, " \ + "signed = (bool) TRUE" + +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (CAPS_TEMPLATE_STRING) + ); + +GstElement * +setup_audiotestsrc () +{ + GstElement *audiotestsrc; + + GST_DEBUG ("setup_audiotestsrc"); + audiotestsrc = gst_check_setup_element ("audiotestsrc"); + mysinkpad = gst_check_setup_sink_pad (audiotestsrc, &sinktemplate, NULL); + gst_pad_set_active (mysinkpad, TRUE); + + return audiotestsrc; +} + +void +cleanup_audiotestsrc (GstElement * audiotestsrc) +{ + GST_DEBUG ("cleanup_audiotestsrc"); + + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + + gst_check_teardown_sink_pad (audiotestsrc); + gst_check_teardown_element (audiotestsrc); +} + +GST_START_TEST (test_all_waves) +{ + GstElement *audiotestsrc; + GObjectClass *oclass; + GParamSpec *property; + GEnumValue *values; + guint j = 0; + + audiotestsrc = setup_audiotestsrc (); + oclass = G_OBJECT_GET_CLASS (audiotestsrc); + property = g_object_class_find_property (oclass, "wave"); + fail_unless (G_IS_PARAM_SPEC_ENUM (property)); + values = G_ENUM_CLASS (g_type_class_ref (property->value_type))->values; + + + while (values[j].value_name) { + GST_DEBUG_OBJECT (audiotestsrc, "testing wave %s", values[j].value_name); + + fail_unless (gst_element_set_state (audiotestsrc, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + while (g_list_length (buffers) < 10); + + gst_element_set_state (audiotestsrc, GST_STATE_READY); + + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ++j; + } + + /* cleanup */ + cleanup_audiotestsrc (audiotestsrc); +} + +GST_END_TEST; + +Suite * +audiotestsrc_suite (void) +{ + Suite *s = suite_create ("audiotestsrc"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_all_waves); + + return s; +} + +int +main (int argc, char **argv) +{ + int nf; + + Suite *s = audiotestsrc_suite (); + SRunner *sr = srunner_create (s); + + gst_check_init (&argc, &argv); + + srunner_run_all (sr, CK_NORMAL); + nf = srunner_ntests_failed (sr); + srunner_free (sr); + + return nf; +}