55 #include <sys/resource.h>
56 #include <sys/types.h>
71 #include <amxc/amxc.h>
72 #include <amxp/amxp_signal.h>
73 #include <amxd/amxd_dm.h>
74 #include <amxd/amxd_object.h>
75 #include <amxd/amxd_parameter.h>
80 #include <amxc/amxc_macros.h>
84 const char* odls[] = {
85 "%config { MyOption = [ 1, 2, 3 ]; }",
86 "%config { MyOption = [ \"1\", \"2\", \"3\" ]; }",
87 "%config { MyOption = [ word1, word2, word3 ]; }",
88 "%config { MyOption = [ true, false, true ]; }",
89 "%config { MyOption = [ ]; }",
96 for(
int i = 0; odls[i] != NULL; i++) {
97 amxc_var_t* option = NULL;
98 const amxc_llist_t* list = NULL;
102 assert_ptr_not_equal(option, NULL);
103 assert_int_equal(amxc_var_type_of(option), AMXC_VAR_ID_LIST);
104 list = amxc_var_constcast(amxc_llist_t, option);
105 assert_ptr_not_equal(list, NULL);
108 assert_int_equal(amxc_llist_size(list), 3);
109 amxc_llist_for_each(it, list) {
110 amxc_var_t* item = amxc_var_from_llist_it(it);
111 assert_int_equal(amxc_var_type_of(item), AMXC_VAR_ID_INT64);
116 assert_int_equal(amxc_llist_size(list), 3);
117 amxc_llist_for_each(it, list) {
118 amxc_var_t* item = amxc_var_from_llist_it(it);
119 assert_int_equal(amxc_var_type_of(item), AMXC_VAR_ID_CSTRING);
123 assert_int_equal(amxc_llist_size(list), 3);
124 amxc_llist_for_each(it, list) {
125 amxc_var_t* item = amxc_var_from_llist_it(it);
126 assert_int_equal(amxc_var_type_of(item), AMXC_VAR_ID_BOOL);
130 assert_true(amxc_llist_is_empty(list));
142 const char* odls[] = {
143 "%config { MyOption = { Key1 = 1, Key2 = 2, Key3 = 3 }; }",
144 "%config { MyOption = { Key1 = \"1\", Key2 = \"2\", Key3 = \"3\" }; }",
145 "%config { MyOption = { Key1 = word1, Key2 = word2, Key3 = word3 }; }",
146 "%config { MyOption = { Key1 = true, Key2 = false, Key3 = true }; }",
147 "%config { MyOption = { }; }",
148 "%config { MyOption = { \"'Test.Key1.'\" = 1, \"'Test.Key2.'\" = 2, \"'Test.Key3.'\" = 3 }; }",
155 for(
int i = 0; odls[i] != NULL; i++) {
156 amxc_var_t* option = NULL;
157 const amxc_htable_t* table = NULL;
158 printf(
"Parsing string %s\n", odls[i]);
162 assert_ptr_not_equal(option, NULL);
163 amxc_var_dump(option, STDOUT_FILENO);
164 assert_int_equal(amxc_var_type_of(option), AMXC_VAR_ID_HTABLE);
165 table = amxc_var_constcast(amxc_htable_t, option);
166 assert_ptr_not_equal(table, NULL);
170 assert_int_equal(amxc_htable_size(table), 3);
171 amxc_htable_for_each(it, table) {
172 amxc_var_t* item = amxc_var_from_htable_it(it);
173 assert_int_equal(amxc_var_type_of(item), AMXC_VAR_ID_INT64);
178 assert_int_equal(amxc_htable_size(table), 3);
179 amxc_htable_for_each(it, table) {
180 amxc_var_t* item = amxc_var_from_htable_it(it);
181 assert_int_equal(amxc_var_type_of(item), AMXC_VAR_ID_CSTRING);
185 assert_int_equal(amxc_htable_size(table), 3);
186 amxc_htable_for_each(it, table) {
187 amxc_var_t* item = amxc_var_from_htable_it(it);
188 assert_int_equal(amxc_var_type_of(item), AMXC_VAR_ID_BOOL);
192 assert_true(amxc_htable_is_empty(table));
204 amxc_var_t* setting = NULL;
205 const char* odls[] = {
206 "%config { Key1 = 1; Key2 = 2; Key3 = 3; } include \"global_config.odl\";",
215 amxc_var_dump(&parser.
config, STDOUT_FILENO);
218 assert_ptr_equal(setting, NULL);
219 assert_true(amxc_var_is_null(setting));
220 amxc_var_delete(&setting);
223 assert_ptr_not_equal(setting, NULL);
224 assert_false(amxc_var_is_null(setting));
225 amxc_var_dump(setting, STDOUT_FILENO);
226 assert_int_equal(amxc_var_dyncast(uint32_t, setting), 1);
229 assert_ptr_not_equal(setting, NULL);
230 assert_false(amxc_var_is_null(setting));
231 assert_string_equal(amxc_var_constcast(cstring_t, setting),
"global test");
240 amxc_var_t* setting = NULL;
241 const char* odls[] = {
242 "%config { MyOption.SubOption.Test = \"Hallo\"; MyOption.SubOption.Value = 1; }",
251 amxc_var_dump(&parser.
config, STDOUT_FILENO);
254 assert_non_null(setting);
255 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_HTABLE);
258 assert_non_null(setting);
259 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_HTABLE);
262 assert_non_null(setting);
263 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_CSTRING);
266 assert_non_null(setting);
267 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_INT64);
276 amxc_var_t* setting = NULL;
277 const char* odls[] = {
278 "%config { MyOption = { SubOption.Test = \"Hallo\", SubOption.Value = 1 }; }",
287 amxc_var_dump(&parser.
config, STDOUT_FILENO);
290 assert_non_null(setting);
291 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_HTABLE);
294 assert_non_null(setting);
295 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_HTABLE);
298 assert_non_null(setting);
299 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_CSTRING);
302 assert_non_null(setting);
303 assert_int_equal(amxc_var_type_of(setting), AMXC_VAR_ID_INT64);
Ambiorix ODL parser header file.
amxc_var_t * amxo_parser_get_config(amxo_parser_t *parser, const char *path)
Gets a configuration option.
int amxo_parser_parse_string(amxo_parser_t *parser, const char *text, amxd_object_t *object)
Parses a string containing a valid ODL part.
void amxo_parser_clean(amxo_parser_t *parser)
Cleans up the odl parser instance.
static amxd_status_t amxo_parser_get_status(amxo_parser_t *parser)
Get the status of the odl parser.
int amxo_parser_init(amxo_parser_t *parser)
Initializes a new odl parser instance.
The ODL parser structure.
void test_can_set_configuration_using_path(UNUSED void **state)
void test_parsing_key_value_pairs(UNUSED void **state)
void test_can_set_configuration_data_using_path(UNUSED void **state)
void test_global_setting_are_made_available_in_main_odl(UNUSED void **state)
void test_parsing_array(UNUSED void **state)