* Boston, MA 02111-1307, USA.
*/
-#include "../gstcheck.h"
+#include <gst/check/gstcheck.h>
-START_TEST (test_add_pad)
+GST_START_TEST (test_add_remove_pad)
{
GstElement *e;
GstPad *p;
gst_object_unref (p);
}
-END_TEST;
+GST_END_TEST;
+
+GST_START_TEST (test_add_pad_unref_element)
+{
+ GstElement *e;
+ GstPad *p;
+
+ /* getting an existing element class is cheating, but easier */
+ e = gst_element_factory_make ("fakesrc", "source");
+
+ /* create a new floating pad with refcount 1 */
+ p = gst_pad_new ("source", GST_PAD_SRC);
+ ASSERT_OBJECT_REFCOUNT (p, "pad", 1);
+ /* ref it for ourselves */
+ gst_object_ref (p);
+ ASSERT_OBJECT_REFCOUNT (p, "pad", 2);
+ /* adding it sinks the pad -> not floating, same refcount */
+ gst_element_add_pad (e, p);
+ ASSERT_OBJECT_REFCOUNT (p, "pad", 2);
+
+ /* unreffing the element should clean it up */
+ gst_object_unref (GST_OBJECT (e));
+
+ ASSERT_OBJECT_REFCOUNT (p, "pad", 1);
+
+ /* clean up our own reference */
+ gst_object_unref (p);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_error_no_bus)
+{
+ GstElement *e;
+
+ e = gst_element_factory_make ("fakesrc", "source");
+
+ /* I don't want errors shown */
+ gst_debug_set_default_threshold (GST_LEVEL_NONE);
+
+ GST_ELEMENT_ERROR (e, RESOURCE, OPEN_READ, ("I could not read"), ("debug"));
+
+ gst_object_unref (e);
+}
+
+GST_END_TEST;
+
+/* link and run two elements without putting them in a pipeline */
+GST_START_TEST (test_link)
+{
+ GstElement *src, *sink;
+
+ src = gst_element_factory_make ("fakesrc", "source");
+ sink = gst_element_factory_make ("fakesink", "sink");
+
+ fail_unless (gst_element_link_pads (src, "src", sink, "sink"));
+
+ /* do sink to source state change */
+ gst_element_set_state (sink, GST_STATE_PAUSED);
+ gst_element_set_state (src, GST_STATE_PAUSED);
+
+ /* wait for preroll */
+ gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);
+
+ /* play some more */
+ gst_element_set_state (sink, GST_STATE_PLAYING);
+ gst_element_set_state (src, GST_STATE_PLAYING);
+
+ g_usleep (G_USEC_PER_SEC);
+
+ /* and stop */
+ gst_element_set_state (sink, GST_STATE_PAUSED);
+ gst_element_set_state (src, GST_STATE_PAUSED);
+
+ /* wait for preroll */
+ gst_element_get_state (sink, NULL, NULL, GST_CLOCK_TIME_NONE);
+
+ gst_element_set_state (sink, GST_STATE_NULL);
+ gst_element_set_state (src, GST_STATE_NULL);
+}
+
+GST_END_TEST;
+
+/* linking two elements without pads should fail */
+GST_START_TEST (test_link_no_pads)
+{
+ GstElement *src, *sink;
+
+ src = gst_bin_new ("src");
+ sink = gst_bin_new ("sink");
+
+ fail_if (gst_element_link (src, sink));
+
+ gst_object_unref (src);
+ gst_object_unref (sink);
+}
+
+GST_END_TEST;
Suite *
gst_element_suite (void)
TCase *tc_chain = tcase_create ("element tests");
suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_add_pad);
+ tcase_add_test (tc_chain, test_add_remove_pad);
+ tcase_add_test (tc_chain, test_add_pad_unref_element);
+ tcase_add_test (tc_chain, test_error_no_bus);
+ tcase_add_test (tc_chain, test_link);
+ tcase_add_test (tc_chain, test_link_no_pads);
return s;
}