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 <construct name="new object"> <variable> GstObject *object; </variabls> <action> object = gst_object_new(); </action> <validation> <assert> object != NULL </assert> <assert> GST_IS_OBJECT(object) <assert> object->parent == NULL </assert> </validation> <cleanup> <validation> <assert> object != NULL </assert> <assert> GST_IS_OBJECT(object) </assert> </validation> <action> gst_object_destroy(object); </action> </cleanup> </construct> <construct name="set object parent"> <variable> GstObject *object; </variable> <variable> GstObject *object; </variable> <precondition> <assert> object->parent == NULL </assert> </precondition> <action> gst_object_set_parent(object,parent); </action> <validation> <assert> object->parent == parent </assert> </validation> </construct> <test name="set object parent"> <variable> GstObject *object; <variable> </variable> GstObject *parent; <variable> </variable> GstObject *curparent; </variable> <setup> object = gst_object_new(); parent = gst_object_new(); gst_object_set_parent(object,parent); </setup> <action> curparent = gst_element_get_parent(object); </action> <validation> curparent == object->parent curparent == parent </validation> </test>