mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-13 20:06:35 +00:00
303 lines
6.4 KiB
C
303 lines
6.4 KiB
C
|
#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);
|
||
|
}
|