[PATCH libevdev 2/6] test: automate test suite handling

Peter Hutterer peter.hutterer at who-t.net
Fri Jun 15 05:22:49 UTC 2018


Move all tests to a special section, then loop through that section
to fetch all test suite. The result is that new tests only need to add the
source files without having to update everything else as well.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 test/test-common.h             | 14 ++++++++++++++
 test/test-event-codes.c        |  3 +--
 test/test-event-names.c        |  3 +--
 test/test-int-queue.c          |  3 +--
 test/test-libevdev-events.c    |  3 +--
 test/test-libevdev-has-event.c |  3 +--
 test/test-libevdev-init.c      |  3 +--
 test/test-main.c               | 24 ++++++++----------------
 test/test-uinput.c             |  3 +--
 9 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/test/test-common.h b/test/test-common.h
index 47ad476..2f258f3 100644
--- a/test/test-common.h
+++ b/test/test-common.h
@@ -28,6 +28,20 @@
 #ifndef _TEST_COMMON_H_
 #define _TEST_COMMON_H_
 
+struct libevdev_test {
+	const char *name;
+	Suite* (*setup)(void);
+} __attribute__((aligned(16)));
+
+#define TEST_SUITE(name) \
+	static Suite* (name##_setup)(void); \
+	static const struct libevdev_test _test \
+	__attribute__((used)) \
+	__attribute__((section ("test_section"))) = { \
+		#name, name##_setup \
+	}; \
+	static Suite* (name##_setup)(void)
+
 #define TEST_DEVICE_NAME "libevdev test device"
 
 #include "test-common-uinput.h"
diff --git a/test/test-event-codes.c b/test/test-event-codes.c
index ced5dba..8e85df8 100644
--- a/test/test-event-codes.c
+++ b/test/test-event-codes.c
@@ -131,8 +131,7 @@ START_TEST(test_properties_invalid)
 }
 END_TEST
 
-Suite *
-event_code_suite(void)
+TEST_SUITE(event_code_suite)
 {
 	Suite *s = suite_create("Event codes");
 
diff --git a/test/test-event-names.c b/test/test-event-names.c
index 4807dec..9ed23d0 100644
--- a/test/test-event-names.c
+++ b/test/test-event-names.c
@@ -271,8 +271,7 @@ START_TEST(test_event_code)
 }
 END_TEST
 
-Suite *
-event_name_suite(void)
+TEST_SUITE(event_name_suite)
 {
 	Suite *s = suite_create("Event names");
 
diff --git a/test/test-int-queue.c b/test/test-int-queue.c
index c23f96f..b98425a 100644
--- a/test/test-int-queue.c
+++ b/test/test-int-queue.c
@@ -326,8 +326,7 @@ START_TEST(test_queue_set_num_elements)
 }
 END_TEST
 
-Suite *
-queue_suite(void)
+TEST_SUITE(queue_suite)
 {
 	Suite *s = suite_create("Event queue");
 
diff --git a/test/test-libevdev-events.c b/test/test-libevdev-events.c
index dd2face..6055d59 100644
--- a/test/test-libevdev-events.c
+++ b/test/test-libevdev-events.c
@@ -2140,8 +2140,7 @@ START_TEST(test_event_mt_value_setters_current_slot)
 }
 END_TEST
 
-Suite *
-libevdev_events(void)
+TEST_SUITE(libevdev_events)
 {
 	Suite *s = suite_create("libevdev event tests");
 
diff --git a/test/test-libevdev-has-event.c b/test/test-libevdev-has-event.c
index 7703206..07646de 100644
--- a/test/test-libevdev-has-event.c
+++ b/test/test-libevdev-has-event.c
@@ -1142,8 +1142,7 @@ START_TEST(test_led_same)
 }
 END_TEST
 
-Suite *
-libevdev_has_event_test(void)
+TEST_SUITE(has_events)
 {
 	Suite *s = suite_create("libevdev_has_event tests");
 
diff --git a/test/test-libevdev-init.c b/test/test-libevdev-init.c
index 9b49ca2..c5d7d8c 100644
--- a/test/test-libevdev-init.c
+++ b/test/test-libevdev-init.c
@@ -683,8 +683,7 @@ START_TEST(test_clock_id_events)
 }
 END_TEST
 
-Suite *
-libevdev_init_test(void)
+TEST_SUITE(libevdev_init_test)
 {
 	Suite *s = suite_create("libevdev init tests");
 
diff --git a/test/test-main.c b/test/test-main.c
index 9a2bf94..b1c82cc 100644
--- a/test/test-main.c
+++ b/test/test-main.c
@@ -32,14 +32,6 @@
 
 #include "test-common.h"
 
-extern Suite *event_name_suite(void);
-extern Suite *event_code_suite(void);
-extern Suite *libevdev_init_test(void);
-extern Suite *queue_suite(void);
-extern Suite *libevdev_has_event_test(void);
-extern Suite *libevdev_events(void);
-extern Suite *uinput_suite(void);
-
 static int
 is_debugger_attached(void)
 {
@@ -68,8 +60,11 @@ is_debugger_attached(void)
 	return rc;
 }
 
+extern const struct libevdev_test __start_test_section, __stop_test_section;
+
 int main(void)
 {
+	const struct libevdev_test *t;
 	const struct rlimit corelimit = {0, 0};
 	int failed;
 
@@ -86,14 +81,11 @@ int main(void)
 
 	libevdev_set_log_function(test_logfunc_abort_on_error, NULL);
 
-	Suite *s = libevdev_has_event_test();
-	SRunner *sr = srunner_create(s);
-	srunner_add_suite(sr, libevdev_events());
-	srunner_add_suite(sr, libevdev_init_test());
-	srunner_add_suite(sr, queue_suite());
-	srunner_add_suite(sr, event_name_suite());
-	srunner_add_suite(sr, event_code_suite());
-	srunner_add_suite(sr, uinput_suite());
+	SRunner *sr = srunner_create(NULL);
+	for (t = &__start_test_section; t < &__stop_test_section; t++) {
+		srunner_add_suite(sr, t->setup());
+	}
+
 	srunner_run_all(sr, CK_NORMAL);
 
 	failed = srunner_ntests_failed(sr);
diff --git a/test/test-uinput.c b/test/test-uinput.c
index 99738e3..e538050 100644
--- a/test/test-uinput.c
+++ b/test/test-uinput.c
@@ -368,8 +368,7 @@ START_TEST(test_uinput_properties)
 }
 END_TEST
 
-Suite *
-uinput_suite(void)
+TEST_SUITE(uinput_suite)
 {
 	Suite *s = suite_create("libevdev uinput device tests");
 
-- 
2.14.4



More information about the Input-tools mailing list