sbus_codegen_tests.c revision 01f852fcb27e0a0a07e2b8b51e7e838a256b485f
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen sbus_codegen tests.
252db51b6c0a605163326b3ea5d09e9936ca3b29Timo Sirainen Stef Walter <stefw@redhat.com>
9511a40d933181045343110c8101b75887062aaeTimo Sirainen Copyright (C) Red Hat, Inc 2014
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen This program is free software; you can redistribute it and/or modify
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen it under the terms of the GNU General Public License as published by
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen the Free Software Foundation; either version 3 of the License, or
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen (at your option) any later version.
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen This program is distributed in the hope that it will be useful,
f30d2b798191d94f845463637610d6b833162d9bTimo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
f30d2b798191d94f845463637610d6b833162d9bTimo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f30d2b798191d94f845463637610d6b833162d9bTimo Sirainen GNU General Public License for more details.
56db132c6523e8c28e8bd97e36f0ec7056e4ce7bTimo Sirainen You should have received a copy of the GNU General Public License
f30d2b798191d94f845463637610d6b833162d9bTimo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
1de2b5a16a455e018d8cbf72ee114d4b5d557a48Timo Sirainen#include "tests/sbus_codegen_tests_generated.h"
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen/* The following 2 macros were taken from check's project source files (0.9.10)
601f5f14c6cde28f0e0c6ca7c5d735315d3d48dfTimo Sirainen ck_assert_msg(_ck_x OP _ck_y, "Assertion '"#X#OP#Y"' failed: "#X"==%ju, "#Y"==%ju", _ck_x, _ck_y); \
859cc94211b759825db5e15b0c88754da902ca14Timo Sirainen#endif /* _ck_assert_uint */
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen#define ck_assert_uint_eq(X, Y) _ck_assert_uint(X, ==, Y)
1de2b5a16a455e018d8cbf72ee114d4b5d557a48Timo Sirainen#endif /* ck_assert_uint_eq */
1de2b5a16a455e018d8cbf72ee114d4b5d557a48Timo Sirainenstatic const struct sbus_arg_meta *
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen ck_assert_str_eq(com_planetexpress_Ship_meta.name, "com.planetexpress.Ship");
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen ck_assert(com_planetexpress_Ship_meta.methods != NULL);
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen ck_assert(com_planetexpress_Ship_meta.signals != NULL);
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen ck_assert(com_planetexpress_Ship_meta.properties != NULL);
1117aa7adc2909c750031fd7551a58a486d100d8Timo Sirainen /* Explicit C Symbol */
1117aa7adc2909c750031fd7551a58a486d100d8Timo Sirainen ck_assert_str_eq(test_pilot_meta.name, "com.planetexpress.Pilot");
1117aa7adc2909c750031fd7551a58a486d100d8Timo Sirainen ck_assert(test_pilot_meta.signals == NULL); /* no signals */
e50c7afe297ab10e07a8acc816c76ce9d45ef409Timo Sirainen ck_assert(test_pilot_meta.properties != NULL);
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen method = sbus_meta_find_method(&com_planetexpress_Ship_meta, "MoveUniverse");
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen ck_assert_str_eq(method->name, "MoveUniverse");
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen arg = find_arg(method->out_args, "where_we_crashed");
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen ck_assert_str_eq(arg->name, "where_we_crashed");
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainen prop = sbus_meta_find_property(&com_planetexpress_Ship_meta, "Color");
07e4875d250e7a7157cd99132aafc773cf3cdf83Timo Sirainen ck_assert_int_eq(prop->flags, SBUS_PROPERTY_READABLE);
4b9f99761df5014c659cd87fddaf6854af428cfcTimo Sirainen sig = sbus_meta_find_signal(&com_planetexpress_Ship_meta, "BecameSentient");
4b9f99761df5014c659cd87fddaf6854af428cfcTimo Sirainen ck_assert_str_eq(sig->name, "BecameSentient");
4b9f99761df5014c659cd87fddaf6854af428cfcTimo Sirainenmock_move_universe(struct sbus_request *dbus_req, void *data,
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen * The above arguments should match the handler signature,
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen * and the below finish function should have the right signature.
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen * Not called, just testing compilation
597dba3488c648ffb375ee4a552bd52ac4346979Timo Sirainen return com_planetexpress_Ship_MoveUniverse_finish(dbus_req, "here");
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainenmock_crash_now(struct sbus_request *dbus_req, void *data,
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen * One argument, no return value, yet a finish function should
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen * have been generated.
dd62b77c932d1b518f2a3e4bf80e36542becc256Timo Sirainen * Not called, just testing compilation
9511a40d933181045343110c8101b75887062aaeTimo Sirainen return com_planetexpress_Ship_crash_now_finish(dbus_req);
{ &com_planetexpress_Ship_meta, 0 },
NULL,
/* constants for com.planetexpress.Pilot */
return tc;
arg_byte++;
arg_int16++;
arg_uint16++;
arg_int32++;
arg_uint32++;
arg_int64++;
arg_uint64++;
arg_double++;
for (i = 0; i < len_byte_array; i++)
arg_byte_array[i]++;
for (i = 0; i < len_int16_array; i++)
arg_int16_array[i]++;
for (i = 0; i < len_uint16_array; i++)
arg_uint16_array[i]++;
for (i = 0; i < len_int32_array; i++)
arg_int32_array[i]++;
for (i = 0; i < len_uint32_array; i++)
arg_uint32_array[i]++;
for (i = 0; i < len_int64_array; i++)
arg_int64_array[i]++;
for (i = 0; i < len_uint64_array; i++)
arg_uint64_array[i]++;
for (i = 0; i < len_double_array; i++)
arg_double_array[i]++;
for (i = 0; i < len_double_array; i++) {
arg_object_path_array = talloc_memdup(req, arg_object_path_array, sizeof(char *) * len_object_path_array);
for (i = 0; i < len_object_path_array; i++) {
static const bool pilot_bool = true;
void *instance_data,
bool *val)
void *instance_data,
const char **name)
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
double *double_val)
void *instance_data,
const char **string_val)
void *instance_data,
const char **path_val)
void *instance_data,
const char **string_val)
void *instance_data,
const char **path_val)
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *instance_data,
void *data,
const char ***arr_out,
int *arr_len)
void *data,
const char ***arr_out,
int *arr_len)
void *data,
char **values;
int hret;
{ &test_pilot_meta, 0 },
{ &test_special_meta, 0},
int ret;
return EOK;
int ret;
return EOK;
&error,
const char *object_path,
const char *iface,
const char *prop,
int type,
void *val)
&error,
const char *string_val;
const char *path_val;
double double_val;
const char **strings;
*nels = n;
const char *object_path,
const char *iface,
const char *prop,
int type,
void **values,
int *nels)
&error,
const char **string_arr_val;
int string_arr_len;
const char **path_arr_val;
int path_arr_len;
int byte_arr_len;
int int16_arr_len;
int uint16_arr_len;
int int32_arr_len;
int uint32_arr_len;
int int64_arr_len;
int uint64_arr_len;
double *double_arr_val;
int double_arr_len;
const char *value;
&error,
struct prop_test {
const char *name;
bool handled;
int length;
int type;
union prop_value {
bool bool_val;
const char *string_val;
const char *path_val;
double double_val;
const char **string_arr_val;
const char **path_arr_val;
double *double_arr_val;
} value;
const char *string_val;
const char *path_val;
double double_val;
int type;
switch (p->type) {
case DBUS_TYPE_BOOLEAN:
case DBUS_TYPE_STRING:
case DBUS_TYPE_BYTE:
case DBUS_TYPE_INT16:
case DBUS_TYPE_UINT16:
case DBUS_TYPE_INT32:
case DBUS_TYPE_UINT32:
case DBUS_TYPE_INT64:
case DBUS_TYPE_UINT64:
case DBUS_TYPE_DOUBLE:
case DBUS_TYPE_OBJECT_PATH:
p->handled = true;
double *double_arr_val;
int len;
int type;
len = n;
switch (p->type) {
case DBUS_TYPE_STRING:
case DBUS_TYPE_BYTE:
case DBUS_TYPE_INT16:
case DBUS_TYPE_UINT16:
case DBUS_TYPE_INT32:
case DBUS_TYPE_UINT32:
case DBUS_TYPE_INT64:
case DBUS_TYPE_UINT64:
case DBUS_TYPE_DOUBLE:
case DBUS_TYPE_OBJECT_PATH:
p->handled = true;
char *attr_name;
int num_prop;
{ "byte_array", false, N_ELEMENTS(pilot_byte_array), DBUS_TYPE_BYTE, { .byte_arr_val = pilot_byte_array } },
{ "int16_array", false, N_ELEMENTS(pilot_int16_array), DBUS_TYPE_INT16, { .int16_arr_val = pilot_int16_array } },
{ "uint16_array", false, N_ELEMENTS(pilot_uint16_array), DBUS_TYPE_UINT16, { .uint16_arr_val = pilot_uint16_array } },
{ "int32_array", false, N_ELEMENTS(pilot_int32_array), DBUS_TYPE_INT32, { .int32_arr_val = pilot_int32_array } },
{ "uint32_array", false, N_ELEMENTS(pilot_uint32_array), DBUS_TYPE_UINT32, { .uint32_arr_val = pilot_uint32_array } },
{ "int64_array", false, N_ELEMENTS(pilot_int64_array), DBUS_TYPE_INT64, { .int64_arr_val = pilot_int64_array } },
{ "uint64_array", false, N_ELEMENTS(pilot_uint64_array), DBUS_TYPE_UINT64, { .uint64_arr_val = pilot_uint64_array } },
{ "double_array", false, N_ELEMENTS(pilot_double_array), DBUS_TYPE_DOUBLE, { .double_arr_val = pilot_double_array } },
{ "string_array", false, N_ELEMENTS(pilot_string_array), DBUS_TYPE_STRING, { .string_arr_val = pilot_string_array } },
{ "object_path_array", false, N_ELEMENTS(pilot_path_array), DBUS_TYPE_OBJECT_PATH, { .path_arr_val = pilot_path_array } },
&error,
num_prop = 0;
num_prop++;
return tc;
int opt;
int failure_count;
switch (opt) {