2005-07-12 Thomas Vander Stichele <thomas at apestaart dot org>
+ * check/gst/gstelement.c: (GST_START_TEST), (gst_element_suite):
+ * check/gst/gstmessage.c: (GST_START_TEST):
+ * check/gst/gststructure.c: (GST_START_TEST),
+ (gst_structure_suite), (main):
+ more testing
+ * gst/gstelement.c: (gst_element_message_full):
+ clean up GError and debug string now that they get copied
+ * gst/gstmessage.c: (gst_message_new_error),
+ (gst_message_new_warning), (gst_message_parse_error),
+ (gst_message_parse_warning):
+ use GST_TYPE_G_ERROR for structure_new, and take copies of
+ arguments, so that we don't mess up refcounting
+
+2005-07-12 Thomas Vander Stichele <thomas at apestaart dot org>
+
* check/Makefile.am:
add per-test valgrind targets
* check/gst-libs/gdp.c: (GST_START_TEST),
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;
Suite *
gst_element_suite (void)
suite_add_tcase (s, tc_chain);
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);
return s;
}
fail_if (message == NULL);
fail_unless (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR);
fail_unless (GST_MESSAGE_SRC (message) == NULL);
+
+ g_error_free (error);
error = NULL;
debug = NULL;
+
gst_message_parse_error (message, &error, &debug);
fail_if (error == NULL);
fail_if (debug == NULL);
fail_unless (error->domain == domain);
fail_unless (error->code == 10);
fail_unless (strcmp (debug, "error string") == 0);
+
gst_message_unref (message);
+ g_error_free (error);
+ g_free (debug);
}
/* GST_MESSAGE_WARNING */
{
fail_if (message == NULL);
fail_unless (GST_MESSAGE_TYPE (message) == GST_MESSAGE_WARNING);
fail_unless (GST_MESSAGE_SRC (message) == NULL);
+
+ g_error_free (warning);
warning = NULL;
debug = NULL;
+
gst_message_parse_warning (message, &warning, &debug);
fail_if (warning == NULL);
fail_if (debug == NULL);
fail_unless (warning->domain == domain);
fail_unless (warning->code == 10);
fail_unless (strcmp (debug, "warning string") == 0);
+
gst_message_unref (message);
+ g_error_free (warning);
+ g_free (debug);
}
/* GST_MESSAGE_INFO */
{
fail_if (tag == NULL);
/* FIXME, check the actual tags */
gst_message_unref (message);
+ gst_tag_list_free (tag);
}
/* GST_MESSAGE_BUFFERING */
{
return s;
}
+GST_START_TEST (test_structure_new)
+{
+ GstStructure *s;
+ GError *e;
+ GQuark domain;
+
+ s = gst_structure_new ("name", "key", G_TYPE_STRING, "value", NULL);
+ fail_unless (strcmp (gst_structure_get_string (s, "key"), "value") == 0);
+ gst_structure_free (s);
+
+ domain = g_quark_from_string ("test");
+ e = g_error_new (domain, 0, "a test error");
+ s = gst_structure_new ("name", "key", GST_TYPE_G_ERROR, e, NULL);
+ g_error_free (e);
+ gst_structure_free (s);
+}
+
+GST_END_TEST;
+
+Suite *
+gst_structure_suite (void)
+{
+ Suite *s = suite_create ("GstStructure");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_from_string_int);
+ tcase_add_test (tc_chain, test_structure_new);
+ return s;
+}
+
int
main (int argc, char **argv)
{
int nf;
- Suite *s = gst_value_suite ();
+ Suite *s = gst_structure_suite ();
SRunner *sr = srunner_create (s);
gst_check_init (&argc, &argv);
if (type == GST_MESSAGE_ERROR) {
message = gst_message_new_error (GST_OBJECT (element), gerror, sent_debug);
- } else {
+ } else if (type == GST_MESSAGE_WARNING) {
message = gst_message_new_warning (GST_OBJECT (element), gerror,
sent_debug);
+ } else {
+ g_assert_not_reached ();
}
gst_element_post_message (element, message);
sent_text);
/* cleanup */
+ g_error_free (gerror);
+ g_free (sent_debug);
g_free (sent_text);
- /* sent_debug is not part of the gerror, so don't free it here */
}
/**
#include <string.h> /* memcpy */
#include "gst_private.h"
+#include "gsterror.h"
#include "gstinfo.h"
#include "gstmemchunk.h"
#include "gstmessage.h"
* @error: The GError for this message.
* @debug: A debugging string for something or other.
*
- * Create a new error message. The message will take ownership of @error and
+ * Create a new error message. The message will copy @error and
* @debug.
*
* Returns: The new error message.
GstStructure *s;
message = gst_message_new (GST_MESSAGE_ERROR, src);
- s = gst_structure_new ("GstMessageError", "gerror", G_TYPE_POINTER, error,
+ /* gst_structure_new takes copies of the types passed in */
+ s = gst_structure_new ("GstMessageError", "gerror", GST_TYPE_G_ERROR, error,
"debug", G_TYPE_STRING, debug, NULL);
gst_structure_set_parent_refcount (s, &message->mini_object.refcount);
message->structure = s;
* @error: The GError for this message.
* @debug: A debugging string for something or other.
*
- * Create a new warning message. The message will take ownership of @error and
+ * Create a new warning message. The message will make copies of @error and
* @debug.
*
* Returns: The new warning message.
GstStructure *s;
message = gst_message_new (GST_MESSAGE_WARNING, src);
- s = gst_structure_new ("GstMessageWarning", "gerror", G_TYPE_POINTER, error,
+ /* gst_structure_new takes copies of the types passed in */
+ s = gst_structure_new ("GstMessageWarning", "gerror", GST_TYPE_G_ERROR, error,
"debug", G_TYPE_STRING, debug, NULL);
gst_structure_set_parent_refcount (s, &message->mini_object.refcount);
message->structure = s;
error_gvalue = gst_structure_get_value (message->structure, "gerror");
g_return_if_fail (error_gvalue != NULL);
- g_return_if_fail (G_VALUE_TYPE (error_gvalue) == G_TYPE_POINTER);
+ g_return_if_fail (G_VALUE_TYPE (error_gvalue) == GST_TYPE_G_ERROR);
- error_val = g_value_get_pointer (error_gvalue);
+ error_val = (GError *) g_value_get_boxed (error_gvalue);
if (error_val)
*gerror = g_error_copy (error_val);
else
error_gvalue = gst_structure_get_value (message->structure, "gerror");
g_return_if_fail (error_gvalue != NULL);
- g_return_if_fail (G_VALUE_TYPE (error_gvalue) == G_TYPE_POINTER);
+ g_return_if_fail (G_VALUE_TYPE (error_gvalue) == GST_TYPE_G_ERROR);
- error_val = g_value_get_pointer (error_gvalue);
+ error_val = (GError *) g_value_get_boxed (error_gvalue);
if (error_val)
*gerror = g_error_copy (error_val);
else
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;
Suite *
gst_element_suite (void)
suite_add_tcase (s, tc_chain);
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);
return s;
}
fail_if (message == NULL);
fail_unless (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR);
fail_unless (GST_MESSAGE_SRC (message) == NULL);
+
+ g_error_free (error);
error = NULL;
debug = NULL;
+
gst_message_parse_error (message, &error, &debug);
fail_if (error == NULL);
fail_if (debug == NULL);
fail_unless (error->domain == domain);
fail_unless (error->code == 10);
fail_unless (strcmp (debug, "error string") == 0);
+
gst_message_unref (message);
+ g_error_free (error);
+ g_free (debug);
}
/* GST_MESSAGE_WARNING */
{
fail_if (message == NULL);
fail_unless (GST_MESSAGE_TYPE (message) == GST_MESSAGE_WARNING);
fail_unless (GST_MESSAGE_SRC (message) == NULL);
+
+ g_error_free (warning);
warning = NULL;
debug = NULL;
+
gst_message_parse_warning (message, &warning, &debug);
fail_if (warning == NULL);
fail_if (debug == NULL);
fail_unless (warning->domain == domain);
fail_unless (warning->code == 10);
fail_unless (strcmp (debug, "warning string") == 0);
+
gst_message_unref (message);
+ g_error_free (warning);
+ g_free (debug);
}
/* GST_MESSAGE_INFO */
{
fail_if (tag == NULL);
/* FIXME, check the actual tags */
gst_message_unref (message);
+ gst_tag_list_free (tag);
}
/* GST_MESSAGE_BUFFERING */
{
return s;
}
+GST_START_TEST (test_structure_new)
+{
+ GstStructure *s;
+ GError *e;
+ GQuark domain;
+
+ s = gst_structure_new ("name", "key", G_TYPE_STRING, "value", NULL);
+ fail_unless (strcmp (gst_structure_get_string (s, "key"), "value") == 0);
+ gst_structure_free (s);
+
+ domain = g_quark_from_string ("test");
+ e = g_error_new (domain, 0, "a test error");
+ s = gst_structure_new ("name", "key", GST_TYPE_G_ERROR, e, NULL);
+ g_error_free (e);
+ gst_structure_free (s);
+}
+
+GST_END_TEST;
+
+Suite *
+gst_structure_suite (void)
+{
+ Suite *s = suite_create ("GstStructure");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_from_string_int);
+ tcase_add_test (tc_chain, test_structure_new);
+ return s;
+}
+
int
main (int argc, char **argv)
{
int nf;
- Suite *s = gst_value_suite ();
+ Suite *s = gst_structure_suite ();
SRunner *sr = srunner_create (s);
gst_check_init (&argc, &argv);