Construction Validation Testing Construction will generate some state Validation will ensure that everything is kosher Tests use combinations of the above to check things ##### Example: parent = gst_object_get_parent(object); setup: create: new object action: object = gst_object_new(); validation: object != NULL, object->parent == NULL, etc [cleanup: gst_object_destroy(object);] create: new parent action: parent = gst_object_new(); validation: parent != NULL, parent->parent == NULL, etc [cleanup: gst_object_destroy(parent);] create: set object's parent precondition: object->parent == NULL action: gst_object_set_parent(object,parent); validation: object->parent = parent preconditions: nothing action: curparent = gst_element_get_parent(object); validation: curparent == object->parent curparent == parent cleanup: nothing ##### Resulting code: ///// setup // new object object = gst_object_new(); ASSERT(object != NULL); ASSERT(object->parent == NULL); // new object parent = gst_object_new(); ASSERT(parent != NULL); ASSERT(parent->parent == NULL); // set object parent ASSERT(object->parent == NULL); gst_object_set_parent(object,parent); ASSERT(object->parent != NULL); ///// preconditions ///// action curparent = gst_element_get_parent(object); ///// validation ASSERT(object->parent == parent); ///// cleanup gst_object_destroy(parent); gst_object_destroy(object); ##### XML descriptions GstObject *object; object = gst_object_new(); object != NULL GST_IS_OBJECT(object) object->parent == NULL object != NULL GST_IS_OBJECT(object) gst_object_destroy(object); GstObject *object; GstObject *object; object->parent == NULL gst_object_set_parent(object,parent); object->parent == parent GstObject *object; GstObject *parent; GstObject *curparent; object = gst_object_new(); parent = gst_object_new(); gst_object_set_parent(object,parent); curparent = gst_element_get_parent(object); curparent == object->parent curparent == parent