diff options
Diffstat (limited to 'tests/check/gst/gstbin.c')
-rw-r--r-- | tests/check/gst/gstbin.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/check/gst/gstbin.c b/tests/check/gst/gstbin.c index badb0491a2..6b80d1db13 100644 --- a/tests/check/gst/gstbin.c +++ b/tests/check/gst/gstbin.c @@ -444,6 +444,51 @@ GST_START_TEST (test_watch_for_state_change) GST_END_TEST; +GST_START_TEST (test_state_change_error_message) +{ + GstElement *src, *sink, *bin; + GstBus *bus; + GstStateChangeReturn ret; + + bin = gst_element_factory_make ("bin", NULL); + fail_unless (bin != NULL, "Could not create bin"); + + bus = g_object_new (gst_bus_get_type (), NULL); + gst_element_set_bus (GST_ELEMENT_CAST (bin), bus); + + src = gst_element_factory_make ("fakesrc", NULL); + fail_if (src == NULL, "Could not create fakesrc"); + sink = gst_element_factory_make ("fakesink", NULL); + fail_if (sink == NULL, "Could not create fakesink"); + + /* add but don't link elements */ + gst_bin_add (GST_BIN (bin), sink); + gst_bin_add (GST_BIN (bin), src); + + /* change state, this should succeed */ + ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PAUSED); + fail_unless (ret == GST_STATE_CHANGE_ASYNC); + + /* now wait, the streaming thread will error because the source is not + * linked. */ + ret = gst_element_get_state (GST_ELEMENT (bin), NULL, NULL, + GST_CLOCK_TIME_NONE); + fail_unless (ret == GST_STATE_CHANGE_FAILURE); + + gst_bus_set_flushing (bus, TRUE); + + /* setting bin to NULL flushes the bus automatically */ + ret = gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL); + fail_unless (ret == GST_STATE_CHANGE_SUCCESS); + + /* clean up */ + gst_object_unref (bus); + gst_object_unref (bin); +} + +GST_END_TEST; + + /* adding an element with linked pads to a bin unlinks the * pads */ GST_START_TEST (test_add_linked) @@ -1042,6 +1087,7 @@ gst_bin_suite (void) tcase_add_test (tc_chain, test_message_state_changed_child); tcase_add_test (tc_chain, test_message_state_changed_children); tcase_add_test (tc_chain, test_watch_for_state_change); + tcase_add_test (tc_chain, test_state_change_error_message); tcase_add_test (tc_chain, test_add_linked); tcase_add_test (tc_chain, test_add_self); tcase_add_test (tc_chain, test_iterate_sorted); |