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"
21 struct afb_binding_v3 desc;
22 struct afb_api_x3 *api;
26 struct inapis inapis[] = {
31 .require_api = "armel"
41 .require_api = "albert armel"
45 .provide_class = "c a"
54 .require_api = "albert"
56 { .desc = { .api = NULL }}
61 int in_init(struct afb_api_x3 *api)
63 struct inapis *desc = api->userdata;
65 ck_assert_str_eq(api->apiname, desc->desc.api);
66 ck_assert_int_eq(desc->init, 0);
68 desc->init = ++last_in_init;
69 printf("init %d of %s\n", desc->init, api->apiname);
73 int in_preinit(void *closure, struct afb_api_x3 *api)
76 struct inapis *desc = closure;
78 printf("default preinit of %s\n", api->apiname);
80 ck_assert_ptr_nonnull(api);
81 ck_assert_ptr_nonnull(desc);
82 ck_assert_ptr_nonnull(api->apiname);
83 ck_assert_ptr_null(api->userdata);
84 ck_assert_str_eq(api->apiname, desc->desc.api);
85 ck_assert_ptr_null(desc->api);
86 ck_assert_int_eq(desc->init, 0);
88 rc = afb_api_v3_set_binding_fields(&desc->desc, api);
89 ck_assert_int_eq(rc, 0);
94 if (desc->desc.preinit)
95 desc->desc.preinit(api);
97 if (!desc->desc.init) {
98 rc = afb_api_x3_on_init(api, in_init);
99 ck_assert_int_eq(rc, 0);
105 int out_init(struct afb_api_x3 *api)
110 struct afb_apiset *apiset;
111 char out_apiname[] = "out";
112 struct afb_api_v3 *out_v3;
113 struct afb_api_x3 *out_api;
115 int out_preinit(void *closure, struct afb_api_x3 *api)
119 struct afb_api_x3 *napi;
121 ck_assert_ptr_nonnull(api);
122 ck_assert_ptr_eq(closure, out_apiname);
123 ck_assert_ptr_null(api->userdata);
124 ck_assert_str_eq(api->apiname, out_apiname);
127 for (i = 0 ; inapis[i].desc.api ; i++) {
128 ck_assert_ptr_null(inapis[i].api);
129 napi = afb_api_x3_new_api(
136 ck_assert_ptr_nonnull(napi);
137 ck_assert_ptr_nonnull(inapis[i].api);
138 ck_assert_ptr_eq(inapis[i].api, napi);
141 rc = afb_api_x3_on_init(api, out_init);
142 ck_assert_int_eq(rc, 0);
151 apiset = afb_apiset_create("test-apiv3", 1);
152 ck_assert_ptr_nonnull(apiset);
154 out_v3 = afb_api_v3_create(
164 ck_assert_ptr_nonnull(out_v3);
165 ck_assert_ptr_nonnull(out_api);
167 /* start all services */
168 rc = afb_apiset_start_all_services(apiset, 1);
169 ck_assert_int_eq(rc, 0);
174 /*********************************************************************/
179 void mksuite(const char *name) { suite = suite_create(name); }
180 void addtcase(const char *name) { tcase = tcase_create(name); suite_add_tcase(suite, tcase); }
181 void addtest(TFun fun) { tcase_add_test(tcase, fun); }
185 SRunner *srunner = srunner_create(suite);
186 srunner_run_all(srunner, CK_NORMAL);
187 nerr = srunner_ntests_failed(srunner);
188 srunner_free(srunner);
192 int main(int ac, char **av)