From a64522e8866f74bfa398459802da47f20ecd5462 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 19 Apr 2011 14:41:48 +0100 Subject: [PATCH] tests: add generic index-setting test --- tests/check/Makefile.am | 5 +- tests/check/generic/.gitignore | 1 + tests/check/generic/index.c | 140 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 tests/check/generic/index.c diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 23e9d87..77241ba 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -44,6 +44,7 @@ check_x264enc= endif check_PROGRAMS = \ + generic/index \ generic/states \ $(AMRNB) \ $(LAME) \ @@ -61,7 +62,9 @@ AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) \ LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS) # valgrind testing -VALGRIND_TESTS_DISABLE = elements/x264enc +VALGRIND_TESTS_DISABLE = \ + generic/index \ + elements/x264enc SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-ugly.supp diff --git a/tests/check/generic/.gitignore b/tests/check/generic/.gitignore index b9eed5c..8d9bd1f 100644 --- a/tests/check/generic/.gitignore +++ b/tests/check/generic/.gitignore @@ -1,2 +1,3 @@ .dirstamp +index states diff --git a/tests/check/generic/index.c b/tests/check/generic/index.c new file mode 100644 index 0000000..e733c6d --- /dev/null +++ b/tests/check/generic/index.c @@ -0,0 +1,140 @@ +/* GStreamer + * unit test for index setting on all elements + * Copyright (C) 2005 Thomas Vander Stichele + * Copyright (C) 2011 Tim-Philipp Müller + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +static GList *elements = NULL; + +static void +setup (void) +{ + GList *features, *f; + GList *plugins, *p; + gchar **ignorelist = NULL; + const gchar *INDEX_IGNORE_ELEMENTS = NULL; + + GST_DEBUG ("getting elements for package %s", PACKAGE); + INDEX_IGNORE_ELEMENTS = g_getenv ("GST_INDEX_IGNORE_ELEMENTS"); + if (!g_getenv ("GST_NO_INDEX_IGNORE_ELEMENTS") && INDEX_IGNORE_ELEMENTS) { + GST_DEBUG ("Will ignore element factories: '%s'", INDEX_IGNORE_ELEMENTS); + ignorelist = g_strsplit (INDEX_IGNORE_ELEMENTS, " ", 0); + } + + plugins = gst_registry_get_plugin_list (gst_registry_get_default ()); + + for (p = plugins; p; p = p->next) { + GstPlugin *plugin = p->data; + + if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0) + continue; + + features = + gst_registry_get_feature_list_by_plugin (gst_registry_get_default (), + gst_plugin_get_name (plugin)); + + for (f = features; f; f = f->next) { + GstPluginFeature *feature = f->data; + const gchar *name = gst_plugin_feature_get_name (feature); + gboolean ignore = FALSE; + + if (!GST_IS_ELEMENT_FACTORY (feature)) + continue; + + if (ignorelist) { + gchar **s; + + for (s = ignorelist; s && *s; ++s) { + if (g_str_has_prefix (name, *s)) { + GST_DEBUG ("ignoring element %s", name); + ignore = TRUE; + } + } + if (ignore) + continue; + } + + GST_DEBUG ("adding element %s", name); + elements = g_list_prepend (elements, (gpointer) g_strdup (name)); + } + gst_plugin_feature_list_free (features); + } + gst_plugin_list_free (plugins); + g_strfreev (ignorelist); +} + +static void +teardown (void) +{ + GList *e; + + for (e = elements; e; e = e->next) { + g_free (e->data); + } + g_list_free (elements); + elements = NULL; +} + +GST_START_TEST (test_set_index) +{ + GstElement *element; + GstIndex *idx; + GList *e; + + idx = gst_index_factory_make ("memindex"); + if (idx == NULL) + return; + + gst_object_ref_sink (idx); + + for (e = elements; e; e = e->next) { + const gchar *name = e->data; + + GST_INFO ("testing element %s", name); + element = gst_element_factory_make (name, name); + fail_if (element == NULL, "Could not make element from factory %s", name); + + gst_element_set_index (element, idx); + gst_object_unref (element); + } + + gst_object_unref (idx); +} + +GST_END_TEST; + +static Suite * +index_suite (void) +{ + Suite *s = suite_create ("index"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_checked_fixture (tc_chain, setup, teardown); + tcase_add_test (tc_chain, test_set_index); + + return s; +} + +GST_CHECK_MAIN (index); -- 2.7.4