9 #if !defined(ck_assert_ptr_null)
10 # define ck_assert_ptr_null(X) ck_assert_ptr_eq(X, NULL)
11 # define ck_assert_ptr_nonnull(X) ck_assert_ptr_ne(X, NULL)
14 #define AFB_BINDING_VERSION 0
15 #include <afb/afb-binding.h>
17 #include "afb-apiset.h"
18 #include "afb-api-v3.h"
22 struct afb_binding_v3 desc;
23 struct afb_api_x3 *api;
27 struct inapis inapis[] = {
32 .require_api = "armel"
42 .require_api = "albert armel"
46 .provide_class = "c a"
55 .require_api = "albert"
57 { .desc = { .api = NULL }}
62 int in_init(struct afb_api_x3 *api)
64 struct inapis *desc = api->userdata;
66 ck_assert_str_eq(api->apiname, desc->desc.api);
67 ck_assert_int_eq(desc->init, 0);
69 desc->init = ++last_in_init;
70 printf("init %d of %s\n", desc->init, api->apiname);
74 int in_preinit(void *closure, struct afb_api_x3 *api)
77 struct inapis *desc = closure;
79 printf("default preinit of %s\n", api->apiname);
81 ck_assert_ptr_nonnull(api);
82 ck_assert_ptr_nonnull(desc);
83 ck_assert_ptr_nonnull(api->apiname);
84 ck_assert_ptr_null(api->userdata);
85 ck_assert_str_eq(api->apiname, desc->desc.api);
86 ck_assert_ptr_null(desc->api);
87 ck_assert_int_eq(desc->init, 0);
89 rc = afb_api_v3_set_binding_fields(&desc->desc, api);
90 ck_assert_int_eq(rc, 0);
95 if (desc->desc.preinit)
96 desc->desc.preinit(api);
98 if (!desc->desc.init) {
99 rc = afb_api_x3_on_init(api, in_init);
100 ck_assert_int_eq(rc, 0);
106 int out_init(struct afb_api_x3 *api)
111 struct afb_apiset *apiset;
112 char out_apiname[] = "out";
113 struct afb_api_v3 *out_v3;
114 struct afb_api_x3 *out_api;
116 int out_preinit(void *closure, struct afb_api_x3 *api)
120 struct afb_api_x3 *napi;
122 ck_assert_ptr_nonnull(api);
123 ck_assert_ptr_eq(closure, out_apiname);
124 ck_assert_ptr_null(api->userdata);
125 ck_assert_str_eq(api->apiname, out_apiname);
128 for (i = 0 ; inapis[i].desc.api ; i++) {
129 ck_assert_ptr_null(inapis[i].api);
130 napi = afb_api_x3_new_api(
137 ck_assert_ptr_nonnull(napi);
138 ck_assert_ptr_nonnull(inapis[i].api);
139 ck_assert_ptr_eq(inapis[i].api, napi);
142 rc = afb_api_x3_on_init(api, out_init);
143 ck_assert_int_eq(rc, 0);
153 apiset = afb_apiset_create("test-apiv3", 1);
154 ck_assert_ptr_nonnull(apiset);
156 out_v3 = afb_api_v3_create(
167 ck_assert_ptr_nonnull(out_v3);
168 ck_assert_ptr_nonnull(out_api);
170 /* start all services */
171 rc = afb_apiset_start_all_services(apiset);
172 ck_assert_int_eq(rc, 0);
177 /*********************************************************************/
182 void mksuite(const char *name) { suite = suite_create(name); }
183 void addtcase(const char *name) { tcase = tcase_create(name); suite_add_tcase(suite, tcase); }
184 void addtest(TFun fun) { tcase_add_test(tcase, fun); }
188 SRunner *srunner = srunner_create(suite);
189 srunner_run_all(srunner, CK_NORMAL);
190 nerr = srunner_ntests_failed(srunner);
191 srunner_free(srunner);
195 int main(int ac, char **av)