#include "collision/CollisionObject.h" #include "unittest/TestSuite.h" #include static void verifyInit(int line, CollisionObject * collisionObject, void * owner, CollisionObject_collisionCallback collisionCallback, CollisionObject_overlapCallback overlapCallback) { TestCase_assert(collisionObject != NULL, "Expected non-NULL but got NULL (line %d)", line); TestCase_assert(collisionObject->vtable->dispose == CollisionObject_dispose, "Expected %p but got %p (line %d)", CollisionObject_dispose, collisionObject->vtable->dispose, line); TestCase_assert(collisionObject->owner == owner, "Expected %p but got %p (line %d)", owner, collisionObject->owner, line); TestCase_assert(collisionObject->collisionCallback == collisionCallback, "Expected %p but got %p (line %d)", collisionCallback, collisionObject->collisionCallback, line); TestCase_assert(collisionObject->overlapCallback == overlapCallback, "Expected %p but got %p (line %d)", overlapCallback, collisionObject->overlapCallback, line); TestCase_assert(collisionObject->ownMask == 0x1, "Expected 0x1 but got 0x%X (line %d)", collisionObject->ownMask, line); TestCase_assert(collisionObject->collidableMask == 0xFFFFFFFF, "Expected 0xFFFFFFFF but got 0x%X (line %d)", collisionObject->collidableMask, line); TestCase_assert(collisionObject->vtable->interpolate == CollisionObject_interpolate, "Expected %p but got %p (line %d)", CollisionObject_interpolate, collisionObject->vtable->interpolate, line); TestCase_assert(collisionObject->vtable->isStationary == CollisionObject_isStationary, "Expected %p but got %p (line %d)", CollisionObject_isStationary, collisionObject->vtable->isStationary, line); TestCase_assert(collisionObject->vtable->getCollisionBounds == CollisionObject_getCollisionBounds, "Expected %p but got %p (line %d)", CollisionObject_getCollisionBounds, collisionObject->vtable->getCollisionBounds, line); } static void testInit() { CollisionObject collisionObject; memset(&collisionObject, 0x00, sizeof(collisionObject)); stemobject_assign_vtable(collisionObject, CollisionObject); CollisionObject_init(&collisionObject, NULL, NULL, NULL); verifyInit(__LINE__, &collisionObject, NULL, NULL, NULL); CollisionObject_dispose(&collisionObject); memset(&collisionObject, 0xFF, sizeof(collisionObject)); stemobject_assign_vtable(collisionObject, CollisionObject); CollisionObject_init(&collisionObject, NULL, NULL, NULL); verifyInit(__LINE__, &collisionObject, NULL, NULL, NULL); CollisionObject_dispose(&collisionObject); memset(&collisionObject, 0x00, sizeof(collisionObject)); stemobject_assign_vtable(collisionObject, CollisionObject); CollisionObject_init(&collisionObject, (void *) 0x1234, (CollisionObject_collisionCallback) 0x2345, (CollisionObject_overlapCallback) 0x6789); verifyInit(__LINE__, &collisionObject, (void *) 0x1234, (CollisionObject_collisionCallback) 0x2345, (CollisionObject_overlapCallback) 0x6789); CollisionObject_dispose(&collisionObject); } static void testIsStationary() { CollisionObject object; stemobject_assign_vtable(object, CollisionObject); CollisionObject_init(&object, NULL, NULL, NULL); bool result = CollisionObject_isStationary(&object); TestCase_assert(!result, "Expected false but got true"); CollisionObject_dispose(&object); } static void testGetCollisionBounds() { CollisionObject object; stemobject_assign_vtable(object, CollisionObject); CollisionObject_init(&object, NULL, NULL, NULL); Box6x bounds = CollisionObject_getCollisionBounds(&object); TestCase_assert(bounds.xMin == 0x00000 && bounds.xMax == 0x10000 && bounds.yMin == 0x00000 && bounds.yMax == 0x10000 && bounds.zMin == 0x00000 && bounds.zMax == 0x10000, "Expected {0x00000, 0x10000, 0x00000, 0x10000, 0x00000, 0x10000} but got {0x%05X, 0x%05X, 0x%05X, 0x%05X, 0x%05X, 0x%05X}", bounds.xMin, bounds.xMax, bounds.yMin, bounds.yMax, bounds.zMin, bounds.zMax); CollisionObject_dispose(&object); } static void testSetMasks() { CollisionObject object; stemobject_assign_vtable(object, CollisionObject); CollisionObject_init(&object, NULL, NULL, NULL); CollisionObject * result = CollisionObject_setMasks(&object, 0x0, 0x0, 0x0); TestCase_assert(result == &object, "Expected %p but got %p", &object, result); TestCase_assert(object.ownMask == 0x0, "Expected 0x0 but got 0x%X", object.ownMask); TestCase_assert(object.collidableMask == 0x0, "Expected 0x0 but got 0x%X", object.collidableMask); TestCase_assert(object.overlapMask == 0x0, "Expected 0x0 but got 0x%X", object.overlapMask); CollisionObject_dispose(&object); CollisionObject_init(&object, NULL, NULL, NULL); result = CollisionObject_setMasks(&object, 0x01234567, 0x89ABCDEF, 0x13579BDF); TestCase_assert(result == &object, "Expected %p but got %p", &object, result); TestCase_assert(object.ownMask == 0x01234567, "Expected 0x01234567 but got 0x%X", object.ownMask); TestCase_assert(object.collidableMask == 0x89ABCDEF, "Expected 0x89ABCDEF but got 0x%X", object.collidableMask); TestCase_assert(object.overlapMask == 0x13579BDF, "Expected 0x13579BDF but got 0x%X", object.overlapMask); CollisionObject_dispose(&object); } TEST_SUITE(CollisionObjectTest, testInit, testIsStationary, testGetCollisionBounds, testSetMasks)