test: fix the touch tests to no longer leak
Instead of hardcoded TouchRec/ValuatorRec init the devices with the matching functions and go from there. This allows us to clean them up later, removing the various leaks that stop asan from being happy.
This commit is contained in:
parent
b6931f2f5f
commit
e44e9262df
110
test/touch.c
110
test/touch.c
|
@ -35,27 +35,46 @@
|
|||
|
||||
#include "tests-common.h"
|
||||
|
||||
static void
|
||||
free_device(DeviceIntPtr dev)
|
||||
{
|
||||
free(dev->name);
|
||||
free(dev->last.scroll); /* sigh, allocated but not freed by the valuator functions */
|
||||
for (int i = 0; i < dev->last.num_touches; i++)
|
||||
valuator_mask_free(&dev->last.touches[i].valuators);
|
||||
|
||||
free(dev->last.touches); /* sigh, allocated but not freed by the valuator functions */
|
||||
FreeDeviceClass(XIValuatorClass, (void**)&dev->valuator);
|
||||
FreeDeviceClass(XITouchClass, (void**)&dev->touch);
|
||||
}
|
||||
|
||||
static void
|
||||
touch_grow_queue(void)
|
||||
{
|
||||
DeviceIntRec dev;
|
||||
ValuatorClassRec val;
|
||||
TouchClassRec touch;
|
||||
SpriteInfoRec sprite;
|
||||
size_t size, new_size;
|
||||
int i;
|
||||
ScreenRec screen;
|
||||
Atom labels[2] = { 0 };
|
||||
|
||||
screenInfo.screens[0] = &screen;
|
||||
|
||||
memset(&dev, 0, sizeof(dev));
|
||||
dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */
|
||||
dev.name = xnfstrdup("test device");
|
||||
dev.id = 2;
|
||||
dev.valuator = &val;
|
||||
val.numAxes = 5;
|
||||
dev.touch = &touch;
|
||||
|
||||
InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute);
|
||||
InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2);
|
||||
|
||||
memset(&sprite, 0, sizeof(sprite));
|
||||
dev.spriteInfo = &sprite;
|
||||
|
||||
inputInfo.devices = &dev;
|
||||
|
||||
size = 5;
|
||||
|
||||
dev.last.num_touches = size;
|
||||
dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
|
||||
assert(dev.last.touches);
|
||||
for (i = 0; i < size; i++) {
|
||||
dev.last.touches[i].active = TRUE;
|
||||
|
@ -91,27 +110,33 @@ touch_grow_queue(void)
|
|||
assert(t->ddx_id == 0);
|
||||
}
|
||||
|
||||
free(dev.name);
|
||||
free_device(&dev);
|
||||
}
|
||||
|
||||
static void
|
||||
touch_find_ddxid(void)
|
||||
{
|
||||
DeviceIntRec dev;
|
||||
SpriteInfoRec sprite;
|
||||
DDXTouchPointInfoPtr ti, ti2;
|
||||
ValuatorClassRec val;
|
||||
TouchClassRec touch;
|
||||
int size = 5;
|
||||
int i;
|
||||
Atom labels[2] = { 0 };
|
||||
ScreenRec screen;
|
||||
|
||||
screenInfo.screens[0] = &screen;
|
||||
|
||||
memset(&dev, 0, sizeof(dev));
|
||||
dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */
|
||||
dev.name = xnfstrdup("test device");
|
||||
dev.id = 2;
|
||||
dev.valuator = &val;
|
||||
val.numAxes = 5;
|
||||
dev.touch = &touch;
|
||||
dev.last.num_touches = size;
|
||||
dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
|
||||
|
||||
InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute);
|
||||
InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2);
|
||||
|
||||
memset(&sprite, 0, sizeof(sprite));
|
||||
dev.spriteInfo = &sprite;
|
||||
|
||||
inputInfo.devices = &dev;
|
||||
assert(dev.last.touches);
|
||||
|
||||
|
@ -159,32 +184,35 @@ touch_find_ddxid(void)
|
|||
ti = TouchFindByDDXID(&dev, 40, TRUE);
|
||||
assert(ti == &dev.last.touches[size+1]);
|
||||
|
||||
free(dev.name);
|
||||
free_device(&dev);
|
||||
}
|
||||
|
||||
static void
|
||||
touch_begin_ddxtouch(void)
|
||||
{
|
||||
DeviceIntRec dev;
|
||||
SpriteInfoRec sprite;
|
||||
DDXTouchPointInfoPtr ti;
|
||||
ValuatorClassRec val;
|
||||
TouchClassRec touch;
|
||||
int ddx_id = 123;
|
||||
unsigned int last_client_id = 0;
|
||||
int size = 5;
|
||||
Atom labels[2] = { 0 };
|
||||
ScreenRec screen;
|
||||
|
||||
screenInfo.screens[0] = &screen;
|
||||
|
||||
memset(&dev, 0, sizeof(dev));
|
||||
dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */
|
||||
dev.name = xnfstrdup("test device");
|
||||
dev.id = 2;
|
||||
dev.valuator = &val;
|
||||
val.numAxes = 5;
|
||||
touch.mode = XIDirectTouch;
|
||||
dev.touch = &touch;
|
||||
dev.last.num_touches = size;
|
||||
dev.last.touches = calloc(dev.last.num_touches, sizeof(*dev.last.touches));
|
||||
inputInfo.devices = &dev;
|
||||
assert(dev.last.touches);
|
||||
|
||||
InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute);
|
||||
InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2);
|
||||
|
||||
memset(&sprite, 0, sizeof(sprite));
|
||||
dev.spriteInfo = &sprite;
|
||||
|
||||
assert(dev.last.touches);
|
||||
ti = TouchBeginDDXTouch(&dev, ddx_id);
|
||||
assert(ti);
|
||||
assert(ti->ddx_id == ddx_id);
|
||||
|
@ -206,41 +234,36 @@ touch_begin_ddxtouch(void)
|
|||
assert(!ti->emulate_pointer);
|
||||
last_client_id = ti->client_id;
|
||||
|
||||
free(dev.name);
|
||||
free_device(&dev);
|
||||
}
|
||||
|
||||
static void
|
||||
touch_begin_touch(void)
|
||||
{
|
||||
DeviceIntRec dev;
|
||||
TouchClassRec touch;
|
||||
ValuatorClassRec val;
|
||||
TouchPointInfoPtr ti;
|
||||
int touchid = 12434;
|
||||
int sourceid = 23;
|
||||
SpriteInfoRec sprite;
|
||||
ScreenRec screen;
|
||||
Atom labels[2] = { 0 };
|
||||
|
||||
screenInfo.screens[0] = &screen;
|
||||
|
||||
memset(&dev, 0, sizeof(dev));
|
||||
dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */
|
||||
dev.name = xnfstrdup("test device");
|
||||
dev.id = 2;
|
||||
|
||||
memset(&sprite, 0, sizeof(sprite));
|
||||
dev.spriteInfo = &sprite;
|
||||
|
||||
memset(&touch, 0, sizeof(touch));
|
||||
touch.num_touches = 0;
|
||||
|
||||
memset(&val, 0, sizeof(val));
|
||||
dev.valuator = &val;
|
||||
val.numAxes = 2;
|
||||
|
||||
ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE);
|
||||
assert(!ti);
|
||||
|
||||
dev.touch = &touch;
|
||||
InitValuatorClassDeviceStruct(&dev, 2, labels, 10, Absolute);
|
||||
InitTouchClassDeviceStruct(&dev, 5, XIDirectTouch, 2);
|
||||
|
||||
memset(&sprite, 0, sizeof(sprite));
|
||||
dev.spriteInfo = &sprite;
|
||||
|
||||
ti = TouchBeginTouch(&dev, sourceid, touchid, TRUE);
|
||||
assert(ti);
|
||||
assert(ti->client_id == touchid);
|
||||
|
@ -248,9 +271,9 @@ touch_begin_touch(void)
|
|||
assert(ti->sourceid == sourceid);
|
||||
assert(ti->emulate_pointer);
|
||||
|
||||
assert(touch.num_touches == 1);
|
||||
assert(dev.touch->num_touches == 5);
|
||||
|
||||
free(dev.name);
|
||||
free_device(&dev);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -265,6 +288,7 @@ touch_init(void)
|
|||
screenInfo.screens[0] = &screen;
|
||||
|
||||
memset(&dev, 0, sizeof(dev));
|
||||
dev.type = MASTER_POINTER; /* claim it's a master to stop ptracccel */
|
||||
dev.name = xnfstrdup("test device");
|
||||
|
||||
memset(&sprite, 0, sizeof(sprite));
|
||||
|
@ -279,7 +303,7 @@ touch_init(void)
|
|||
assert(rc == TRUE);
|
||||
assert(dev.touch);
|
||||
|
||||
free(dev.name);
|
||||
free_device(&dev);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in New Issue