test: automate test suite handling

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>
This commit is contained in:
Peter Hutterer 2018-06-15 14:36:37 +10:00
parent bc5c72571d
commit 83ce8eb5be
9 changed files with 29 additions and 30 deletions

View file

@ -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"

View 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");

View 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");

View 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");

View 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");

View 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");

View 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");

View file

@ -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);

View 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");