| #include <gst/gst.h> |
| |
| static gchar *_subject, *_category; |
| static gint _testnum = 0; |
| static gboolean _passed; |
| static gint _total_tests = 0, _passed_tests = 0; |
| static gint _random_size; |
| |
| void |
| tabpad (gchar * str, gint width) |
| { |
| int i; |
| |
| for (i = 0; i < width - strlen (str); i++) |
| fprintf (stderr, " "); |
| } |
| |
| #define TEST_SUBJECT(subject) fprintf(stderr,"Subject: %s\n",subject),_subject = subject |
| #define TEST_CATEGORY(category) fprintf(stderr,"\n\nCategory: %s\n",category) |
| |
| #define TEST(test) fprintf(stderr,"Test %d: %s...\n",_testnum,test),_passed = TRUE |
| #define ASSERT(expr) G_STMT_START{ \ |
| fprintf(stderr,"\t%s:",#expr);tabpad(#expr,50); \ |
| if (!(expr)) { \ |
| fprintf(stderr,"FAILED\n"); \ |
| _passed = FALSE; \ |
| } else { \ |
| fprintf(stderr,"passed\n"); \ |
| } \ |
| }G_STMT_END; |
| #define ENDTEST() G_STMT_START{ \ |
| _testnum++; \ |
| if (_passed) { \ |
| fprintf(stderr,"\tpassed.\n"); \ |
| _passed_tests++; \ |
| } else { \ |
| fprintf(stderr,"\tFAILED.\n"); \ |
| } \ |
| _total_tests++; \ |
| }G_STMT_END; |
| |
| void |
| SETUP_RANDOM_SIZE (void *random, gint size) |
| { |
| int i; |
| |
| if (random) |
| g_free (random); |
| _random_size = size; |
| random = g_malloc (_random_size); |
| for (i = 0; i < _random_size; i++) |
| ((unsigned char *) random)[i] = i; |
| } |
| |
| #define SETUP_RANDOM(random,type) SETUP_RANDOM_SIZE(random,sizeof(type)) |
| |
| gboolean |
| RANDOM_OK (void *random) |
| { |
| int i; |
| |
| for (i = 0; i < _random_size; i++) { |
| if (((unsigned char *) random)[i] != i) { |
| SETUP_RANDOM_SIZE (random, _random_size); |
| return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| int |
| main (int argc, char *argv[]) |
| { |
| GstObject *object; |
| GstObject *parent; |
| GstObject *newparent; |
| GtkObject *gtkobject; |
| GstObject *curparent; |
| |
| gst_init (&argc, &argv); |
| |
| TEST_SUBJECT ("GstObject"); |
| |
| |
| TEST_CATEGORY ("Creation"); |
| |
| TEST ("create object"); |
| /* setup */ |
| /* action */ |
| object = gst_object_new (); |
| /* assertions */ |
| ASSERT (object != NULL); |
| ASSERT (GST_IS_OBJECT (object)); |
| /* cleanup */ |
| g_free (object); |
| ENDTEST (); |
| |
| |
| /* new category */ |
| TEST_CATEGORY ("Refcounting"); |
| /* category setup */ |
| object = gst_object_new (); |
| |
| TEST ("new object"); |
| /* setup */ |
| /* action */ |
| /* assertions */ |
| ASSERT (object->refcount == 1); |
| ASSERT (GTK_OBJECT_FLOATING (object) == TRUE); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("increment refcount"); |
| /* setup */ |
| /* action */ |
| gst_object_ref (object); |
| /* assertions */ |
| ASSERT (object->refcount == 2); |
| ASSERT (GTK_OBJECT_FLOATING (object) == TRUE); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("sink object"); |
| /* setup */ |
| /* action */ |
| gst_object_sink (object); |
| /* assertions */ |
| ASSERT (object->refcount == 1); |
| ASSERT (GTK_OBJECT_FLOATING (object) == FALSE); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("increment refcount after sink"); |
| /* setup */ |
| /* action */ |
| gst_object_ref (object); |
| /* assertions */ |
| ASSERT (object->refcount == 2); |
| ASSERT (GTK_OBJECT_FLOATING (object) == FALSE); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("decrement refcount after sink"); |
| /* setup */ |
| /* action */ |
| gst_object_unref (object); |
| /* assertions */ |
| ASSERT (object->refcount == 1); |
| ASSERT (GTK_OBJECT_FLOATING (object) == FALSE); |
| /* cleanup */ |
| ENDTEST (); |
| |
| /* category cleanup */ |
| g_free (object); |
| |
| |
| |
| /* new category */ |
| TEST_CATEGORY ("Parentage"); |
| /* category setup */ |
| object = gst_object_new (); |
| parent = gst_object_new (); |
| newparent = gst_object_new (); |
| gtkobject = gtk_type_new (gtk_object_get_type ()); |
| /* category assertions */ |
| ASSERT (object != NULL); |
| ASSERT (object->refcount == 1); |
| ASSERT (object->parent == NULL); |
| ASSERT (parent != NULL); |
| ASSERT (newparent != NULL); |
| ASSERT (gtkobject != NULL); |
| ASSERT (!GST_IS_OBJECT (gtkobject)); |
| |
| TEST ("gst_object_set_parent: null object"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent (NULL, NULL); |
| /* assertions */ |
| ASSERT (object->parent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_set_parent: invalid object"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent ((GstObject *) gtkobject, NULL); |
| /* assertions */ |
| ASSERT (object->parent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_set_parent: null parent"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent (object, NULL); |
| /* assertions */ |
| ASSERT (object->parent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_set_parent: invalid parent"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent (object, (GstObject *) gtkobject); |
| /* assertions */ |
| ASSERT (object->parent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_set_parent: valid object, parent is object"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent (object, object); |
| /* assertions */ |
| ASSERT (object->parent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_set_parent: valid object and parent"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent (object, parent); |
| /* assertions */ |
| ASSERT (object->parent == parent); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_set_parent: parent already set"); |
| /* setup */ |
| /* action */ |
| gst_object_set_parent (object, newparent); |
| /* assertions */ |
| ASSERT (object->parent != newparent); |
| ASSERT (object->parent == parent); |
| /* cleanup */ |
| g_free (object); |
| ENDTEST (); |
| |
| |
| TEST ("gst_object_get_parent: null object"); |
| /* setup */ |
| /* action */ |
| curparent = gst_object_get_parent (NULL); |
| /* assertions */ |
| ASSERT (curparent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_get_parent: invalid object"); |
| /* setup */ |
| /* action */ |
| curparent = gst_object_get_parent ((GstObject *) gtkobject); |
| /* assertions */ |
| ASSERT (curparent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_get_parent: no parent"); |
| /* setup */ |
| object = gst_object_new (); |
| /* action */ |
| curparent = gst_object_get_parent (object); |
| /* assertions */ |
| ASSERT (curparent == NULL); |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_get_parent: valid parent"); |
| /* setup */ |
| gst_object_set_parent (object, parent); |
| /* action */ |
| curparent = gst_object_get_parent (object); |
| /* assertions */ |
| ASSERT (curparent == parent); |
| /* cleanup */ |
| g_free (object); |
| ENDTEST (); |
| |
| |
| TEST ("gst_object_unparent: null object"); |
| /* setup */ |
| /* action */ |
| gst_object_unparent (NULL); |
| /* assertions */ |
| /* NONE - FIXME! */ |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_unparent: invalid object"); |
| /* setup */ |
| /* action */ |
| gst_object_unparent ((GstObject *) gtkobject); |
| /* assertions */ |
| /* NONE - FIXME! */ |
| /* cleanup */ |
| ENDTEST (); |
| |
| TEST ("gst_object_unparent: no parent"); |
| /* setup */ |
| object = gst_object_new (); |
| |
| |
| /* category cleanup */ |
| g_free (object); |
| g_free (parent); |
| g_free (newparent); |
| g_free (gtkobject); |
| |
| |
| |
| fprintf (stderr, "\n\nTotal tests:\t%d\n", _total_tests); |
| fprintf (stderr, "Total passed:\t%d\n", _passed_tests); |
| fprintf (stderr, "Total FAILED:\t%d\n", _total_tests - _passed_tests); |
| } |