mirror of https://github.com/nirenjan/libx52.git
Reduce duplicate code in libx52 test code
parent
e1915bc734
commit
3eaee7b8f4
|
@ -16,12 +16,11 @@
|
|||
|
||||
typedef int (*blink_shift_fn)(libx52_device *, uint8_t);
|
||||
|
||||
struct test_case {
|
||||
const char *test_case_id;
|
||||
TEST_STRUCT (
|
||||
blink_shift_fn func;
|
||||
uint8_t state;
|
||||
struct ivpair data[2];
|
||||
};
|
||||
)
|
||||
|
||||
#define on 1
|
||||
#define off 0
|
||||
|
@ -36,23 +35,16 @@ struct test_case {
|
|||
|
||||
#define TEST(func, state) { #func "/" #state, libx52_set_ ## func, state, {{ x52_ ## func ## _indicator, x52_ ## func ## _ ## state}, {0, 0}}}
|
||||
|
||||
const struct test_case test_cases[] = {
|
||||
TEST_CASES = {
|
||||
TEST(blink, on),
|
||||
TEST(blink, off),
|
||||
TEST(shift, on),
|
||||
TEST(shift, off),
|
||||
};
|
||||
|
||||
#define TC_COUNT (sizeof(test_cases) / sizeof(test_cases[0]))
|
||||
|
||||
void run_test(int tc_id)
|
||||
TEST_FUNC()
|
||||
{
|
||||
struct libx52_device *dev = x52_test_init();
|
||||
|
||||
struct test_case test = test_cases[tc_id];
|
||||
|
||||
#define PRINT_FAIL() printf("not ok %d %s\n", tc_id+1, test.test_case_id)
|
||||
#define PRINT_PASS() printf("ok %d %s\n", tc_id+1, test.test_case_id)
|
||||
TEST_INIT();
|
||||
int rc = (*test.func)(dev, test.state);
|
||||
|
||||
if (rc != LIBX52_SUCCESS) {
|
||||
|
@ -61,29 +53,7 @@ void run_test(int tc_id)
|
|||
return;
|
||||
}
|
||||
|
||||
rc = libx52_update(dev);
|
||||
if (rc != LIBX52_SUCCESS) {
|
||||
PRINT_FAIL();
|
||||
printf("# libx52_update failed, rc = %d\n", rc);
|
||||
return;
|
||||
TEST_VERIFY(test.data);
|
||||
}
|
||||
|
||||
if (!x52_test_assert_expected(dev, test.data)) {
|
||||
PRINT_FAIL();
|
||||
x52_test_print_diagnostics();
|
||||
return;
|
||||
}
|
||||
|
||||
PRINT_PASS();
|
||||
x52_test_cleanup(dev);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("1..%ld\n", TC_COUNT);
|
||||
for (i = 0; i < TC_COUNT; i++) {
|
||||
run_test(i);
|
||||
}
|
||||
}
|
||||
TEST_MAIN()
|
||||
|
|
|
@ -48,4 +48,47 @@ void x52_test_cleanup(libx52_device *dev);
|
|||
void x52_test_print_observed_data(libx52_device *dev);
|
||||
void x52_test_print_expected_data(struct ivpair *data);
|
||||
|
||||
#define PRINT_FAIL() printf("not ok %d %s\n", tc_id+1, test.test_case_id)
|
||||
#define PRINT_PASS() printf("ok %d %s\n", tc_id+1, test.test_case_id)
|
||||
#define TEST_STRUCT(...) struct test_case { \
|
||||
const char *test_case_id; \
|
||||
__VA_ARGS__ \
|
||||
};
|
||||
|
||||
#define TEST_CASES const struct test_case test_cases[]
|
||||
#define TEST_FUNC() void run_test(int tc_id)
|
||||
#define TEST_INIT() \
|
||||
struct libx52_device *dev = x52_test_init(); \
|
||||
struct test_case test = test_cases[tc_id];
|
||||
|
||||
#define TEST_VERIFY(data) do { \
|
||||
int test_rc; \
|
||||
test_rc = libx52_update(dev); \
|
||||
if (test_rc != LIBX52_SUCCESS) { \
|
||||
PRINT_FAIL(); \
|
||||
printf("# libx52_update failed, rc = %d\n", test_rc); \
|
||||
return; \
|
||||
} \
|
||||
\
|
||||
if (!x52_test_assert_expected(dev, data)) { \
|
||||
PRINT_FAIL(); \
|
||||
x52_test_print_diagnostics(); \
|
||||
x52_test_print_expected_data(data); \
|
||||
x52_test_print_observed_data(dev); \
|
||||
return; \
|
||||
} \
|
||||
\
|
||||
PRINT_PASS(); \
|
||||
x52_test_cleanup(dev); \
|
||||
} while(0)
|
||||
|
||||
#define TEST_MAIN() int main() { \
|
||||
int i; \
|
||||
size_t tc_count = sizeof(test_cases) / sizeof(test_cases[0]); \
|
||||
printf("1..%lu\n", tc_count); \
|
||||
for (i = 0; i < tc_count; i++) { \
|
||||
run_test(i); \
|
||||
} \
|
||||
}
|
||||
|
||||
#endif // !defined _TEST_COMMON_H
|
||||
|
|
|
@ -14,13 +14,12 @@
|
|||
#include "test_common.h"
|
||||
#include "x52_commands.h"
|
||||
|
||||
struct test_case {
|
||||
const char *test_case_id;
|
||||
TEST_STRUCT (
|
||||
libx52_led_id led_id;
|
||||
libx52_led_state state;
|
||||
int retval;
|
||||
struct ivpair data[3];
|
||||
};
|
||||
)
|
||||
|
||||
#define X52_LED_CMD 0xb8
|
||||
#define UNSUPPORTED(led, state) { #led "/" #state " unsupported", LIBX52_LED_ ## led, LIBX52_LED_STATE_ ## state, LIBX52_ERROR_NOT_SUPPORTED}
|
||||
|
@ -31,7 +30,7 @@ struct test_case {
|
|||
#define AMBER(led) { #led "/Amber", LIBX52_LED_## led, LIBX52_LED_STATE_AMBER, LIBX52_SUCCESS, {{X52_LED_CMD, ((LIBX52_LED_ ## led + 0) << 8) | 1}, {X52_LED_CMD, ((LIBX52_LED_ ## led + 1) << 8) | 1}, {0, 0}}}
|
||||
#define GREEN(led) { #led "/Green", LIBX52_LED_## led, LIBX52_LED_STATE_GREEN, LIBX52_SUCCESS, {{X52_LED_CMD, ((LIBX52_LED_ ## led + 0) << 8) | 0}, {X52_LED_CMD, ((LIBX52_LED_ ## led + 1) << 8) | 1}, {0, 0}}}
|
||||
|
||||
const struct test_case test_cases[] = {
|
||||
TEST_CASES = {
|
||||
OFF_MONO(FIRE),
|
||||
ON(FIRE),
|
||||
UNSUPPORTED(FIRE, RED),
|
||||
|
@ -99,21 +98,16 @@ const struct test_case test_cases[] = {
|
|||
UNSUPPORTED(THROTTLE, GREEN),
|
||||
};
|
||||
|
||||
#define TC_COUNT (sizeof(test_cases) / sizeof(test_cases[0]))
|
||||
|
||||
void run_test(int tc_id)
|
||||
TEST_FUNC()
|
||||
{
|
||||
struct libx52_device *dev = x52_test_init();
|
||||
|
||||
struct test_case test = test_cases[tc_id];
|
||||
TEST_INIT();
|
||||
|
||||
/* Set the X52Pro flag in dev->flags, otherwise libx52_set_led_state will
|
||||
* always return not supported
|
||||
*/
|
||||
dev->flags = 1;
|
||||
|
||||
#define PRINT_FAIL() printf("not ok %d %s\n", tc_id+1, test.test_case_id)
|
||||
#define PRINT_PASS() printf("ok %d %s\n", tc_id+1, test.test_case_id)
|
||||
int rc = libx52_set_led_state(dev, test.led_id, test.state);
|
||||
|
||||
if (rc != test.retval) {
|
||||
|
@ -122,29 +116,7 @@ void run_test(int tc_id)
|
|||
return;
|
||||
}
|
||||
|
||||
rc = libx52_update(dev);
|
||||
if (rc != LIBX52_SUCCESS) {
|
||||
PRINT_FAIL();
|
||||
printf("# libx52_update failed, rc = %d\n", rc);
|
||||
return;
|
||||
TEST_VERIFY(test.data);
|
||||
}
|
||||
|
||||
if (!x52_test_assert_expected(dev, test.data)) {
|
||||
PRINT_FAIL();
|
||||
x52_test_print_diagnostics();
|
||||
return;
|
||||
}
|
||||
|
||||
PRINT_PASS();
|
||||
x52_test_cleanup(dev);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("1..%ld\n", TC_COUNT);
|
||||
for (i = 0; i < TC_COUNT; i++) {
|
||||
run_test(i);
|
||||
}
|
||||
}
|
||||
TEST_MAIN()
|
||||
|
|
|
@ -13,18 +13,17 @@
|
|||
#include "x52_common.h"
|
||||
#include "test_common.h"
|
||||
|
||||
struct test_case {
|
||||
const char *test_case_id;
|
||||
TEST_STRUCT (
|
||||
int offset_primary;
|
||||
int offset_secondary;
|
||||
libx52_clock_id clock_id;
|
||||
uint16_t x52_clock;
|
||||
uint16_t x52_offset;
|
||||
};
|
||||
)
|
||||
|
||||
#define TEST(id, o1, o23, offs) {id, o1, o23, LIBX52_CLOCK_2, 0xc1, offs}, {id, o1, o23, LIBX52_CLOCK_3, 0xc2, offs}
|
||||
|
||||
const struct test_case test_cases[] = {
|
||||
TEST_CASES = {
|
||||
TEST("Etc/UTC+24|Etc/UTC-24", -1440, +1440, 0),
|
||||
TEST("Etc/UTC-24|Etc/UTC+24", +1440, -1440, 0x0400), // Negative 0
|
||||
TEST("Honolulu|Auckland", -600, +720, 0x0478), // -2 hours
|
||||
|
@ -39,18 +38,12 @@ const struct test_case test_cases[] = {
|
|||
TEST("Etc/UTC-12|Etc/UTC+12", +720, -720, 0x0400),
|
||||
};
|
||||
|
||||
#define TC_COUNT (sizeof(test_cases) / sizeof(test_cases[0]))
|
||||
|
||||
void run_test(int tc_id)
|
||||
TEST_FUNC()
|
||||
{
|
||||
struct libx52_device *dev = x52_test_init();
|
||||
struct test_case test = test_cases[tc_id];
|
||||
TEST_INIT();
|
||||
int rc;
|
||||
struct ivpair data[2] = { 0 };
|
||||
|
||||
#define PRINT_FAIL() printf("not ok %d %s/%d\n", tc_id+1, test.test_case_id, test.clock_id + 1)
|
||||
#define PRINT_PASS() printf("ok %d %s/%d\n", tc_id+1, test.test_case_id, test.clock_id + 1)
|
||||
|
||||
dev->timezone[LIBX52_CLOCK_1] = test.offset_primary;
|
||||
rc = libx52_set_clock_timezone(dev, test.clock_id, test.offset_secondary);
|
||||
if (rc != LIBX52_SUCCESS) {
|
||||
|
@ -59,34 +52,9 @@ void run_test(int tc_id)
|
|||
return;
|
||||
}
|
||||
|
||||
rc = libx52_update(dev);
|
||||
if (rc != LIBX52_SUCCESS) {
|
||||
PRINT_FAIL();
|
||||
printf("# libx52_update failed, rc = %d\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
data[0].index = test.x52_clock;
|
||||
data[0].value = test.x52_offset;
|
||||
|
||||
if (!x52_test_assert_expected(dev, data)) {
|
||||
PRINT_FAIL();
|
||||
x52_test_print_diagnostics();
|
||||
x52_test_print_expected_data(data);
|
||||
x52_test_print_observed_data(dev);
|
||||
return;
|
||||
TEST_VERIFY(data);
|
||||
}
|
||||
|
||||
PRINT_PASS();
|
||||
x52_test_cleanup(dev);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("1..%ld\n", TC_COUNT);
|
||||
for (i = 0; i < TC_COUNT; i++) {
|
||||
run_test(i);
|
||||
}
|
||||
}
|
||||
TEST_MAIN();
|
||||
|
|
Loading…
Reference in New Issue