xserver: Branch 'master' - 5 commits
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jan 30 00:24:52 UTC 2024
test/fixes.c | 14 ++--
test/hashtabletest.c | 74 +++++++++++++------------
test/input.c | 69 ++++++++++++-----------
test/list.c | 28 +++++----
test/misc.c | 14 +++-
test/signal-logging.c | 79 ++++++++++++++------------
test/string.c | 9 ++-
test/test_xkb.c | 14 ++--
test/tests-common.c | 37 +++++++-----
test/tests-common.h | 3 -
test/tests.c | 2
test/tests.h | 77 +++++++++++++++-----------
test/touch.c | 20 +++---
test/xfree86.c | 12 ++--
test/xi1/protocol-xchangedevicecontrol.c | 28 +++++----
test/xi2/protocol-common.c | 44 +++++++++-----
test/xi2/protocol-common.h | 23 -------
test/xi2/protocol-eventconvert.c | 22 ++++---
test/xi2/protocol-xigetclientpointer.c | 33 ++++++-----
test/xi2/protocol-xigetselectedevents.c | 51 +++++++++--------
test/xi2/protocol-xipassivegrabdevice.c | 61 ++++++++++----------
test/xi2/protocol-xiquerydevice.c | 72 +++++++++++-------------
test/xi2/protocol-xiquerypointer.c | 29 +++++----
test/xi2/protocol-xiqueryversion.c | 58 +++++++++----------
test/xi2/protocol-xiselectevents.c | 45 ++++++++-------
test/xi2/protocol-xisetclientpointer.c | 25 ++++----
test/xi2/protocol-xiwarppointer.c | 16 +++--
test/xi2/xi2.c | 8 ++
test/xtest.c | 91 ++++++++++++++++++-------------
29 files changed, 573 insertions(+), 485 deletions(-)
New commits:
commit 9c7c470b12563fb99c722d42d706b0391818880b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Jan 5 15:48:06 2024 +1000
test: use a dbg() macro for the test output
Currently hardcoded to verbose = 0 until we have option parsing but meh.
diff --git a/test/hashtabletest.c b/test/hashtabletest.c
index f748183e6..59c39b464 100644
--- a/test/hashtabletest.c
+++ b/test/hashtabletest.c
@@ -14,14 +14,14 @@ static void
print_xid(void* ptr, void* v)
{
XID *x = v;
- printf("%ld", (long)(*x));
+ dbg("%ld", (long)(*x));
}
static void
print_int(void* ptr, void* v)
{
int *x = v;
- printf("%d", *x);
+ dbg("%d", *x);
}
static void
@@ -32,7 +32,7 @@ test1(void)
int ok = 1;
const int numKeys = 420;
- printf("test1\n");
+ dbg("test1\n");
h = ht_create(sizeof(XID), sizeof(int), ht_resourceid_hash, ht_resourceid_compare, NULL);
for (c = 0; c < numKeys; ++c) {
@@ -44,9 +44,11 @@ test1(void)
}
}
- printf("Distribution after insertion\n");
- ht_dump_distribution(h);
- ht_dump_contents(h, print_xid, print_int, NULL);
+ if (verbose) {
+ dbg("Distribution after insertion\n");
+ ht_dump_distribution(h);
+ ht_dump_contents(h, print_xid, print_int, NULL);
+ }
for (c = 0; c < numKeys; ++c) {
XID id = c;
@@ -55,26 +57,28 @@ test1(void)
if (*v == 2 * c) {
// ok
} else {
- printf("Key %d doesn't have expected value %d but has %d instead\n",
+ dbg("Key %d doesn't have expected value %d but has %d instead\n",
c, 2 * c, *v);
ok = 0;
}
} else {
ok = 0;
- printf("Cannot find key %d\n", c);
+ dbg("Cannot find key %d\n", c);
}
}
if (ok) {
- printf("%d keys inserted and found\n", c);
+ dbg("%d keys inserted and found\n", c);
for (c = 0; c < numKeys; ++c) {
XID id = c;
ht_remove(h, &id);
}
- printf("Distribution after deletion\n");
- ht_dump_distribution(h);
+ if (verbose) {
+ dbg("Distribution after deletion\n");
+ ht_dump_distribution(h);
+ }
}
ht_destroy(h);
@@ -90,7 +94,7 @@ test2(void)
int ok = 1;
const int numKeys = 420;
- printf("test2\n");
+ dbg("test2\n");
h = ht_create(sizeof(XID), 0, ht_resourceid_hash, ht_resourceid_compare, NULL);
for (c = 0; c < numKeys; ++c) {
@@ -102,7 +106,7 @@ test2(void)
XID id = c;
if (!ht_find(h, &id)) {
ok = 0;
- printf("Cannot find key %d\n", c);
+ dbg("Cannot find key %d\n", c);
}
}
@@ -110,16 +114,16 @@ test2(void)
XID id = c + 1;
if (ht_find(h, &id)) {
ok = 0;
- printf("Could find a key that shouldn't be there\n");
+ dbg("Could find a key that shouldn't be there\n");
}
}
ht_destroy(h);
if (ok) {
- printf("Test with empty keys OK\n");
+ dbg("Test with empty keys OK\n");
} else {
- printf("Test with empty keys FAILED\n");
+ dbg("Test with empty keys FAILED\n");
}
assert(ok);
@@ -133,22 +137,24 @@ test3(void)
.keySize = 4
};
HashTable h;
- printf("test3\n");
+ dbg("test3\n");
h = ht_create(4, 0, ht_generic_hash, ht_generic_compare, &hashSetup);
if (!ht_add(h, "helo") ||
!ht_add(h, "wrld")) {
- printf("Could not insert keys\n");
+ dbg("Could not insert keys\n");
}
if (!ht_find(h, "helo") ||
!ht_find(h, "wrld")) {
ok = 0;
- printf("Could not find inserted keys\n");
+ dbg("Could not find inserted keys\n");
}
- printf("Hash distribution with two strings\n");
- ht_dump_distribution(h);
+ if (verbose) {
+ dbg("Hash distribution with two strings\n");
+ ht_dump_distribution(h);
+ }
ht_destroy(h);
diff --git a/test/input.c b/test/input.c
index c7d7cffdb..5ca8a97cd 100644
--- a/test/input.c
+++ b/test/input.c
@@ -997,7 +997,7 @@ test_padding_for_int32(int i)
static void
include_byte_padding_macros(void)
{
- printf("Testing bits_to_bytes()\n");
+ dbg("Testing bits_to_bytes()\n");
/* the macros don't provide overflow protection */
test_bits_to_byte(0);
@@ -1010,7 +1010,7 @@ include_byte_padding_macros(void)
test_bits_to_byte(INT_MAX - 9);
test_bits_to_byte(INT_MAX - 8);
- printf("Testing bytes_to_int32()\n");
+ dbg("Testing bytes_to_int32()\n");
test_bytes_to_int32(0);
test_bytes_to_int32(1);
@@ -1026,7 +1026,7 @@ include_byte_padding_macros(void)
test_bytes_to_int32(INT_MAX - 4);
test_bytes_to_int32(INT_MAX - 3);
- printf("Testing pad_to_int32()\n");
+ dbg("Testing pad_to_int32()\n");
test_pad_to_int32(0);
test_pad_to_int32(1);
@@ -1043,7 +1043,7 @@ include_byte_padding_macros(void)
test_pad_to_int32(INT_MAX - 4);
test_pad_to_int32(INT_MAX - 3);
- printf("Testing padding_for_int32()\n");
+ dbg("Testing padding_for_int32()\n");
test_padding_for_int32(0);
test_padding_for_int32(1);
@@ -1076,7 +1076,7 @@ xi_unregister_handlers(void)
handler = XIRegisterPropertyHandler(&dev, NULL, NULL, NULL);
assert(handler == 3);
- printf("Unlinking from front.\n");
+ dbg("Unlinking from front.\n");
XIUnregisterPropertyHandler(&dev, 4); /* NOOP */
assert(dev.properties.handlers->id == 3);
@@ -1565,7 +1565,7 @@ input_option_test(void)
InputOption *opt;
const char *val;
- printf("Testing input_option list interface\n");
+ dbg("Testing input_option list interface\n");
list = input_option_new(list, "key", "value");
assert(list);
@@ -1654,7 +1654,7 @@ _test_double_fp16_values(double orig_d)
double final_d;
if (orig_d > 0x7FFF) {
- printf("Test out of range\n");
+ dbg("Test out of range\n");
assert(0);
}
@@ -1668,7 +1668,7 @@ _test_double_fp16_values(double orig_d)
* snprintf(first_fp16_s, sizeof(first_fp16_s), "%d + %u * 2^-16", (first_fp16 & 0xffff0000) >> 16, first_fp16 & 0xffff);
* snprintf(final_fp16_s, sizeof(final_fp16_s), "%d + %u * 2^-16", (final_fp16 & 0xffff0000) >> 16, final_fp16 & 0xffff);
*
- * printf("FP16: original double: %f first fp16: %s, re-encoded double: %f, final fp16: %s\n", orig_d, first_fp16_s, final_d, final_fp16_s);
+ * dbg("FP16: original double: %f first fp16: %s, re-encoded double: %f, final fp16: %s\n", orig_d, first_fp16_s, final_d, final_fp16_s);
* }
*/
@@ -1689,7 +1689,7 @@ _test_double_fp32_values(double orig_d)
double final_d;
if (orig_d > 0x7FFFFFFF) {
- printf("Test out of range\n");
+ dbg("Test out of range\n");
assert(0);
}
@@ -1703,7 +1703,7 @@ _test_double_fp32_values(double orig_d)
* snprintf(first_fp32_s, sizeof(first_fp32_s), "%d + %u * 2^-32", first_fp32.integral, first_fp32.frac);
* snprintf(final_fp32_s, sizeof(final_fp32_s), "%d + %u * 2^-32", first_fp32.integral, final_fp32.frac);
*
- * printf("FP32: original double: %f first fp32: %s, re-encoded double: %f, final fp32: %s\n", orig_d, first_fp32_s, final_d, final_fp32_s);
+ * dbg("FP32: original double: %f first fp32: %s, re-encoded double: %f, final fp32: %s\n", orig_d, first_fp32_s, final_d, final_fp32_s);
* }
*/
@@ -1722,7 +1722,7 @@ dix_double_fp_conversion(void)
{
uint32_t i;
- printf("Testing double to FP1616/FP3232 conversions\n");
+ dbg("Testing double to FP1616/FP3232 conversions\n");
_test_double_fp16_values(0);
for (i = 1; i < 0x7FFF; i <<= 1) {
diff --git a/test/tests.c b/test/tests.c
index 97603822a..4ef0036a3 100644
--- a/test/tests.c
+++ b/test/tests.c
@@ -2,6 +2,8 @@
#include "tests.h"
#include "tests-common.h"
+int verbose = 0;
+
int
main(int argc, char **argv)
{
diff --git a/test/tests.h b/test/tests.h
index c41fa1184..d04d6ea63 100644
--- a/test/tests.h
+++ b/test/tests.h
@@ -1,6 +1,9 @@
#ifndef TESTS_H
#define TESTS_H
+extern int verbose;
+#define dbg(...) if (verbose) printf("DBG" __VA_ARGS__);
+
#define DECLARE_WRAP_FUNCTION(f_, rval_, ...) \
extern rval_ (*wrapped_ ## f_)(__VA_ARGS__) \
diff --git a/test/xi1/protocol-xchangedevicecontrol.c b/test/xi1/protocol-xchangedevicecontrol.c
index 20b125d35..4c1a1740a 100644
--- a/test/xi1/protocol-xchangedevicecontrol.c
+++ b/test/xi1/protocol-xchangedevicecontrol.c
@@ -98,18 +98,18 @@ test_ChangeDeviceControl(void)
client_request = init_client(request->length, request);
- printf("Testing invalid lengths:\n");
- printf(" -- no control struct\n");
+ dbg("Testing invalid lengths:\n");
+ dbg(" -- no control struct\n");
request_ChangeDeviceControl(&client_request, request, control, BadLength);
- printf(" -- xDeviceResolutionCtl\n");
+ dbg(" -- xDeviceResolutionCtl\n");
request_init(request, ChangeDeviceControl);
request->control = DEVICE_RESOLUTION;
control->length = (sizeof(xDeviceResolutionCtl) >> 2);
request->length += control->length - 2;
request_ChangeDeviceControl(&client_request, request, control, BadLength);
- printf(" -- xDeviceEnableCtl\n");
+ dbg(" -- xDeviceEnableCtl\n");
request_init(request, ChangeDeviceControl);
request->control = DEVICE_ENABLE;
control->length = (sizeof(xDeviceEnableCtl) >> 2);
diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index 5b4c34ac0..ed16b9498 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -742,7 +742,7 @@ test_values_XIDeviceChangedEvent(DeviceChangedEvent *in,
flags & SCROLL_FLAG_PREFERRED);
}
default:
- printf("Invalid class type.\n\n");
+ dbg("Invalid class type.\n\n");
assert(1);
break;
}
diff --git a/test/xi2/protocol-xigetclientpointer.c b/test/xi2/protocol-xigetclientpointer.c
index e7c4ca4c3..0a916fef0 100644
--- a/test/xi2/protocol-xigetclientpointer.c
+++ b/test/xi2/protocol-xigetclientpointer.c
@@ -113,26 +113,26 @@ test_XIGetClientPointer(void)
client_request = init_client(request.length, &request);
- printf("Testing invalid window\n");
+ dbg("Testing invalid window\n");
request.win = INVALID_WINDOW_ID;
request_XIGetClientPointer(&client_request, &request, BadWindow);
- printf("Testing invalid length\n");
+ dbg("Testing invalid length\n");
client_request.req_len -= 4;
request_XIGetClientPointer(&client_request, &request, BadLength);
client_request.req_len += 4;
test_data.cp_is_set = FALSE;
- printf("Testing window None, unset ClientPointer.\n");
+ dbg("Testing window None, unset ClientPointer.\n");
request.win = None;
request_XIGetClientPointer(&client_request, &request, Success);
- printf("Testing valid window, unset ClientPointer.\n");
+ dbg("Testing valid window, unset ClientPointer.\n");
request.win = CLIENT_WINDOW_ID;
request_XIGetClientPointer(&client_request, &request, Success);
- printf("Testing valid window, set ClientPointer.\n");
+ dbg("Testing valid window, set ClientPointer.\n");
client_window.clientPtr = devices.vcp;
test_data.dev = devices.vcp;
test_data.cp_is_set = TRUE;
@@ -141,7 +141,7 @@ test_XIGetClientPointer(void)
client_window.clientPtr = NULL;
- printf("Testing window None, set ClientPointer.\n");
+ dbg("Testing window None, set ClientPointer.\n");
client_request.clientPtr = devices.vcp;
test_data.dev = devices.vcp;
test_data.cp_is_set = TRUE;
diff --git a/test/xi2/protocol-xigetselectedevents.c b/test/xi2/protocol-xigetselectedevents.c
index 9471ca545..6b2f1f666 100644
--- a/test/xi2/protocol-xigetselectedevents.c
+++ b/test/xi2/protocol-xigetselectedevents.c
@@ -156,11 +156,11 @@ test_XIGetSelectedEvents(void)
request_init(&request, XIGetSelectedEvents);
- printf("Testing for BadWindow on invalid window.\n");
+ dbg("Testing for BadWindow on invalid window.\n");
request.win = None;
request_XIGetSelectedEvents(&request, BadWindow);
- printf("Testing for zero-length (unset) masks.\n");
+ dbg("Testing for zero-length (unset) masks.\n");
/* No masks set yet */
test_data.num_masks_expected = 0;
request.win = ROOT_WINDOW_ID;
@@ -171,7 +171,7 @@ test_XIGetSelectedEvents(void)
memset(test_data.mask, 0, sizeof(test_data.mask));
- printf("Testing for valid masks\n");
+ dbg("Testing for valid masks\n");
memset(&dev, 0, sizeof(dev)); /* dev->id is enough for XISetEventMask */
request.win = ROOT_WINDOW_ID;
@@ -197,7 +197,7 @@ test_XIGetSelectedEvents(void)
}
}
- printf("Testing removing all masks\n");
+ dbg("Testing removing all masks\n");
/* Unset all masks one-by-one */
for (j = MAXDEVICES - 1; j >= 0; j--) {
if (j < devices.num_devices + 2)
diff --git a/test/xi2/protocol-xipassivegrabdevice.c b/test/xi2/protocol-xipassivegrabdevice.c
index c7b5dc17d..b6ba65447 100644
--- a/test/xi2/protocol-xipassivegrabdevice.c
+++ b/test/xi2/protocol-xipassivegrabdevice.c
@@ -182,12 +182,12 @@ test_XIPassiveGrabDevice(void)
wrapped_WriteToClient = reply_XIPassiveGrabDevice;
client_request = init_client(request->length, request);
- printf("Testing invalid device\n");
+ dbg("Testing invalid device\n");
request->deviceid = 12;
request_XIPassiveGrabDevice(&client_request, request, BadDevice,
request->deviceid);
- printf("Testing invalid length\n");
+ dbg("Testing invalid length\n");
request->length -= 2;
request_XIPassiveGrabDevice(&client_request, request, BadLength,
client_request.errorValue);
@@ -196,14 +196,14 @@ test_XIPassiveGrabDevice(void)
request->grab_window = CLIENT_WINDOW_ID;
request->deviceid = XIAllMasterDevices;
- printf("Testing invalid grab types\n");
+ dbg("Testing invalid grab types\n");
for (i = XIGrabtypeGestureSwipeBegin + 1; i < 0xFF; i++) {
request->grab_type = i;
request_XIPassiveGrabDevice(&client_request, request, BadValue,
request->grab_type);
}
- printf("Testing invalid grab type + detail combinations\n");
+ dbg("Testing invalid grab type + detail combinations\n");
request->grab_type = XIGrabtypeEnter;
request->detail = 1;
request_XIPassiveGrabDevice(&client_request, request, BadValue,
@@ -215,7 +215,7 @@ test_XIPassiveGrabDevice(void)
request->detail = 0;
- printf("Testing invalid masks\n");
+ dbg("Testing invalid masks\n");
mask = (unsigned char *) &request[1];
request->mask_len = bytes_to_int32(XI2LASTEVENT + 1);
diff --git a/test/xi2/protocol-xiquerydevice.c b/test/xi2/protocol-xiquerydevice.c
index e32e713c0..72b30052e 100644
--- a/test/xi2/protocol-xiquerydevice.c
+++ b/test/xi2/protocol-xiquerydevice.c
@@ -319,16 +319,16 @@ test_XIQueryDevice(void)
wrapped_WriteToClient = reply_XIQueryDevice;
request_init(&request, XIQueryDevice);
- printf("Testing XIAllDevices.\n");
+ dbg("Testing XIAllDevices.\n");
request_XIQueryDevice(&test_data, XIAllDevices, Success);
- printf("Testing XIAllMasterDevices.\n");
+ dbg("Testing XIAllMasterDevices.\n");
request_XIQueryDevice(&test_data, XIAllMasterDevices, Success);
- printf("Testing existing device ids.\n");
+ dbg("Testing existing device ids.\n");
for (i = 2; i < 6; i++)
request_XIQueryDevice(&test_data, i, Success);
- printf("Testing non-existing device ids.\n");
+ dbg("Testing non-existing device ids.\n");
for (i = 6; i <= 0xFFFF; i++)
request_XIQueryDevice(&test_data, i, BadDevice);
}
diff --git a/test/xi2/protocol-xiqueryversion.c b/test/xi2/protocol-xiqueryversion.c
index cd1865fdb..528a02c5a 100644
--- a/test/xi2/protocol-xiqueryversion.c
+++ b/test/xi2/protocol-xiqueryversion.c
@@ -154,23 +154,23 @@ test_XIQueryVersion(void)
wrapped_WriteToClient = reply_XIQueryVersion;
- printf("Server version 2.0 - client versions [1..3].0\n");
+ dbg("Server version 2.0 - client versions [1..3].0\n");
/* some simple tests to catch common errors quickly */
request_XIQueryVersion(2, 0, 1, 0, BadValue);
request_XIQueryVersion(2, 0, 2, 0, Success);
request_XIQueryVersion(2, 0, 3, 0, Success);
- printf("Server version 3.0 - client versions [1..3].0\n");
+ dbg("Server version 3.0 - client versions [1..3].0\n");
request_XIQueryVersion(3, 0, 1, 0, BadValue);
request_XIQueryVersion(3, 0, 2, 0, Success);
request_XIQueryVersion(3, 0, 3, 0, Success);
- printf("Server version 2.0 - client versions [1..3].[1..3]\n");
+ dbg("Server version 2.0 - client versions [1..3].[1..3]\n");
request_XIQueryVersion(2, 0, 1, 1, BadValue);
request_XIQueryVersion(2, 0, 2, 2, Success);
request_XIQueryVersion(2, 0, 3, 3, Success);
- printf("Server version 2.2 - client versions [1..3].0\n");
+ dbg("Server version 2.2 - client versions [1..3].0\n");
request_XIQueryVersion(2, 2, 1, 0, BadValue);
request_XIQueryVersion(2, 2, 2, 0, Success);
request_XIQueryVersion(2, 2, 3, 0, Success);
@@ -179,7 +179,7 @@ test_XIQueryVersion(void)
/* this one takes a while */
unsigned int cmin, cmaj, smin, smaj;
- printf("Testing all combinations.\n");
+ dbg("Testing all combinations.\n");
for (smaj = 2; smaj <= 0xFFFF; smaj++)
for (smin = 0; smin <= 0xFFFF; smin++)
for (cmin = 0; cmin <= 0xFFFF; cmin++)
diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index 5dd4f9c36..9389bd27e 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -294,7 +294,7 @@ test_XISelectEvents(void)
request_init(req, XISelectEvents);
- printf("Testing for BadValue on zero-length masks\n");
+ dbg("Testing for BadValue on zero-length masks\n");
/* zero masks are BadValue, regardless of the window */
req->num_masks = 0;
@@ -307,7 +307,7 @@ test_XISelectEvents(void)
req->win = CLIENT_WINDOW_ID;
request_XISelectEvent(req, BadValue);
- printf("Testing for BadWindow.\n");
+ dbg("Testing for BadWindow.\n");
/* None window is BadWindow, regardless of the masks.
* We don't actually need to set the masks here, BadWindow must occur
* before checking the masks.
@@ -327,7 +327,7 @@ test_XISelectEvents(void)
req->num_masks = 0xFFFC;
request_XISelectEvent(req, BadWindow);
- printf("Triggering num_masks/length overflow\n");
+ dbg("Triggering num_masks/length overflow\n");
req->win = ROOT_WINDOW_ID;
/* Integer overflow - req->length can't hold that much */
req->num_masks = 0xFFFF;
@@ -336,14 +336,14 @@ test_XISelectEvents(void)
req->win = ROOT_WINDOW_ID;
req->num_masks = 1;
- printf("Triggering bogus mask length error\n");
+ dbg("Triggering bogus mask length error\n");
mask = (xXIEventMask *) &req[1];
mask->deviceid = 0;
mask->mask_len = 0xFFFF;
request_XISelectEvent(req, BadLength);
/* testing various device ids */
- printf("Testing existing device ids.\n");
+ dbg("Testing existing device ids.\n");
for (i = 0; i < 6; i++) {
mask = (xXIEventMask *) &req[1];
mask->deviceid = i;
@@ -353,7 +353,7 @@ test_XISelectEvents(void)
request_XISelectEvent(req, Success);
}
- printf("Testing non-existing device ids.\n");
+ dbg("Testing non-existing device ids.\n");
for (i = 6; i <= 0xFFFF; i++) {
req->win = ROOT_WINDOW_ID;
req->num_masks = 1;
diff --git a/test/xi2/protocol-xisetclientpointer.c b/test/xi2/protocol-xisetclientpointer.c
index f6ddb72b5..881fcf3f1 100644
--- a/test/xi2/protocol-xisetclientpointer.c
+++ b/test/xi2/protocol-xisetclientpointer.c
@@ -92,14 +92,14 @@ test_XISetClientPointer(void)
request.win = CLIENT_WINDOW_ID;
- printf("Testing BadDevice error for XIAllDevices and XIMasterDevices.\n");
+ dbg("Testing BadDevice error for XIAllDevices and XIMasterDevices.\n");
request.deviceid = XIAllDevices;
request_XISetClientPointer(&request, BadDevice);
request.deviceid = XIAllMasterDevices;
request_XISetClientPointer(&request, BadDevice);
- printf("Testing Success for VCP and VCK.\n");
+ dbg("Testing Success for VCP and VCK.\n");
request.deviceid = devices.vcp->id; /* 2 */
request_XISetClientPointer(&request, Success);
assert(client_window.clientPtr->id == 2);
@@ -108,19 +108,19 @@ test_XISetClientPointer(void)
request_XISetClientPointer(&request, Success);
assert(client_window.clientPtr->id == 2);
- printf("Testing BadDevice error for all other devices.\n");
+ dbg("Testing BadDevice error for all other devices.\n");
for (i = 4; i <= 0xFFFF; i++) {
request.deviceid = i;
request_XISetClientPointer(&request, BadDevice);
}
- printf("Testing window None\n");
+ dbg("Testing window None\n");
request.win = None;
request.deviceid = devices.vcp->id; /* 2 */
request_XISetClientPointer(&request, Success);
assert(client_request.clientPtr->id == 2);
- printf("Testing invalid window\n");
+ dbg("Testing invalid window\n");
request.win = INVALID_WINDOW_ID;
request.deviceid = devices.vcp->id;
request_XISetClientPointer(&request, BadWindow);
commit d178978ce2e14c1a4394ff560af70afcfd8fee6a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Jan 5 15:48:40 2024 +1000
test: specify non-negative log verbosity for the siglogging test
Less noise in the test output
diff --git a/test/signal-logging.c b/test/signal-logging.c
index 1eaf96867..80d7c6f60 100644
--- a/test/signal-logging.c
+++ b/test/signal-logging.c
@@ -148,6 +148,8 @@ number_formatting(void)
-0x7FFFFFFFFFFFFFFF, /* Maximum 64-bit signed number */
} ;
+ LogSetParameter(XLOG_VERBOSITY, -1);
+
for (i = 0; i < ARRAY_SIZE(unsigned_tests); i++)
assert(check_number_format_test(unsigned_tests[i]));
@@ -178,6 +180,8 @@ static void logging_format(void)
uintptr_t ptr;
char *fname = NULL;
+ LogSetParameter(XLOG_VERBOSITY, -1);
+
/* set up buf to contain ".....end" */
memset(buf, '.', sizeof(buf));
strcpy(&buf[sizeof(buf) - 4], "end");
@@ -197,59 +201,59 @@ static void logging_format(void)
} while (0)
/* boring test message */
- LogMessageVerbSigSafe(X_ERROR, -1, "test message\n");
+ LogMessageVerbSigSafe(X_ERROR, 1, "test message\n");
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) test message\n") == 0);
/* long buf is truncated to "....en\n" */
- LogMessageVerbSigSafe(X_ERROR, -1, buf);
+ LogMessageVerbSigSafe(X_ERROR, 1, buf);
read_log_msg(logmsg);
assert(strcmp(&logmsg[strlen(logmsg) - 3], "en\n") == 0);
/* same thing, this time as string substitution */
- LogMessageVerbSigSafe(X_ERROR, -1, "%s", buf);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%s", buf);
read_log_msg(logmsg);
assert(strcmp(&logmsg[strlen(logmsg) - 3], "en\n") == 0);
/* strings containing placeholders should just work */
- LogMessageVerbSigSafe(X_ERROR, -1, "%s\n", str);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%s\n", str);
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) %s %d %u %% %p %i\n") == 0);
/* literal % */
- LogMessageVerbSigSafe(X_ERROR, -1, "test %%\n");
+ LogMessageVerbSigSafe(X_ERROR, 1, "test %%\n");
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) test %\n") == 0);
/* character */
- LogMessageVerbSigSafe(X_ERROR, -1, "test %c\n", 'a');
+ LogMessageVerbSigSafe(X_ERROR, 1, "test %c\n", 'a');
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) test a\n") == 0);
/* something unsupported % */
- LogMessageVerbSigSafe(X_ERROR, -1, "test %Q\n");
+ LogMessageVerbSigSafe(X_ERROR, 1, "test %Q\n");
read_log_msg(logmsg);
assert(strstr(logmsg, "BUG") != NULL);
- LogMessageVerbSigSafe(X_ERROR, -1, "\n");
+ LogMessageVerbSigSafe(X_ERROR, 1, "\n");
fseek(f, 0, SEEK_END);
/* string substitution */
- LogMessageVerbSigSafe(X_ERROR, -1, "%s\n", "substituted string");
+ LogMessageVerbSigSafe(X_ERROR, 1, "%s\n", "substituted string");
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) substituted string\n") == 0);
/* Invalid format */
- LogMessageVerbSigSafe(X_ERROR, -1, "%4", 4);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%4", 4);
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) ") == 0);
- LogMessageVerbSigSafe(X_ERROR, -1, "\n");
+ LogMessageVerbSigSafe(X_ERROR, 1, "\n");
fseek(f, 0, SEEK_END);
/* %hld is bogus */
- LogMessageVerbSigSafe(X_ERROR, -1, "%hld\n", 4);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%hld\n", 4);
read_log_msg(logmsg);
assert(strstr(logmsg, "BUG") != NULL);
- LogMessageVerbSigSafe(X_ERROR, -1, "\n");
+ LogMessageVerbSigSafe(X_ERROR, 1, "\n");
fseek(f, 0, SEEK_END);
/* number substitution */
@@ -257,12 +261,12 @@ static void logging_format(void)
do {
char expected[30];
sprintf(expected, "(EE) %u\n", ui);
- LogMessageVerbSigSafe(X_ERROR, -1, "%u\n", ui);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%u\n", ui);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %x\n", ui);
- LogMessageVerbSigSafe(X_ERROR, -1, "%x\n", ui);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%x\n", ui);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
@@ -276,22 +280,21 @@ static void logging_format(void)
do {
char expected[30];
sprintf(expected, "(EE) %lu\n", lui);
- LogMessageVerbSigSafe(X_ERROR, -1, "%lu\n", lui);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%lu\n", lui);
read_log_msg(logmsg);
sprintf(expected, "(EE) %lld\n", (unsigned long long)ui);
- LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (unsigned long long)ui);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%lld\n", (unsigned long long)ui);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %lx\n", lui);
- printf("%s\n", expected);
- LogMessageVerbSigSafe(X_ERROR, -1, "%lx\n", lui);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%lx\n", lui);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %llx\n", (unsigned long long)ui);
- LogMessageVerbSigSafe(X_ERROR, -1, "%llx\n", (unsigned long long)ui);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%llx\n", (unsigned long long)ui);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
@@ -306,12 +309,12 @@ static void logging_format(void)
do {
char expected[30];
sprintf(expected, "(EE) %d\n", i);
- LogMessageVerbSigSafe(X_ERROR, -1, "%d\n", i);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%d\n", i);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %d\n", i | INT_MIN);
- LogMessageVerbSigSafe(X_ERROR, -1, "%d\n", i | INT_MIN);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%d\n", i | INT_MIN);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
@@ -325,22 +328,22 @@ static void logging_format(void)
do {
char expected[30];
sprintf(expected, "(EE) %ld\n", li);
- LogMessageVerbSigSafe(X_ERROR, -1, "%ld\n", li);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%ld\n", li);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %ld\n", li | LONG_MIN);
- LogMessageVerbSigSafe(X_ERROR, -1, "%ld\n", li | LONG_MIN);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%ld\n", li | LONG_MIN);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %lld\n", (long long)li);
- LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (long long)li);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%lld\n", (long long)li);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
sprintf(expected, "(EE) %lld\n", (long long)(li | LONG_MIN));
- LogMessageVerbSigSafe(X_ERROR, -1, "%lld\n", (long long)(li | LONG_MIN));
+ LogMessageVerbSigSafe(X_ERROR, 1, "%lld\n", (long long)(li | LONG_MIN));
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
@@ -353,7 +356,7 @@ static void logging_format(void)
/* pointer substitution */
/* we print a null-pointer differently to printf */
- LogMessageVerbSigSafe(X_ERROR, -1, "%p\n", NULL);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%p\n", NULL);
read_log_msg(logmsg);
assert(strcmp(logmsg, "(EE) 0x0\n") == 0);
@@ -365,7 +368,7 @@ static void logging_format(void)
#else
sprintf(expected, "(EE) %p\n", (void*)ptr);
#endif
- LogMessageVerbSigSafe(X_ERROR, -1, "%p\n", (void*)ptr);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%p\n", (void*)ptr);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
ptr <<= 1;
@@ -376,20 +379,20 @@ static void logging_format(void)
double d = float_tests[i];
char expected[30];
sprintf(expected, "(EE) %.2f\n", d);
- LogMessageVerbSigSafe(X_ERROR, -1, "%f\n", d);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%f\n", d);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
/* test for length modifiers, we just ignore them atm */
- LogMessageVerbSigSafe(X_ERROR, -1, "%.3f\n", d);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%.3f\n", d);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
- LogMessageVerbSigSafe(X_ERROR, -1, "%3f\n", d);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%3f\n", d);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
- LogMessageVerbSigSafe(X_ERROR, -1, "%.0f\n", d);
+ LogMessageVerbSigSafe(X_ERROR, 1, "%.0f\n", d);
read_log_msg(logmsg);
assert(strcmp(logmsg, expected) == 0);
}
commit 3c5eaedaf90199172181ed42451b349a4c3f80f9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Jan 5 14:35:01 2024 +1000
test: switch the remaining wrapped functions to use the macros
dixLookupWindow and dixLookupClient have a test-global default
implementation because overriding that in ever test doesn't make sense.
diff --git a/test/tests.h b/test/tests.h
index d3fbb9c42..c41fa1184 100644
--- a/test/tests.h
+++ b/test/tests.h
@@ -44,12 +44,5 @@ const testfunc_t* protocol_xiwarppointer_test(void);
const testfunc_t* protocol_eventconvert_test(void);
const testfunc_t* xi2_test(void);
-#ifndef INSIDE_PROTOCOL_COMMON
-
-extern int enable_XISetEventMask_wrap;
-extern int enable_GrabButton_wrap;
-
-#endif /* INSIDE_PROTOCOL_COMMON */
-
#endif /* TESTS_H */
diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index 602b62b4b..219a6fd05 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -37,7 +37,6 @@
#include "syncsrv.h"
#include <X11/extensions/XI2.h>
-#define INSIDE_PROTOCOL_COMMON
#include "protocol-common.h"
struct devices devices;
@@ -46,13 +45,6 @@ WindowRec root;
WindowRec window;
static ClientRec server_client;
-void *global_userdata;
-
-void (*reply_handler) (ClientPtr client, int len, char *data, void *userdata);
-
-int enable_GrabButton_wrap = 1;
-int enable_XISetEventMask_wrap = 1;
-
static void
fake_init_sprite(DeviceIntPtr dev)
{
@@ -292,13 +284,35 @@ WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data)
IMPLEMENT_WRAP_FUNCTION(WriteToClient, client, len, data);
}
+WRAP_FUNCTION(XISetEventMask, int,
+ DeviceIntPtr dev, WindowPtr win, ClientPtr client,
+ int len, unsigned char *mask)
+{
+ IMPLEMENT_WRAP_FUNCTION_WITH_RETURN(XISetEventMask, dev, win, client, len, mask);
+}
+
+WRAP_FUNCTION(AddResource, Bool, XID id, RESTYPE type, void *value)
+{
+ IMPLEMENT_WRAP_FUNCTION_WITH_RETURN(AddResource, id, type, value);
+}
+
+WRAP_FUNCTION(GrabButton, int,
+ ClientPtr client, DeviceIntPtr dev,
+ DeviceIntPtr modifier_device, int button,
+ GrabParameters *param, enum InputLevel grabtype,
+ GrabMask *mask)
+{
+ IMPLEMENT_WRAP_FUNCTION_WITH_RETURN(GrabButton, client, dev, modifier_device,
+ button, param, grabtype, mask);
+}
+
/* dixLookupWindow requires a lot of setup not necessary for this test.
* Simple wrapper that returns either one of the fake root window or the
* fake client window. If the requested ID is neither of those wanted,
* return whatever the real dixLookupWindow does.
*/
-int
-__wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access)
+WRAP_FUNCTION(dixLookupWindow, int,
+ WindowPtr *win, XID id, ClientPtr client, Mask access)
{
if (id == root.drawable.id) {
*win = &root;
@@ -314,9 +328,8 @@ __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client, Mask access)
extern ClientRec client_window;
-int
-__wrap_dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client,
- Mask access)
+WRAP_FUNCTION(dixLookupClient, int,
+ ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
{
if (rid == ROOT_WINDOW_ID)
return BadWindow;
diff --git a/test/xi2/protocol-common.h b/test/xi2/protocol-common.h
index c49ee81c6..c3485a432 100644
--- a/test/xi2/protocol-common.h
+++ b/test/xi2/protocol-common.h
@@ -90,17 +90,6 @@ struct devices {
*/
extern struct devices devices;
-/**
- * test-specific userdata, passed into the reply handler.
- */
-extern void *global_userdata;
-
-/**
- * The reply handler called from WriteToClient. Set this handler if you need
- * to check the reply values.
- */
-extern void (*reply_handler) (ClientPtr client, int len, char *data, void *userdata);
-
/**
* The default screen used for the windows. Initialized by init_simple().
*/
@@ -142,15 +131,4 @@ void init_window(WindowPtr window, WindowPtr parent, int id);
*/
void init_simple(void);
-/* Declarations for various overrides in the test files. */
-int __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
- int len, unsigned char *mask);
-int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client,
- Mask access);
-int __real_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client,
- Mask access);
-Bool __wrap_AddResource(XID id, RESTYPE type, void *value);
-int __wrap_dixLookupClient(ClientPtr *c, XID id, ClientPtr client, Mask access);
-int __real_dixLookupClient(ClientPtr *c, XID id, ClientPtr client, Mask access);
-
#endif /* PROTOCOL_COMMON_H */
diff --git a/test/xi2/protocol-xigetselectedevents.c b/test/xi2/protocol-xigetselectedevents.c
index a35db2610..9471ca545 100644
--- a/test/xi2/protocol-xigetselectedevents.c
+++ b/test/xi2/protocol-xigetselectedevents.c
@@ -53,6 +53,7 @@
#include "protocol-common.h"
DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+DECLARE_WRAP_FUNCTION(AddResource, Bool, XID id, RESTYPE type, void *value);
static void reply_XIGetSelectedEvents(ClientPtr client, int len, void *data);
static void reply_XIGetSelectedEvents_data(ClientPtr client, int len, void *data);
@@ -66,8 +67,8 @@ static struct {
extern ClientRec client_window;
/* AddResource is called from XISetSEventMask, we don't need this */
-Bool
-__wrap_AddResource(XID id, RESTYPE type, void *value)
+static Bool
+override_AddResource(XID id, RESTYPE type, void *value)
{
return TRUE;
}
@@ -148,9 +149,9 @@ test_XIGetSelectedEvents(void)
unsigned char *mask;
DeviceIntRec dev;
+ wrapped_AddResource = override_AddResource;
+
init_simple();
- enable_GrabButton_wrap = 0;
- enable_XISetEventMask_wrap = 0;
client = init_client(0, NULL);
request_init(&request, XIGetSelectedEvents);
diff --git a/test/xi2/protocol-xipassivegrabdevice.c b/test/xi2/protocol-xipassivegrabdevice.c
index 343eaf772..c7b5dc17d 100644
--- a/test/xi2/protocol-xipassivegrabdevice.c
+++ b/test/xi2/protocol-xipassivegrabdevice.c
@@ -45,6 +45,11 @@
#include "protocol-common.h"
DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+DECLARE_WRAP_FUNCTION(GrabButton, int,
+ ClientPtr client, DeviceIntPtr dev,
+ DeviceIntPtr modifier_device, int button,
+ GrabParameters *param, enum InputLevel grabtype,
+ GrabMask *mask);
extern ClientRec client_window;
static ClientRec client_request;
@@ -56,26 +61,16 @@ static struct test_data {
int num_modifiers;
} testdata;
-int __wrap_GrabButton(ClientPtr client, DeviceIntPtr dev,
- DeviceIntPtr modifier_device, int button,
- GrabParameters *param, enum InputLevel grabtype,
- GrabMask *mask);
-int __real_GrabButton(ClientPtr client, DeviceIntPtr dev,
- DeviceIntPtr modifier_device, int button,
- GrabParameters *param, enum InputLevel grabtype,
- GrabMask *mask);
+
static void reply_XIPassiveGrabDevice_data(ClientPtr client, int len,
void *data);
-int
-__wrap_GrabButton(ClientPtr client, DeviceIntPtr dev,
+static int
+override_GrabButton(ClientPtr client, DeviceIntPtr dev,
DeviceIntPtr modifier_device, int button,
GrabParameters *param, enum InputLevel grabtype,
GrabMask *mask)
{
- if (!enable_GrabButton_wrap)
- __real_GrabButton(client, dev, modifier_device, button, param, grabtype, mask);
-
/* Fail every odd modifier */
if (param->modifiers % 2)
return BadAccess;
@@ -176,6 +171,8 @@ test_XIPassiveGrabDevice(void)
xXIPassiveGrabDeviceReq *request = (xXIPassiveGrabDeviceReq *) data;
unsigned char *mask;
+ wrapped_GrabButton = override_GrabButton;
+
init_simple();
request_init(request, XIPassiveGrabDevice);
diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index 3f3810263..5dd4f9c36 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -63,21 +63,19 @@
#include "protocol-common.h"
+DECLARE_WRAP_FUNCTION(XISetEventMask, int, DeviceIntPtr dev,
+ WindowPtr win, ClientPtr client,
+ int len, unsigned char *mask);
+
+
static unsigned char *data[4096 * 20]; /* the request data buffer */
extern ClientRec client_window;
-int
-__real_XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
- int len, unsigned char *mask);
-
-int
-__wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
- int len, unsigned char *mask)
+static int
+override_XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
+ int len, unsigned char *mask)
{
- if (!enable_XISetEventMask_wrap)
- return __real_XISetEventMask(dev, win, client, len, mask);
-
return Success;
}
@@ -288,6 +286,8 @@ test_XISelectEvents(void)
xXIEventMask *mask;
xXISelectEventsReq *req;
+ wrapped_XISetEventMask = override_XISetEventMask;
+
init_simple();
req = (xXISelectEventsReq *) data;
commit 7e9d167c9c027be200f298ef7d5469b31d61de55
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Jan 5 14:08:29 2024 +1000
test: make wrapping a function more generic
This cleans up some of the mess this code was in. Functions we need to
wrap can now have a standard implementation using WRAP_FUNCTION - that
macro declares the __real and __wrap functions and a wrapped_$func
global variable.
Tests can set that variable to their desired functions and it will be
then be called on demand.
diff --git a/test/tests.h b/test/tests.h
index 4f69fdd3e..d3fbb9c42 100644
--- a/test/tests.h
+++ b/test/tests.h
@@ -1,6 +1,23 @@
#ifndef TESTS_H
#define TESTS_H
+#define DECLARE_WRAP_FUNCTION(f_, rval_, ...) \
+ extern rval_ (*wrapped_ ## f_)(__VA_ARGS__) \
+
+#define IMPLEMENT_WRAP_FUNCTION(f_, ...) \
+ if (wrapped_ ## f_) wrapped_ ## f_(__VA_ARGS__); \
+ else __real_ ## f_(__VA_ARGS__)
+
+#define IMPLEMENT_WRAP_FUNCTION_WITH_RETURN(f_, ...) \
+ if (wrapped_ ## f_) return wrapped_ ## f_(__VA_ARGS__); \
+ else return __real_ ## f_(__VA_ARGS__)
+
+#define WRAP_FUNCTION(f_, rval_, ...) \
+ rval_ (*wrapped_ ## f_)(__VA_ARGS__); \
+ extern rval_ __real_ ## f_(__VA_ARGS__); \
+ rval_ __wrap_ ## f_(__VA_ARGS__); \
+ rval_ __wrap_ ## f_(__VA_ARGS__)
+
typedef void (*testfunc_t)(void);
const testfunc_t* fixes_test(void);
diff --git a/test/xi1/protocol-xchangedevicecontrol.c b/test/xi1/protocol-xchangedevicecontrol.c
index 392bd75f8..20b125d35 100644
--- a/test/xi1/protocol-xchangedevicecontrol.c
+++ b/test/xi1/protocol-xchangedevicecontrol.c
@@ -40,11 +40,13 @@
#include "protocol-common.h"
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+
extern ClientRec client_window;
static ClientRec client_request;
static void
-reply_ChangeDeviceControl(ClientPtr client, int len, char *data, void *userdata)
+reply_ChangeDeviceControl(ClientPtr client, int len, void *data)
{
xChangeDeviceControlReply *rep = (xChangeDeviceControlReply *) data;
@@ -92,7 +94,7 @@ test_ChangeDeviceControl(void)
request_init(request, ChangeDeviceControl);
- reply_handler = reply_ChangeDeviceControl;
+ wrapped_WriteToClient = reply_ChangeDeviceControl;
client_request = init_client(request->length, request);
diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
index 69d7c14cb..602b62b4b 100644
--- a/test/xi2/protocol-common.c
+++ b/test/xi2/protocol-common.c
@@ -287,12 +287,9 @@ init_simple(void)
devices = init_devices();
}
-void
-__wrap_WriteToClient(ClientPtr client, int len, void *data)
+WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data)
{
- assert(reply_handler != NULL);
-
- (*reply_handler) (client, len, data, global_userdata);
+ IMPLEMENT_WRAP_FUNCTION(WriteToClient, client, len, data);
}
/* dixLookupWindow requires a lot of setup not necessary for this test.
diff --git a/test/xi2/protocol-common.h b/test/xi2/protocol-common.h
index 742ce348f..c49ee81c6 100644
--- a/test/xi2/protocol-common.h
+++ b/test/xi2/protocol-common.h
@@ -143,7 +143,6 @@ void init_window(WindowPtr window, WindowPtr parent, int id);
void init_simple(void);
/* Declarations for various overrides in the test files. */
-void __wrap_WriteToClient(ClientPtr client, int len, void *data);
int __wrap_XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
int len, unsigned char *mask);
int __wrap_dixLookupWindow(WindowPtr *win, XID id, ClientPtr client,
diff --git a/test/xi2/protocol-xigetclientpointer.c b/test/xi2/protocol-xigetclientpointer.c
index 101590ae2..e7c4ca4c3 100644
--- a/test/xi2/protocol-xigetclientpointer.c
+++ b/test/xi2/protocol-xigetclientpointer.c
@@ -43,6 +43,8 @@
#include "protocol-common.h"
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+
static struct {
int cp_is_set;
DeviceIntPtr dev;
@@ -53,7 +55,7 @@ extern ClientRec client_window;
static ClientRec client_request;
static void
-reply_XIGetClientPointer(ClientPtr client, int len, char *data, void *userdata)
+reply_XIGetClientPointer(ClientPtr client, int len, void *data)
{
xXIGetClientPointerReply *rep = (xXIGetClientPointerReply *) data;
@@ -107,7 +109,7 @@ test_XIGetClientPointer(void)
request.win = CLIENT_WINDOW_ID;
- reply_handler = reply_XIGetClientPointer;
+ wrapped_WriteToClient = reply_XIGetClientPointer;
client_request = init_client(request.length, &request);
diff --git a/test/xi2/protocol-xigetselectedevents.c b/test/xi2/protocol-xigetselectedevents.c
index 797accca3..a35db2610 100644
--- a/test/xi2/protocol-xigetselectedevents.c
+++ b/test/xi2/protocol-xigetselectedevents.c
@@ -52,10 +52,10 @@
#include "protocol-common.h"
-static void reply_XIGetSelectedEvents(ClientPtr client, int len, char *data,
- void *userdata);
-static void reply_XIGetSelectedEvents_data(ClientPtr client, int len,
- char *data, void *userdata);
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+
+static void reply_XIGetSelectedEvents(ClientPtr client, int len, void *data);
+static void reply_XIGetSelectedEvents_data(ClientPtr client, int len, void *data);
static struct {
int num_masks_expected;
@@ -73,7 +73,7 @@ __wrap_AddResource(XID id, RESTYPE type, void *value)
}
static void
-reply_XIGetSelectedEvents(ClientPtr client, int len, char *data, void *userdata)
+reply_XIGetSelectedEvents(ClientPtr client, int len, void *data)
{
xXIGetSelectedEventsReply *rep = (xXIGetSelectedEventsReply *) data;
@@ -87,12 +87,11 @@ reply_XIGetSelectedEvents(ClientPtr client, int len, char *data, void *userdata)
assert(rep->num_masks == test_data.num_masks_expected);
- reply_handler = reply_XIGetSelectedEvents_data;
+ wrapped_WriteToClient = reply_XIGetSelectedEvents_data;
}
static void
-reply_XIGetSelectedEvents_data(ClientPtr client, int len, char *data,
- void *userdata)
+reply_XIGetSelectedEvents_data(ClientPtr client, int len, void *data)
{
int i;
xXIEventMask *mask;
@@ -127,12 +126,12 @@ request_XIGetSelectedEvents(xXIGetSelectedEventsReq * req, int error)
client = init_client(req->length, req);
- reply_handler = reply_XIGetSelectedEvents;
+ wrapped_WriteToClient = reply_XIGetSelectedEvents;
rc = ProcXIGetSelectedEvents(&client);
assert(rc == error);
- reply_handler = reply_XIGetSelectedEvents;
+ wrapped_WriteToClient = reply_XIGetSelectedEvents;
client.swapped = TRUE;
swapl(&req->win);
swaps(&req->length);
diff --git a/test/xi2/protocol-xipassivegrabdevice.c b/test/xi2/protocol-xipassivegrabdevice.c
index 2bc4912b7..343eaf772 100644
--- a/test/xi2/protocol-xipassivegrabdevice.c
+++ b/test/xi2/protocol-xipassivegrabdevice.c
@@ -44,6 +44,8 @@
#include "protocol-common.h"
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+
extern ClientRec client_window;
static ClientRec client_request;
@@ -63,7 +65,7 @@ int __real_GrabButton(ClientPtr client, DeviceIntPtr dev,
GrabParameters *param, enum InputLevel grabtype,
GrabMask *mask);
static void reply_XIPassiveGrabDevice_data(ClientPtr client, int len,
- char *data, void *closure);
+ void *data);
int
__wrap_GrabButton(ClientPtr client, DeviceIntPtr dev,
@@ -82,7 +84,7 @@ __wrap_GrabButton(ClientPtr client, DeviceIntPtr dev,
}
static void
-reply_XIPassiveGrabDevice(ClientPtr client, int len, char *data, void *closure)
+reply_XIPassiveGrabDevice(ClientPtr client, int len, void *data)
{
xXIPassiveGrabDeviceReply *rep = (xXIPassiveGrabDeviceReply *) data;
@@ -99,12 +101,11 @@ reply_XIPassiveGrabDevice(ClientPtr client, int len, char *data, void *closure)
/* ProcXIPassiveGrabDevice sends the data in two batches, let the second
* handler handle the modifier data */
if (rep->num_modifiers > 0)
- reply_handler = reply_XIPassiveGrabDevice_data;
+ wrapped_WriteToClient = reply_XIPassiveGrabDevice_data;
}
static void
-reply_XIPassiveGrabDevice_data(ClientPtr client, int len, char *data,
- void *closure)
+reply_XIPassiveGrabDevice_data(ClientPtr client, int len, void *data)
{
int i;
@@ -124,7 +125,7 @@ reply_XIPassiveGrabDevice_data(ClientPtr client, int len, char *data,
assert(mods->pad1 == 0);
}
- reply_handler = reply_XIPassiveGrabDevice;
+ wrapped_WriteToClient = reply_XIPassiveGrabDevice;
}
static void
@@ -181,7 +182,7 @@ test_XIPassiveGrabDevice(void)
request->grab_window = CLIENT_WINDOW_ID;
- reply_handler = reply_XIPassiveGrabDevice;
+ wrapped_WriteToClient = reply_XIPassiveGrabDevice;
client_request = init_client(request->length, request);
printf("Testing invalid device\n");
diff --git a/test/xi2/protocol-xiquerydevice.c b/test/xi2/protocol-xiquerydevice.c
index a87f5737c..e32e713c0 100644
--- a/test/xi2/protocol-xiquerydevice.c
+++ b/test/xi2/protocol-xiquerydevice.c
@@ -42,6 +42,8 @@
#include "xiquerydevice.h"
#include "protocol-common.h"
+
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
/*
* Protocol testing for XIQueryDevice request and reply.
*
@@ -52,24 +54,20 @@
* Repeatedly test with varying deviceids and check against data in reply.
*/
-struct test_data {
+static struct test_data {
int which_device;
int num_devices_in_reply;
-};
+} test_data;
extern ClientRec client_window;
-static void reply_XIQueryDevice_data(ClientPtr client, int len, char *data,
- void *closure);
-static void reply_XIQueryDevice(ClientPtr client, int len, char *data,
- void *closure);
+static void reply_XIQueryDevice_data(ClientPtr client, int len, void *data);
/* reply handling for the first bytes that constitute the reply */
static void
-reply_XIQueryDevice(ClientPtr client, int len, char *data, void *userdata)
+reply_XIQueryDevice(ClientPtr client, int len, void *data)
{
xXIQueryDeviceReply *rep = (xXIQueryDeviceReply *) data;
- struct test_data *querydata = (struct test_data *) userdata;
if (client->swapped) {
swapl(&rep->length);
@@ -79,29 +77,29 @@ reply_XIQueryDevice(ClientPtr client, int len, char *data, void *userdata)
reply_check_defaults(rep, len, XIQueryDevice);
- if (querydata->which_device == XIAllDevices)
+ if (test_data.which_device == XIAllDevices)
assert(rep->num_devices == devices.num_devices);
- else if (querydata->which_device == XIAllMasterDevices)
+ else if (test_data.which_device == XIAllMasterDevices)
assert(rep->num_devices == devices.num_master_devices);
else
assert(rep->num_devices == 1);
- querydata->num_devices_in_reply = rep->num_devices;
- reply_handler = reply_XIQueryDevice_data;
+ test_data.num_devices_in_reply = rep->num_devices;
+
+ wrapped_WriteToClient = reply_XIQueryDevice_data;
}
/* reply handling for the trailing bytes that constitute the device info */
static void
-reply_XIQueryDevice_data(ClientPtr client, int len, char *data, void *closure)
+reply_XIQueryDevice_data(ClientPtr client, int len, void *data)
{
int i, j;
- struct test_data *querydata = (struct test_data *) closure;
DeviceIntPtr dev;
xXIDeviceInfo *info = (xXIDeviceInfo *) data;
xXIAnyInfo *any;
- for (i = 0; i < querydata->num_devices_in_reply; i++) {
+ for (i = 0; i < test_data.num_devices_in_reply; i++) {
if (client->swapped) {
swaps(&info->deviceid);
swaps(&info->attachment);
@@ -110,8 +108,8 @@ reply_XIQueryDevice_data(ClientPtr client, int len, char *data, void *closure)
swaps(&info->name_len);
}
- if (querydata->which_device > XIAllMasterDevices)
- assert(info->deviceid == querydata->which_device);
+ if (test_data.which_device > XIAllMasterDevices)
+ assert(info->deviceid == test_data.which_device);
assert(info->deviceid >= 2); /* 0 and 1 is reserved */
@@ -287,7 +285,7 @@ request_XIQueryDevice(struct test_data *querydata, int deviceid, int error)
request_init(&request, XIQueryDevice);
client = init_client(request.length, &request);
- reply_handler = reply_XIQueryDevice;
+ wrapped_WriteToClient = reply_XIQueryDevice;
querydata->which_device = deviceid;
@@ -298,7 +296,7 @@ request_XIQueryDevice(struct test_data *querydata, int deviceid, int error)
if (rc != Success)
assert(client.errorValue == deviceid);
- reply_handler = reply_XIQueryDevice;
+ wrapped_WriteToClient = reply_XIQueryDevice;
client.swapped = TRUE;
swaps(&request.length);
@@ -315,29 +313,24 @@ test_XIQueryDevice(void)
{
int i;
xXIQueryDeviceReq request;
- struct test_data data;
init_simple();
- reply_handler = reply_XIQueryDevice;
- global_userdata = &data;
+ wrapped_WriteToClient = reply_XIQueryDevice;
request_init(&request, XIQueryDevice);
printf("Testing XIAllDevices.\n");
- request_XIQueryDevice(&data, XIAllDevices, Success);
+ request_XIQueryDevice(&test_data, XIAllDevices, Success);
printf("Testing XIAllMasterDevices.\n");
- request_XIQueryDevice(&data, XIAllMasterDevices, Success);
+ request_XIQueryDevice(&test_data, XIAllMasterDevices, Success);
printf("Testing existing device ids.\n");
for (i = 2; i < 6; i++)
- request_XIQueryDevice(&data, i, Success);
+ request_XIQueryDevice(&test_data, i, Success);
printf("Testing non-existing device ids.\n");
for (i = 6; i <= 0xFFFF; i++)
- request_XIQueryDevice(&data, i, BadDevice);
-
- reply_handler = NULL;
-
+ request_XIQueryDevice(&test_data, i, BadDevice);
}
const testfunc_t*
diff --git a/test/xi2/protocol-xiquerypointer.c b/test/xi2/protocol-xiquerypointer.c
index dfa8016e4..bb92ed1f2 100644
--- a/test/xi2/protocol-xiquerypointer.c
+++ b/test/xi2/protocol-xiquerypointer.c
@@ -44,10 +44,11 @@
#include "protocol-common.h"
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+
extern ClientRec client_window;
static ClientRec client_request;
-static void reply_XIQueryPointer_data(ClientPtr client, int len,
- char *data, void *closure);
+static void reply_XIQueryPointer_data(ClientPtr client, int len, void *data);
static struct {
DeviceIntPtr dev;
@@ -55,7 +56,7 @@ static struct {
} test_data;
static void
-reply_XIQueryPointer(ClientPtr client, int len, char *data, void *closure)
+reply_XIQueryPointer(ClientPtr client, int len, void *data)
{
xXIQueryPointerReply *rep = (xXIQueryPointerReply *) data;
SpritePtr sprite;
@@ -102,13 +103,13 @@ reply_XIQueryPointer(ClientPtr client, int len, char *data, void *closure)
assert(rep->same_screen == xTrue);
- reply_handler = reply_XIQueryPointer_data;
+ wrapped_WriteToClient = reply_XIQueryPointer_data;
}
static void
-reply_XIQueryPointer_data(ClientPtr client, int len, char *data, void *closure)
+reply_XIQueryPointer_data(ClientPtr client, int len, void *data)
{
- reply_handler = reply_XIQueryPointer;
+ wrapped_WriteToClient = reply_XIQueryPointer;
}
static void
@@ -145,7 +146,7 @@ test_XIQueryPointer(void)
request_init(&request, XIQueryPointer);
- reply_handler = reply_XIQueryPointer;
+ wrapped_WriteToClient = reply_XIQueryPointer;
client_request = init_client(request.length, &request);
diff --git a/test/xi2/protocol-xiqueryversion.c b/test/xi2/protocol-xiqueryversion.c
index 009563d50..cd1865fdb 100644
--- a/test/xi2/protocol-xiqueryversion.c
+++ b/test/xi2/protocol-xiqueryversion.c
@@ -50,24 +50,26 @@
#include "protocol-common.h"
#include "exglobals.h"
+DECLARE_WRAP_FUNCTION(WriteToClient, void, ClientPtr client, int len, void *data);
+
extern XExtensionVersion XIVersion;
-struct test_data {
+static struct test_data {
int major_client;
int minor_client;
int major_server;
int minor_server;
int major_expected;
int minor_expected;
-};
+} versions;
+
extern ClientRec client_window;
static void
-reply_XIQueryVersion(ClientPtr client, int len, char *data, void *closure)
+reply_XIQueryVersion(ClientPtr client, int len, void *data)
{
xXIQueryVersionReply *rep = (xXIQueryVersionReply *) data;
- struct test_data *versions = (struct test_data *) closure;
unsigned int sver, cver, ver;
if (client->swapped) {
@@ -81,8 +83,8 @@ reply_XIQueryVersion(ClientPtr client, int len, char *data, void *closure)
assert(rep->length == 0);
- sver = versions->major_server * 1000 + versions->minor_server;
- cver = versions->major_client * 1000 + versions->minor_client;
+ sver = versions.major_server * 1000 + versions.minor_server;
+ cver = versions.major_client * 1000 + versions.minor_client;
ver = rep->major_version * 1000 + rep->minor_version;
assert(ver >= 2000);
@@ -90,16 +92,15 @@ reply_XIQueryVersion(ClientPtr client, int len, char *data, void *closure)
}
static void
-reply_XIQueryVersion_multiple(ClientPtr client, int len, char *data, void *closure)
+reply_XIQueryVersion_multiple(ClientPtr client, int len, void *data)
{
xXIQueryVersionReply *rep = (xXIQueryVersionReply *) data;
- struct test_data *versions = (struct test_data *) closure;
reply_check_defaults(rep, len, XIQueryVersion);
assert(rep->length == 0);
- assert(versions->major_expected == rep->major_version);
- assert(versions->minor_expected == rep->minor_version);
+ assert(versions.major_expected == rep->major_version);
+ assert(versions.minor_expected == rep->minor_version);
}
/**
@@ -112,13 +113,11 @@ static void
request_XIQueryVersion(int smaj, int smin, int cmaj, int cmin, int error)
{
int rc;
- struct test_data versions;
xXIQueryVersionReq request;
ClientRec client;
request_init(&request, XIQueryVersion);
client = init_client(request.length, &request);
- global_userdata = (void *) &versions;
/* Change the server to support smaj.smin */
XIVersion.major_version = smaj;
@@ -153,7 +152,7 @@ test_XIQueryVersion(void)
{
init_simple();
- reply_handler = reply_XIQueryVersion;
+ wrapped_WriteToClient = reply_XIQueryVersion;
printf("Server version 2.0 - client versions [1..3].0\n");
/* some simple tests to catch common errors quickly */
@@ -191,8 +190,6 @@ test_XIQueryVersion(void)
}
#endif
-
- reply_handler = NULL;
}
@@ -202,7 +199,6 @@ test_XIQueryVersion_multiple(void)
xXIQueryVersionReq request;
ClientRec client;
XIClientPtr pXIClient;
- struct test_data versions;
int rc;
init_simple();
@@ -214,8 +210,7 @@ test_XIQueryVersion_multiple(void)
XIVersion.major_version = 2;
XIVersion.minor_version = 2;
- reply_handler = reply_XIQueryVersion_multiple;
- global_userdata = (void *) &versions;
+ wrapped_WriteToClient = reply_XIQueryVersion_multiple;
/* run 1 */
commit 46b579e8d5580c2e0a5c1e31550712256f65d3aa
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Jan 5 11:26:26 2024 +1000
test: switch the unit tests to something resembling a test suite
The tests have inadvertent dependencies on each other so let's avoid
those by changing to a system that returns a null-terminated list of
test functions and our test runner iterates over those and forks off one
process per function.
diff --git a/test/fixes.c b/test/fixes.c
index ba7323495..b5d57cf8f 100644
--- a/test/fixes.c
+++ b/test/fixes.c
@@ -347,13 +347,15 @@ fixes_pointer_barrier_clamp_test(void)
assert(cy == barrier.y1);
}
-int
+const testfunc_t*
fixes_test(void)
{
+ static const testfunc_t testfuncs[] = {
+ fixes_pointer_barriers_test,
+ fixes_pointer_barrier_direction_test,
+ fixes_pointer_barrier_clamp_test,
+ NULL,
+ };
- fixes_pointer_barriers_test();
- fixes_pointer_barrier_direction_test();
- fixes_pointer_barrier_clamp_test();
-
- return 0;
+ return testfuncs;
}
diff --git a/test/hashtabletest.c b/test/hashtabletest.c
index 0387587cb..f748183e6 100644
--- a/test/hashtabletest.c
+++ b/test/hashtabletest.c
@@ -24,7 +24,7 @@ print_int(void* ptr, void* v)
printf("%d", *x);
}
-static int
+static void
test1(void)
{
HashTable h;
@@ -79,10 +79,10 @@ test1(void)
ht_destroy(h);
- return ok;
+ assert(ok);
}
-static int
+static void
test2(void)
{
HashTable h;
@@ -122,10 +122,10 @@ test2(void)
printf("Test with empty keys FAILED\n");
}
- return ok;
+ assert(ok);
}
-static int
+static void
test3(void)
{
int ok = 1;
@@ -152,15 +152,17 @@ test3(void)
ht_destroy(h);
- return ok;
+ assert(ok);
}
-int
+const testfunc_t*
hashtabletest_test(void)
{
- int ok = test1();
- ok = ok && test2();
- ok = ok && test3();
-
- return ok ? 0 : 1;
+ static const testfunc_t testfuncs[] = {
+ test1,
+ test2,
+ test3,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/input.c b/test/input.c
index 34a75fd7f..c7d7cffdb 100644
--- a/test/input.c
+++ b/test/input.c
@@ -1926,28 +1926,31 @@ dix_enqueue_events(void)
inputInfo.devices = NULL;
}
-int
+const testfunc_t*
input_test(void)
{
- dix_enqueue_events();
- dix_double_fp_conversion();
- dix_input_valuator_masks();
- dix_input_valuator_masks_unaccel();
- dix_input_attributes();
- dix_init_valuators();
- dix_event_to_core_conversion();
- dix_event_to_xi1_conversion();
- dix_check_grab_values();
- xi2_struct_sizes();
- dix_grab_matching();
- dix_valuator_mode();
- include_byte_padding_macros();
- include_bit_test_macros();
- xi_unregister_handlers();
- dix_valuator_alloc();
- dix_get_master();
- input_option_test();
- mieq_test();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ dix_enqueue_events,
+ dix_double_fp_conversion,
+ dix_input_valuator_masks,
+ dix_input_valuator_masks_unaccel,
+ dix_input_attributes,
+ dix_init_valuators,
+ dix_event_to_core_conversion,
+ dix_event_to_xi1_conversion,
+ dix_check_grab_values,
+ xi2_struct_sizes,
+ dix_grab_matching,
+ dix_valuator_mode,
+ include_byte_padding_macros,
+ include_bit_test_macros,
+ xi_unregister_handlers,
+ dix_valuator_alloc,
+ dix_get_master,
+ input_option_test,
+ mieq_test,
+ NULL,
+ };
+
+ return testfuncs;
}
diff --git a/test/list.c b/test/list.c
index fee41a538..06a9afc1e 100644
--- a/test/list.c
+++ b/test/list.c
@@ -377,19 +377,21 @@ test_nt_list_delete(void)
free(list);
}
-int
+const testfunc_t*
list_test(void)
{
- test_xorg_list_init();
- test_xorg_list_add();
- test_xorg_list_append();
- test_xorg_list_del();
- test_xorg_list_for_each();
-
- test_nt_list_init();
- test_nt_list_append();
- test_nt_list_insert();
- test_nt_list_delete();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ test_xorg_list_init,
+ test_xorg_list_add,
+ test_xorg_list_append,
+ test_xorg_list_del,
+ test_xorg_list_for_each,
+
+ test_nt_list_init,
+ test_nt_list_append,
+ test_nt_list_insert,
+ test_nt_list_delete,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/misc.c b/test/misc.c
index 19ff13275..ba7a80b51 100644
--- a/test/misc.c
+++ b/test/misc.c
@@ -223,13 +223,17 @@ bswap_test(void)
assert(result_64 == expect_64);
}
-int
+const testfunc_t*
misc_test(void)
{
- dix_version_compare();
- dix_update_desktop_dimensions();
- dix_request_size_checks();
- bswap_test();
+ static const testfunc_t testfuncs[] = {
+ dix_version_compare,
+ dix_update_desktop_dimensions,
+ dix_request_size_checks,
+ bswap_test,
+ NULL,
+ };
+ return testfuncs;
return 0;
}
diff --git a/test/signal-logging.c b/test/signal-logging.c
index 97477dcee..1eaf96867 100644
--- a/test/signal-logging.c
+++ b/test/signal-logging.c
@@ -402,11 +402,13 @@ static void logging_format(void)
}
#pragma GCC diagnostic pop /* "-Wformat-security" */
-int
+const testfunc_t*
signal_logging_test(void)
{
- number_formatting();
- logging_format();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ number_formatting,
+ logging_format,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/string.c b/test/string.c
index 3fd0fb76e..6fa4882d9 100644
--- a/test/string.c
+++ b/test/string.c
@@ -65,10 +65,13 @@ strndup_checks(void)
free(allofit);
}
-int
+const testfunc_t*
string_test(void)
{
- strndup_checks();
+ static const testfunc_t testfuncs[] = {
+ strndup_checks,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/test_xkb.c b/test/test_xkb.c
index 18e37e408..b92e5d555 100644
--- a/test/test_xkb.c
+++ b/test/test_xkb.c
@@ -175,12 +175,14 @@ xkb_set_get_rules_test(void)
XkbFreeRMLVOSet(&rmlvo_backup, FALSE);
}
-int
+const testfunc_t*
xkb_test(void)
{
- xkb_set_get_rules_test();
- xkb_get_rules_test();
- xkb_set_rules_test();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ xkb_set_get_rules_test,
+ xkb_get_rules_test,
+ xkb_set_rules_test,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/tests-common.c b/test/tests-common.c
index 686852827..dad07412b 100644
--- a/test/tests-common.c
+++ b/test/tests-common.c
@@ -7,27 +7,34 @@
#include "tests-common.h"
void
-run_test_in_child(int (*func)(void), const char *funcname)
+run_test_in_child(const testfunc_t* (*suite)(void), const char *funcname)
{
int cpid;
int csts;
int exit_code = -1;
+ const testfunc_t *func = suite();
printf("\n---------------------\n%s...\n", funcname);
- cpid = fork();
- if (cpid) {
- waitpid(cpid, &csts, 0);
- if (!WIFEXITED(csts))
- goto child_failed;
- exit_code = WEXITSTATUS(csts);
- if (exit_code == 0)
- printf(" Pass\n");
- else {
-child_failed:
- printf(" FAIL\n");
- exit(exit_code);
+
+ while (*func)
+ {
+ cpid = fork();
+ if (cpid) {
+ waitpid(cpid, &csts, 0);
+ if (!WIFEXITED(csts))
+ goto child_failed;
+ exit_code = WEXITSTATUS(csts);
+ if (exit_code != 0) {
+ child_failed:
+ printf(" FAIL\n");
+ exit(exit_code);
+ }
+ } else {
+ testfunc_t f = *func;
+ f();
+ exit(0);
}
- } else {
- exit(func());
+ func++;
}
+ printf(" Pass\n");
}
diff --git a/test/tests-common.h b/test/tests-common.h
index ea0642247..c3bcf26a2 100644
--- a/test/tests-common.h
+++ b/test/tests-common.h
@@ -3,10 +3,11 @@
#include "tests.h"
+
#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
#define run_test(func) run_test_in_child(func, #func)
-void run_test_in_child(int (*func)(void), const char *funcname);
+void run_test_in_child(const testfunc_t* (*func)(void), const char *funcname);
#endif /* TESTS_COMMON_H */
diff --git a/test/tests.h b/test/tests.h
index b96ca78bb..4f69fdd3e 100644
--- a/test/tests.h
+++ b/test/tests.h
@@ -1,31 +1,31 @@
#ifndef TESTS_H
#define TESTS_H
-int fixes_test(void);
-int hashtabletest_test(void);
-int input_test(void);
-int list_test(void);
-int misc_test(void);
-int signal_logging_test(void);
-int string_test(void);
-int touch_test(void);
-int xfree86_test(void);
-int xkb_test(void);
-int xtest_test(void);
-
-int protocol_xchangedevicecontrol_test(void);
-
-int protocol_xiqueryversion_test(void);
-int protocol_xiquerydevice_test(void);
-int protocol_xiselectevents_test(void);
-int protocol_xigetselectedevents_test(void);
-int protocol_xisetclientpointer_test(void);
-int protocol_xigetclientpointer_test(void);
-int protocol_xipassivegrabdevice_test(void);
-int protocol_xiquerypointer_test(void);
-int protocol_xiwarppointer_test(void);
-int protocol_eventconvert_test(void);
-int xi2_test(void);
+typedef void (*testfunc_t)(void);
+
+const testfunc_t* fixes_test(void);
+const testfunc_t* hashtabletest_test(void);
+const testfunc_t* input_test(void);
+const testfunc_t* list_test(void);
+const testfunc_t* misc_test(void);
+const testfunc_t* signal_logging_test(void);
+const testfunc_t* string_test(void);
+const testfunc_t* touch_test(void);
+const testfunc_t* xfree86_test(void);
+const testfunc_t* xkb_test(void);
+const testfunc_t* xtest_test(void);
+const testfunc_t* protocol_xchangedevicecontrol_test(void);
+const testfunc_t* protocol_xiqueryversion_test(void);
+const testfunc_t* protocol_xiquerydevice_test(void);
+const testfunc_t* protocol_xiselectevents_test(void);
+const testfunc_t* protocol_xigetselectedevents_test(void);
+const testfunc_t* protocol_xisetclientpointer_test(void);
+const testfunc_t* protocol_xigetclientpointer_test(void);
+const testfunc_t* protocol_xipassivegrabdevice_test(void);
+const testfunc_t* protocol_xiquerypointer_test(void);
+const testfunc_t* protocol_xiwarppointer_test(void);
+const testfunc_t* protocol_eventconvert_test(void);
+const testfunc_t* xi2_test(void);
#ifndef INSIDE_PROTOCOL_COMMON
diff --git a/test/touch.c b/test/touch.c
index 1f183a72a..e4d14f63d 100644
--- a/test/touch.c
+++ b/test/touch.c
@@ -306,16 +306,16 @@ touch_init(void)
free_device(&dev);
}
-int
+const testfunc_t*
touch_test(void)
{
- printf("touch_test: start...\n");
- touch_grow_queue();
- touch_find_ddxid();
- touch_begin_ddxtouch();
- touch_init();
- touch_begin_touch();
-
- printf("touch_test: exiting successfully\n");
- return 0;
+ static const testfunc_t testfuncs[] = {
+ touch_grow_queue,
+ touch_find_ddxid,
+ touch_begin_ddxtouch,
+ touch_init,
+ touch_begin_touch,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/xfree86.c b/test/xfree86.c
index 76837d57e..7cbd37f40 100644
--- a/test/xfree86.c
+++ b/test/xfree86.c
@@ -108,11 +108,13 @@ xfree86_add_comment(void)
free(current);
}
-int
+const testfunc_t*
xfree86_test(void)
{
- xfree86_option_list_duplicate();
- xfree86_add_comment();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ xfree86_option_list_duplicate,
+ xfree86_add_comment,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/xi1/protocol-xchangedevicecontrol.c b/test/xi1/protocol-xchangedevicecontrol.c
index f3e2b1472..392bd75f8 100644
--- a/test/xi1/protocol-xchangedevicecontrol.c
+++ b/test/xi1/protocol-xchangedevicecontrol.c
@@ -85,6 +85,8 @@ static unsigned char *data[4096]; /* the request buffer */
static void
test_ChangeDeviceControl(void)
{
+ init_simple();
+
xChangeDeviceControlReq *request = (xChangeDeviceControlReq *) data;
xDeviceCtl *control = (xDeviceCtl *) (&request[1]);
@@ -115,12 +117,12 @@ test_ChangeDeviceControl(void)
/* XXX: Test functionality! */
}
-int
+const testfunc_t*
protocol_xchangedevicecontrol_test(void)
{
- init_simple();
-
- test_ChangeDeviceControl();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ test_ChangeDeviceControl,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index 0e0123708..5b4c34ac0 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -1206,15 +1206,17 @@ test_convert_XIBarrierEvent(void)
test_XIBarrierEvent(&in);
}
-int
+const testfunc_t*
protocol_eventconvert_test(void)
{
- test_convert_XIRawEvent();
- test_convert_XIFocusEvent();
- test_convert_XIDeviceEvent();
- test_convert_XIDeviceChangedEvent();
- test_convert_XITouchOwnershipEvent();
- test_convert_XIBarrierEvent();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ test_convert_XIRawEvent,
+ test_convert_XIFocusEvent,
+ test_convert_XIDeviceEvent,
+ test_convert_XIDeviceChangedEvent,
+ test_convert_XITouchOwnershipEvent,
+ test_convert_XIBarrierEvent,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xigetclientpointer.c b/test/xi2/protocol-xigetclientpointer.c
index 40dacfc4d..101590ae2 100644
--- a/test/xi2/protocol-xigetclientpointer.c
+++ b/test/xi2/protocol-xigetclientpointer.c
@@ -100,6 +100,9 @@ test_XIGetClientPointer(void)
{
xXIGetClientPointerReq request;
+ init_simple();
+ client_window = init_client(0, NULL);
+
request_init(&request, XIGetClientPointer);
request.win = CLIENT_WINDOW_ID;
@@ -144,13 +147,13 @@ test_XIGetClientPointer(void)
request_XIGetClientPointer(&client_request, &request, Success);
}
-int
+const testfunc_t*
protocol_xigetclientpointer_test(void)
{
- init_simple();
- client_window = init_client(0, NULL);
-
- test_XIGetClientPointer();
+ static const testfunc_t testfuncs[] = {
+ test_XIGetClientPointer,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xigetselectedevents.c b/test/xi2/protocol-xigetselectedevents.c
index 0c7ef1675..797accca3 100644
--- a/test/xi2/protocol-xigetselectedevents.c
+++ b/test/xi2/protocol-xigetselectedevents.c
@@ -145,10 +145,15 @@ test_XIGetSelectedEvents(void)
{
int i, j;
xXIGetSelectedEventsReq request;
- ClientRec client = init_client(0, NULL);
+ ClientRec client;
unsigned char *mask;
DeviceIntRec dev;
+ init_simple();
+ enable_GrabButton_wrap = 0;
+ enable_XISetEventMask_wrap = 0;
+ client = init_client(0, NULL);
+
request_init(&request, XIGetSelectedEvents);
printf("Testing for BadWindow on invalid window.\n");
@@ -208,14 +213,14 @@ test_XIGetSelectedEvents(void)
}
}
-int
+const testfunc_t*
protocol_xigetselectedevents_test(void)
{
- init_simple();
- enable_GrabButton_wrap = 0;
- enable_XISetEventMask_wrap = 0;
-
- test_XIGetSelectedEvents();
+ static const testfunc_t testfuncs[] = {
+ test_XIGetSelectedEvents,
+ NULL,
+ };
+ return testfuncs;
return 0;
}
diff --git a/test/xi2/protocol-xipassivegrabdevice.c b/test/xi2/protocol-xipassivegrabdevice.c
index 56645c63a..2bc4912b7 100644
--- a/test/xi2/protocol-xipassivegrabdevice.c
+++ b/test/xi2/protocol-xipassivegrabdevice.c
@@ -175,6 +175,8 @@ test_XIPassiveGrabDevice(void)
xXIPassiveGrabDeviceReq *request = (xXIPassiveGrabDeviceReq *) data;
unsigned char *mask;
+ init_simple();
+
request_init(request, XIPassiveGrabDevice);
request->grab_window = CLIENT_WINDOW_ID;
@@ -247,12 +249,13 @@ test_XIPassiveGrabDevice(void)
request_XIPassiveGrabDevice(&client_request, request, Success, 0);
}
-int
+const testfunc_t*
protocol_xipassivegrabdevice_test(void)
{
- init_simple();
-
- test_XIPassiveGrabDevice();
+ static const testfunc_t testfuncs[] = {
+ test_XIPassiveGrabDevice,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xiquerydevice.c b/test/xi2/protocol-xiquerydevice.c
index 821ca4063..a87f5737c 100644
--- a/test/xi2/protocol-xiquerydevice.c
+++ b/test/xi2/protocol-xiquerydevice.c
@@ -317,6 +317,8 @@ test_XIQueryDevice(void)
xXIQueryDeviceReq request;
struct test_data data;
+ init_simple();
+
reply_handler = reply_XIQueryDevice;
global_userdata = &data;
request_init(&request, XIQueryDevice);
@@ -338,12 +340,13 @@ test_XIQueryDevice(void)
}
-int
+const testfunc_t*
protocol_xiquerydevice_test(void)
{
- init_simple();
-
- test_XIQueryDevice();
+ static const testfunc_t testfuncs[] = {
+ test_XIQueryDevice,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xiquerypointer.c b/test/xi2/protocol-xiquerypointer.c
index e04b0bad8..dfa8016e4 100644
--- a/test/xi2/protocol-xiquerypointer.c
+++ b/test/xi2/protocol-xiquerypointer.c
@@ -139,6 +139,8 @@ test_XIQueryPointer(void)
int i;
xXIQueryPointerReq request;
+ init_simple();
+
memset(&request, 0, sizeof(request));
request_init(&request, XIQueryPointer);
@@ -192,12 +194,12 @@ test_XIQueryPointer(void)
request_XIQueryPointer(&client_request, &request, BadLength);
}
-int
+const testfunc_t*
protocol_xiquerypointer_test(void)
{
- init_simple();
-
- test_XIQueryPointer();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ test_XIQueryPointer,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xiqueryversion.c b/test/xi2/protocol-xiqueryversion.c
index 89df18431..009563d50 100644
--- a/test/xi2/protocol-xiqueryversion.c
+++ b/test/xi2/protocol-xiqueryversion.c
@@ -151,6 +151,8 @@ request_XIQueryVersion(int smaj, int smin, int cmaj, int cmin, int error)
static void
test_XIQueryVersion(void)
{
+ init_simple();
+
reply_handler = reply_XIQueryVersion;
printf("Server version 2.0 - client versions [1..3].0\n");
@@ -203,6 +205,8 @@ test_XIQueryVersion_multiple(void)
struct test_data versions;
int rc;
+ init_simple();
+
request_init(&request, XIQueryVersion);
client = init_client(request.length, &request);
@@ -290,13 +294,14 @@ test_XIQueryVersion_multiple(void)
assert(rc == BadValue);
}
-int
+const testfunc_t*
protocol_xiqueryversion_test(void)
{
- init_simple();
-
- test_XIQueryVersion();
- test_XIQueryVersion_multiple();
+ static const testfunc_t testfuncs[] = {
+ test_XIQueryVersion,
+ test_XIQueryVersion_multiple,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xiselectevents.c b/test/xi2/protocol-xiselectevents.c
index 41a370a3e..3f3810263 100644
--- a/test/xi2/protocol-xiselectevents.c
+++ b/test/xi2/protocol-xiselectevents.c
@@ -288,6 +288,8 @@ test_XISelectEvents(void)
xXIEventMask *mask;
xXISelectEventsReq *req;
+ init_simple();
+
req = (xXISelectEventsReq *) data;
request_init(req, XISelectEvents);
@@ -364,12 +366,13 @@ test_XISelectEvents(void)
request_XISelectEvents_masks(req);
}
-int
+const testfunc_t*
protocol_xiselectevents_test(void)
{
- init_simple();
-
- test_XISelectEvents();
+ static const testfunc_t testfuncs[] = {
+ test_XISelectEvents,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xisetclientpointer.c b/test/xi2/protocol-xisetclientpointer.c
index 0e94a91e2..f6ddb72b5 100644
--- a/test/xi2/protocol-xisetclientpointer.c
+++ b/test/xi2/protocol-xisetclientpointer.c
@@ -85,6 +85,9 @@ test_XISetClientPointer(void)
int i;
xXISetClientPointerReq request;
+ init_simple();
+ client_window = init_client(0, NULL);
+
request_init(&request, XISetClientPointer);
request.win = CLIENT_WINDOW_ID;
@@ -124,13 +127,13 @@ test_XISetClientPointer(void)
}
-int
+const testfunc_t*
protocol_xisetclientpointer_test(void)
{
- init_simple();
- client_window = init_client(0, NULL);
-
- test_XISetClientPointer();
+ static const testfunc_t testfuncs[] = {
+ test_XISetClientPointer,
+ NULL,
+ };
- return 0;
+ return testfuncs;
}
diff --git a/test/xi2/protocol-xiwarppointer.c b/test/xi2/protocol-xiwarppointer.c
index 1b6a2fca6..417d9adfc 100644
--- a/test/xi2/protocol-xiwarppointer.c
+++ b/test/xi2/protocol-xiwarppointer.c
@@ -106,6 +106,9 @@ test_XIWarpPointer(void)
ClientRec client_request;
xXIWarpPointerReq request;
+ init_simple();
+ screen.SetCursorPosition = ScreenSetCursorPosition;
+
memset(&request, 0, sizeof(request));
request_init(&request, XIWarpPointer);
@@ -188,13 +191,12 @@ test_XIWarpPointer(void)
request_XIWarpPointer(&client_request, &request, BadLength);
}
-int
+const testfunc_t*
protocol_xiwarppointer_test(void)
{
- init_simple();
- screen.SetCursorPosition = ScreenSetCursorPosition;
-
- test_XIWarpPointer();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ test_XIWarpPointer,
+ NULL,
+ };
+ return testfuncs;
}
diff --git a/test/xi2/xi2.c b/test/xi2/xi2.c
index 153cd759b..03022ebfa 100644
--- a/test/xi2/xi2.c
+++ b/test/xi2/xi2.c
@@ -139,10 +139,14 @@ xi2mask_test(void)
free(mask);
}
-int
+const testfunc_t*
xi2_test(void)
{
- xi2mask_test();
+ static const testfunc_t testfuncs[] = {
+ xi2mask_test,
+ NULL,
+ };
+ return testfuncs;
return 0;
}
diff --git a/test/xtest.c b/test/xtest.c
index 171f285f6..bfb066b7d 100644
--- a/test/xtest.c
+++ b/test/xtest.c
@@ -59,9 +59,49 @@ device_cursor_cleanup(DeviceIntPtr dev, ScreenPtr screen)
{
}
+static void
+xtest_init(void)
+{
+ static ScreenRec screen = {0};
+ static ClientRec server_client = {0};
+ static WindowRec root = {{0}};
+ static WindowOptRec optional = {0};
+
+ /* random stuff that needs initialization */
+ root.drawable.id = 0xab;
+ root.optional = &optional;
+ screen.root = &root;
+ screenInfo.numScreens = 1;
+ screenInfo.screens[0] = &screen;
+ screen.myNum = 0;
+ screen.id = 100;
+ screen.width = 640;
+ screen.height = 480;
+ screen.DeviceCursorInitialize = device_cursor_init;
+ screen.DeviceCursorCleanup = device_cursor_cleanup;
+ dixResetPrivates();
+ serverClient = &server_client;
+ InitClient(serverClient, 0, (void *) NULL);
+ if (!InitClientResources(serverClient)) /* for root resources */
+ FatalError("couldn't init server resources");
+ InitAtoms();
+ SyncExtensionInit();
+
+ /* this also inits the xtest devices */
+ InitCoreDevices();
+}
+
+static void
+xtest_cleanup(void)
+{
+ CloseDownDevices();
+}
+
static void
xtest_init_devices(void)
{
+ xtest_init();
+
assert(xtestpointer);
assert(xtestkeyboard);
assert(IsXTestDevice(xtestpointer, NULL));
@@ -72,6 +112,8 @@ xtest_init_devices(void)
assert(GetXTestDevice(inputInfo.pointer) == xtestpointer);
assert(GetXTestDevice(inputInfo.keyboard) == xtestkeyboard);
+
+ xtest_cleanup();
}
/**
@@ -84,8 +126,11 @@ xtest_properties(void)
int rc;
char value = 1;
XIPropertyValuePtr prop;
- Atom xtest_prop = XIGetKnownProperty(XI_PROP_XTEST_DEVICE);
+ Atom xtest_prop;
+ xtest_init();
+
+ xtest_prop = XIGetKnownProperty(XI_PROP_XTEST_DEVICE);
rc = XIGetDeviceProperty(xtestpointer, xtest_prop, &prop);
assert(rc == Success);
assert(prop);
@@ -102,43 +147,17 @@ xtest_properties(void)
XA_INTEGER, 8, PropModeReplace, 1, &value,
FALSE);
assert(rc == BadAccess);
+
+ xtest_cleanup();
}
-int
+const testfunc_t*
xtest_test(void)
{
- ScreenRec screen = {0};
- ClientRec server_client = {0};
- WindowRec root = {{0}};
- WindowOptRec optional = {0};
-
- /* random stuff that needs initialization */
- root.drawable.id = 0xab;
- root.optional = &optional;
- screen.root = &root;
- screenInfo.numScreens = 1;
- screenInfo.screens[0] = &screen;
- screen.myNum = 0;
- screen.id = 100;
- screen.width = 640;
- screen.height = 480;
- screen.DeviceCursorInitialize = device_cursor_init;
- screen.DeviceCursorCleanup = device_cursor_cleanup;
- dixResetPrivates();
- serverClient = &server_client;
- InitClient(serverClient, 0, (void *) NULL);
- if (!InitClientResources(serverClient)) /* for root resources */
- FatalError("couldn't init server resources");
- InitAtoms();
- SyncExtensionInit();
-
- /* this also inits the xtest devices */
- InitCoreDevices();
-
- xtest_init_devices();
- xtest_properties();
-
- CloseDownDevices();
-
- return 0;
+ static const testfunc_t testfuncs[] = {
+ xtest_init_devices,
+ xtest_properties,
+ NULL,
+ };
+ return testfuncs;
}
More information about the xorg-commit
mailing list