test: automate test suite handling
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 15 Jun 2018 04:36:37 +0000 (14:36 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Fri, 15 Jun 2018 05:00:24 +0000 (15:00 +1000)
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@who-t.net>
test/test-common.h
test/test-event-codes.c
test/test-event-names.c
test/test-int-queue.c
test/test-libevdev-events.c
test/test-libevdev-has-event.c
test/test-libevdev-init.c
test/test-main.c
test/test-uinput.c

index 47ad4765e6797a54fd157ef004460e4fe1c24dbe..2f258f3013880d0e09cf17de6d81832c73c5ef3c 100644 (file)
 #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"
index ced5dba2b2702cffc841092efdc09a4cd1134e37..8e85df80df94d51d6989c2b6ec6e4d88fbff2acc 100644 (file)
@@ -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");
 
index 4807decd4cefefed6bc6f60a2d552362800a7aad..9ed23d0b7ca5bdcd40cf7a4d3bfcb357ba82f441 100644 (file)
@@ -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");
 
index c23f96f6a59f6561f3547fa45867c10fdcc9c4f7..b98425ab77c831a567e13ba6930d08fe715a9994 100644 (file)
@@ -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");
 
index dd2face5d34c928242074aac30d6e59f209f470c..6055d595c8075e454d99134f0612384514603d29 100644 (file)
@@ -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");
 
index 77032069682645a1144e1369e626436e1f89049e..07646deb9e8fed40756cd8a95cb3b4d6dd38bfb0 100644 (file)
@@ -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");
 
index 9b49ca2556a0f584cf733ec44c215c75571108f2..c5d7d8cc15334cf77014a1b7cd02e23f7ce8be49 100644 (file)
@@ -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");
 
index 9a2bf9484f577afe5cced964bdb1dd569eba2052..b1c82ccd32d483d4d8dd9726792ddcd31ea9f862 100644 (file)
 
 #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);
index 99738e3f4730f585fbd49600aecfbc2ffe9b61bb..e538050ceb1cda44a2541cd00639f230d0904eb4 100644 (file)
@@ -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");