Subject: GstObject

Areas to test
=============

Creation
Refcounting
Destruction
Flags
Locking
Parentage
Path string


Tests
=====

Creation
--------
Create an object
	Does it return !NULL
	GST_IS_OBJECT() ?

Refcounting
-----------
Create new object
	object->refcount == 1, GTK_OBJECT_FLOATING(object) == TRUE
Increment refcount
	object->refcount == 2
Sink object
	object->refcount == 1, GTK_OBJECT_FLOATING(object) == FALSE
Increment refcount
	object->refcount == 2
Decrement refcount
	object->refcount == 1

Destruction
-----------
???

Flags (start with new object)
-----
Create new object
	Verify that all flags are unset
Set a flag
	Verify it's set
Unset a flag
	Verify it's not set

Locking (start with new object)
-------
Lock an object
	Try to lock, get false

Parentage (start with new object, check refcount == 1)
---------
gst_object_set_parent: (start with new parent object)
	Pass NULL...
	Pass !NULL, but not Object...
	Pass NULL parent...
	Pass !NULL parent, but not Object...
	Pass valid Object, and parent == object
		object->refcount == 1
		GTK_OBJECT_FLOATING(object) == TRUE
		object->parent == NULL
	Pass valid Object
		object->refcount == 1
		GTK_OBJECT_FLOATING(object) == FALSE
		object->parent == parent
		The "parent_set" signal should fire with the object and parent as args
	Pass Object with parent already set
		object->parent should not equal new parent
		object->refcount == 1
gst_object_get_parent:
	Pass NULL...
	Pass !NULL, not Object...
	Pass valid object with no parent
		Get NULL
	Pass valid object with parent
		Get parent pointer
gst_object_unparent:
	Pass NULL, with no parent
		no effect
	Pass !NULL, not Object, NULL parent
		pointer not mangled
	Pass valid object, with no parent
		object->parent == NULL
		object->refcount = 1
	Pass NULL, with valid parent
		no effect
	Pass !NULL, not Object, with valid object as parent
		pointer not mangled
	Pass valid object, with valid parent
		object->parent == NULL
		object->refcount == 0
