diff options
author | Stefan Kost <ensonic@users.sourceforge.net> | 2007-09-20 15:06:23 +0000 |
---|---|---|
committer | Stefan Kost <ensonic@users.sourceforge.net> | 2007-09-20 15:06:23 +0000 |
commit | ac256b5d1580ce1691d38192132b3ebbfa661e3c (patch) | |
tree | 998a7ac34735ee7727ddb322df14ccdd9c19f7f2 /tests/check | |
parent | 7067d01d2a9e46a52f347cfa777e5a50f1d41494 (diff) | |
download | gst-plugins-bad-ac256b5d1580ce1691d38192132b3ebbfa661e3c.tar.gz gst-plugins-bad-ac256b5d1580ce1691d38192132b3ebbfa661e3c.tar.bz2 gst-plugins-bad-ac256b5d1580ce1691d38192132b3ebbfa661e3c.zip |
Fix memory leaks. More to come.
Original commit message from CVS:
* ext/alsaspdif/alsaspdifsink.c:
* ext/timidity/gsttimidity.c:
* ext/timidity/gstwildmidi.c:
* gst/mpegvideoparse/mpegvideoparse.c:
Fix memory leaks. More to come.
* tests/check/Makefile.am:
* tests/check/generic/states.c:
Improved state change unit test.
Diffstat (limited to 'tests/check')
-rw-r--r-- | tests/check/Makefile.am | 7 | ||||
-rw-r--r-- | tests/check/generic/states.c | 150 |
2 files changed, 130 insertions, 27 deletions
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 945d9e6f..80a94e61 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/common/check.mak -CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.xml +CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.reg GST_TOOLS_DIR = $(top_builddir)/tools @@ -12,7 +12,8 @@ REGISTRY_ENVIRONMENT = \ TESTS_ENVIRONMENT = \ $(REGISTRY_ENVIRONMENT) \ GST_PLUGIN_SYSTEM_PATH= \ - GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GSTPB_PLUGINS_DIR):$(GST_PLUGINS_DIR) + GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GSTPB_PLUGINS_DIR):$(GST_PLUGINS_DIR) \ + STATE_IGNORE_ELEMENTS="glimagesink" plugindir = $(libdir)/gstreamer-@GST_MAJORMINOR@ @@ -20,7 +21,7 @@ plugindir = $(libdir)/gstreamer-@GST_MAJORMINOR@ install-pluginLTLIBRARIES: # the core dumps of some machines have PIDs appended -CLEANFILES = core.* test-registry.xml +CLEANFILES = core.* test-registry.* SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp diff --git a/tests/check/generic/states.c b/tests/check/generic/states.c index c13f3dd7..6b5ab990 100644 --- a/tests/check/generic/states.c +++ b/tests/check/generic/states.c @@ -28,15 +28,17 @@ #include <gst/check/gstcheck.h> -GST_START_TEST (test_state_changes) +static GList *elements = NULL; + +static void +setup () { - GstElement *element; GList *features, *f; GList *plugins, *p; gchar **ignorelist = NULL; const gchar *STATE_IGNORE_ELEMENTS = NULL; - GST_DEBUG ("testing elements from source %s", PACKAGE); + GST_DEBUG ("getting elements for package %s", PACKAGE); STATE_IGNORE_ELEMENTS = g_getenv ("STATE_IGNORE_ELEMENTS"); if (STATE_IGNORE_ELEMENTS) { GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS); @@ -76,26 +78,8 @@ GST_START_TEST (test_state_changes) continue; } - GST_DEBUG ("testing element %s", name); - element = gst_element_factory_make (name, name); - fail_if (element == NULL, "Could not make element from factory %s", name); - - if (GST_IS_PIPELINE (element)) { - GST_DEBUG ("element %s is a pipeline", name); - } - - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_PLAYING); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_NULL); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_PLAYING); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_NULL); - gst_object_unref (GST_OBJECT (element)); + GST_DEBUG ("adding element %s", name); + elements = g_list_prepend (elements, (gpointer) g_strdup (name)); } gst_plugin_feature_list_free (features); } @@ -103,8 +87,123 @@ GST_START_TEST (test_state_changes) g_strfreev (ignorelist); } +static void +teardown () +{ + GList *e; + + for (e = elements; e; e = e->next) { + g_free (e->data); + } + g_list_free (elements); + elements = NULL; +} + + +GST_START_TEST (test_state_changes_up_and_down_seq) +{ + GstElement *element; + GList *e; + + for (e = elements; e; e = e->next) { + const gchar *name = e->data; + + GST_DEBUG ("testing element %s", name); + element = gst_element_factory_make (name, name); + fail_if (element == NULL, "Could not make element from factory %s", name); + + if (GST_IS_PIPELINE (element)) { + GST_DEBUG ("element %s is a pipeline", name); + } + + gst_element_set_state (element, GST_STATE_READY); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_PLAYING); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_READY); + gst_element_set_state (element, GST_STATE_NULL); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_READY); + gst_element_set_state (element, GST_STATE_PLAYING); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_NULL); + gst_object_unref (GST_OBJECT (element)); + } +} + +GST_END_TEST; + +GST_START_TEST (test_state_changes_up_seq) +{ + GstElement *element; + GList *e; + + for (e = elements; e; e = e->next) { + const gchar *name = e->data; + + GST_DEBUG ("testing element %s", name); + element = gst_element_factory_make (name, name); + fail_if (element == NULL, "Could not make element from factory %s", name); + + if (GST_IS_PIPELINE (element)) { + GST_DEBUG ("element %s is a pipeline", name); + } + + gst_element_set_state (element, GST_STATE_READY); + + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_READY); + + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_PLAYING); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_READY); + + gst_element_set_state (element, GST_STATE_NULL); + gst_object_unref (GST_OBJECT (element)); + } +} + +GST_END_TEST; + +GST_START_TEST (test_state_changes_down_seq) +{ + GstElement *element; + GList *e; + + for (e = elements; e; e = e->next) { + const gchar *name = e->data; + + GST_DEBUG ("testing element %s", name); + element = gst_element_factory_make (name, name); + fail_if (element == NULL, "Could not make element from factory %s", name); + + if (GST_IS_PIPELINE (element)) { + GST_DEBUG ("element %s is a pipeline", name); + } + + gst_element_set_state (element, GST_STATE_READY); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_PLAYING); + + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_PLAYING); + + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_READY); + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_PLAYING); + + gst_element_set_state (element, GST_STATE_PAUSED); + gst_element_set_state (element, GST_STATE_READY); + gst_element_set_state (element, GST_STATE_NULL); + gst_object_unref (GST_OBJECT (element)); + } +} + GST_END_TEST; + Suite * states_suite (void) { @@ -112,7 +211,10 @@ states_suite (void) TCase *tc_chain = tcase_create ("general"); suite_add_tcase (s, tc_chain); - tcase_add_test (tc_chain, test_state_changes); + tcase_add_checked_fixture (tc_chain, setup, teardown); + tcase_add_test (tc_chain, test_state_changes_up_and_down_seq); + tcase_add_test (tc_chain, test_state_changes_up_seq); + tcase_add_test (tc_chain, test_state_changes_down_seq); return s; } |