libamxd  6.4.1
Data Model Manager
test_amxd_object_search.c File Reference
#include <stdlib.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <cmocka.h>
#include <sys/signalfd.h>
#include <string.h>
#include <stdio.h>
#include <amxc/amxc.h>
#include <amxp/amxp_signal.h>
#include <amxp/amxp_slot.h>
#include <amxp/amxp_expression.h>
#include <amxd/amxd_common.h>
#include <amxd/amxd_transaction.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_object_expression.h>
#include "test_amxd_object_search.h"
#include <amxc/amxc_macros.h>

Go to the source code of this file.

Functions

static void test_build_dm (void)
 
int test_object_search_setup (UNUSED void **state)
 
int test_object_search_teardown (UNUSED void **state)
 
void test_can_search (UNUSED void **state)
 
void test_can_use_sub_object_in_expression (UNUSED void **state)
 
void test_search_fails_with_invalid_expression (UNUSED void **state)
 
void test_search_fails_with_wildcard_or_expression_on_wrong_object (UNUSED void **state)
 
void test_search_fails_with_empty_expression (UNUSED void **state)
 
void test_search_list_is_empty_when_no_objects_found (UNUSED void **state)
 
void test_search_fails_with_invalid_path_syntax (UNUSED void **state)
 
void test_can_search_on_objects_not_in_dm (UNUSED void **state)
 

Variables

static amxd_dm_t dm
 

Function Documentation

◆ test_build_dm()

static void test_build_dm ( void  )
static

Definition at line 85 of file test_amxd_object_search.c.

85  {
86  amxd_object_t* object = NULL;
87  amxd_object_t* child_object = NULL;
88  amxd_param_t* param = NULL;
89  amxd_trans_t transaction;
90 
91  assert_int_equal(amxd_dm_init(&dm), 0);
92 
93  assert_int_equal(amxd_object_new(&object, amxd_object_singleton, "RootObject"), 0);
94  assert_int_equal(amxd_dm_add_root_object(&dm, object), 0);
95 
96  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "TemplateObject"), 0);
97  assert_int_equal(amxd_object_add_object(object, child_object), 0);
98 
99  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
100  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
101  assert_int_equal(amxd_object_add_param(child_object, param), 0);
102  assert_int_equal(amxd_param_new(&param, "Param2", AMXC_VAR_ID_BOOL), 0);
103  assert_int_equal(amxd_object_add_param(child_object, param), 0);
104  assert_int_equal(amxd_param_new(&param, "Param3", AMXC_VAR_ID_UINT32), 0);
105  assert_int_equal(amxd_object_add_param(child_object, param), 0);
106  assert_int_equal(amxd_param_new(&param, "Alias", AMXC_VAR_ID_CSTRING), 0);
107  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
108  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_unique, true), 0);
109  assert_int_equal(amxd_object_add_param(child_object, param), 0);
110 
111  assert_int_equal(amxd_object_new(&object, amxd_object_singleton, "ChildObject"), 0);
112  assert_int_equal(amxd_object_add_object(child_object, object), 0);
113  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
114  assert_int_equal(amxd_object_add_param(object, param), 0);
115  assert_int_equal(amxd_param_new(&param, "Param3", AMXC_VAR_ID_UINT32), 0);
116  assert_int_equal(amxd_object_add_param(object, param), 0);
117 
118  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "TemplateObject"), 0);
119  assert_int_equal(amxd_object_add_object(object, child_object), 0);
120  assert_int_equal(amxd_param_new(&param, "Alias", AMXC_VAR_ID_CSTRING), 0);
121  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
122  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_unique, true), 0);
123  assert_int_equal(amxd_object_add_param(child_object, param), 0);
124 
125  amxd_trans_init(&transaction);
126  amxd_trans_select_pathf(&transaction, "RootObject.TemplateObject");
127  amxd_trans_add_inst(&transaction, 0, NULL);
128  amxd_trans_set_value(cstring_t, &transaction, "Param1", "test1");
129  amxd_trans_set_value(uint32_t, &transaction, "Param3", 100);
130  amxd_trans_select_pathf(&transaction, ".ChildObject");
131  amxd_trans_set_value(cstring_t, &transaction, "Param1", "sub-test1");
132  amxd_trans_set_value(uint32_t, &transaction, "Param3", 200);
133 
134  amxd_trans_select_pathf(&transaction, ".^.^");
135  amxd_trans_add_inst(&transaction, 0, NULL);
136  amxd_trans_set_value(cstring_t, &transaction, "Param1", "test2");
137  amxd_trans_set_value(uint32_t, &transaction, "Param3", 110);
138  amxd_trans_select_pathf(&transaction, ".ChildObject");
139  amxd_trans_set_value(cstring_t, &transaction, "Param1", "sub-test2");
140  amxd_trans_set_value(uint32_t, &transaction, "Param3", 210);
141  amxd_trans_select_pathf(&transaction, ".TemplateObject");
142  amxd_trans_add_inst(&transaction, 0, "SubAlias");
143 
144  amxd_trans_select_pathf(&transaction, ".^.^.^.^");
145  amxd_trans_add_inst(&transaction, 0, NULL);
146  amxd_trans_set_value(cstring_t, &transaction, "Param1", "test3");
147  amxd_trans_set_value(uint32_t, &transaction, "Param3", 120);
148  amxd_trans_select_pathf(&transaction, ".ChildObject");
149  amxd_trans_set_value(cstring_t, &transaction, "Param1", "sub-test3");
150  amxd_trans_set_value(uint32_t, &transaction, "Param3", 220);
151 
152  amxd_trans_select_pathf(&transaction, ".^.^");
153  amxd_trans_add_inst(&transaction, 0, NULL);
154  amxd_trans_set_value(cstring_t, &transaction, "Param1", "test4");
155  amxd_trans_set_value(uint32_t, &transaction, "Param3", 130);
156  amxd_trans_select_pathf(&transaction, ".ChildObject");
157  amxd_trans_set_value(cstring_t, &transaction, "Param1", "sub-test4");
158  amxd_trans_set_value(uint32_t, &transaction, "Param3", 230);
159  amxd_trans_select_pathf(&transaction, ".TemplateObject");
160  amxd_trans_add_inst(&transaction, 0, "SubAlias");
161 
162  amxd_trans_select_pathf(&transaction, ".^.^.^.^");
163  amxd_trans_add_inst(&transaction, 0, "Alias5");
164  amxd_trans_set_value(cstring_t, &transaction, "Param1", "test5");
165  amxd_trans_set_value(uint32_t, &transaction, "Param3", 140);
166  amxd_trans_select_pathf(&transaction, ".ChildObject");
167  amxd_trans_set_value(cstring_t, &transaction, "Param1", "sub-test5");
168  amxd_trans_set_value(uint32_t, &transaction, "Param3", 240);
169  amxd_trans_select_pathf(&transaction, ".TemplateObject");
170  amxd_trans_add_inst(&transaction, 0, "SubAlias2");
171 
172  assert_int_equal(amxd_trans_apply(&transaction, &dm), 0);
173  amxd_trans_clean(&transaction);
174 }
amxd_status_t amxd_param_new(amxd_param_t **param, const char *name, const uint32_t type)
amxd_status_t amxd_param_set_attr(amxd_param_t *param, const amxd_pattr_id_t attr, const bool enable)
@ amxd_pattr_unique
Definition: amxd_types.h:363
@ amxd_pattr_key
Definition: amxd_types.h:362
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_singleton
Definition: amxd_types.h:181
amxd_status_t amxd_dm_add_root_object(amxd_dm_t *const dm, amxd_object_t *const object)
Adds an object to the root of the data model.
Definition: amxd_dm.c:418
amxd_status_t amxd_dm_init(amxd_dm_t *dm)
Initializes a data model structure.
Definition: amxd_dm.c:334
amxd_status_t amxd_object_add_object(amxd_object_t *const parent, amxd_object_t *const child)
Adds an object in the data model tree.
Definition: amxd_object.c:207
amxd_status_t amxd_object_add_param(amxd_object_t *const object, amxd_param_t *const param)
Adds a parameter definition to an object.
amxd_status_t amxd_object_new(amxd_object_t **object, const amxd_object_type_t type, const char *name)
Data model object constructor function.
Definition: amxd_object.c:185
void amxd_trans_clean(amxd_trans_t *const trans)
Cleans the transaction object.
amxd_status_t amxd_trans_apply(amxd_trans_t *const trans, amxd_dm_t *const dm)
Applies all previously added actions.
#define amxd_trans_set_value(type, trans, name, value)
Helper macro for setting a value.
amxd_status_t amxd_trans_add_inst(amxd_trans_t *const trans, const uint32_t index, const char *name)
Adds an instance add action to a transaction.
amxd_status_t amxd_trans_select_pathf(amxd_trans_t *const trans, const char *path,...) __attribute__((format(printf
Selects an object using a absolute or relative path.
amxd_status_t amxd_trans_init(amxd_trans_t *const trans)
Initializes a transaction object.
static amxd_dm_t dm

◆ test_can_search()

void test_can_search ( UNUSED void **  state)

Definition at line 187 of file test_amxd_object_search.c.

187  {
188  amxc_llist_t paths;
189  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
190  amxd_object_t* inst_obj = NULL;
191  amxc_llist_init(&paths);
192 
193  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.1"), 0);
194  assert_int_equal(amxc_llist_size(&paths), 1);
195  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.");
196  amxc_llist_clean(&paths, amxc_string_list_it_free);
197 
198  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[1]"), 0);
199  assert_int_equal(amxc_llist_size(&paths), 1);
200  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.");
201  amxc_llist_clean(&paths, amxc_string_list_it_free);
202 
203  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.cpe-TemplateObject-1."), 0);
204  assert_int_equal(amxc_llist_size(&paths), 1);
205  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.");
206  amxc_llist_clean(&paths, amxc_string_list_it_free);
207 
208  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[cpe-TemplateObject-2]"), 0);
209  assert_int_equal(amxc_llist_size(&paths), 1);
210  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.2.");
211  amxc_llist_clean(&paths, amxc_string_list_it_free);
212 
213  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[Param1=='test1']."), 0);
214  assert_int_equal(amxc_llist_size(&paths), 1);
215  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.");
216  amxc_llist_clean(&paths, amxc_string_list_it_free);
217 
218  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[Param3>120]"), 0);
219  assert_int_equal(amxc_llist_size(&paths), 2);
220  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.4.");
221  amxc_llist_clean(&paths, amxc_string_list_it_free);
222 
223  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.*"), 0);
224  assert_int_equal(amxc_llist_size(&paths), 5);
225  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.");
226  amxc_llist_clean(&paths, amxc_string_list_it_free);
227 
228  inst_obj = amxd_dm_findf(&dm, "RootObject.TemplateObject.1.");
229  assert_non_null(inst_obj);
230  assert_int_equal(amxd_object_resolve_pathf(inst_obj, &paths, "^.[Param3>100]."), 0);
231  assert_int_equal(amxc_llist_size(&paths), 4);
232  amxc_llist_clean(&paths, amxc_string_list_it_free);
233 
234  inst_obj = amxd_dm_findf(&dm, "RootObject.");
235  assert_non_null(inst_obj);
236 
237  inst_obj = amxd_dm_get_object(&dm, "RootObject.");
238  assert_non_null(inst_obj);
239 
240  inst_obj = amxd_dm_findf(&dm, "RootObject.TemplateObject.1.ChildObject.");
241  assert_non_null(inst_obj);
242  assert_int_equal(amxd_object_resolve_pathf(inst_obj, &paths, "^.^.[Param3>110]."), 0);
243  assert_int_equal(amxc_llist_size(&paths), 3);
244  amxc_llist_clean(&paths, amxc_string_list_it_free);
245 }
amxd_object_t * amxd_dm_findf(amxd_dm_t *const dm, const char *abs_path,...) __attribute__((format(printf
amxd_object_t * amxd_dm_get_object(amxd_dm_t *const dm, const char *name)
Definition: amxd_dm.c:466
amxd_object_t * amxd_dm_get_root(amxd_dm_t *const dm)
Fetches the root object of the data model.
Definition: amxd_dm.c:456
amxd_object_t amxd_status_t amxd_object_resolve_pathf(amxd_object_t *object, amxc_llist_t *paths, const char *rel_path,...) __attribute__((format(printf
Resolves a search path into a list of matching object paths.

◆ test_can_search_on_objects_not_in_dm()

void test_can_search_on_objects_not_in_dm ( UNUSED void **  state)

Definition at line 382 of file test_amxd_object_search.c.

382  {
383  amxc_llist_t paths;
384  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
385  amxd_object_t* obj = amxd_object_get_child(root_obj, "RootObject");
386  amxc_llist_init(&paths);
387 
388  amxc_llist_it_take(&obj->it);
389  assert_ptr_equal(amxd_object_get_dm(obj), NULL);
390 
391  assert_int_equal(amxd_object_resolve_pathf(obj, &paths, "TemplateObject.*.ChildObject.TemplateObject.[Alias=='SubAlias']"), 0);
392  assert_int_equal(amxc_llist_size(&paths), 2);
393  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.2.ChildObject.TemplateObject.1.");
394  amxc_llist_clean(&paths, amxc_string_list_it_free);
395 
396  assert_non_null(amxd_object_findf(obj, "TemplateObject.[Param1=='test2'].ChildObject.TemplateObject.[Alias=='SubAlias']"));
397 
398  assert_int_equal(amxd_dm_add_root_object(&dm, obj), 0);
399  assert_ptr_not_equal(amxd_object_get_dm(obj), NULL);
400 }
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_object_t * amxd_object_findf(amxd_object_t *object, const char *rel_path,...) __attribute__((format(printf
Find an object in the data model tree, starting from an object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxc_llist_it_t it
Definition: amxd_types.h:230

◆ test_can_use_sub_object_in_expression()

void test_can_use_sub_object_in_expression ( UNUSED void **  state)

Definition at line 247 of file test_amxd_object_search.c.

247  {
248  amxc_llist_t paths;
249  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
250  bool key_path = false;
251  amxc_llist_init(&paths);
252 
253  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[ChildObject.Param1=='sub-test1']"), 0);
254  assert_int_equal(amxc_llist_size(&paths), 1);
255  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.");
256  amxc_llist_clean(&paths, amxc_string_list_it_free);
257 
258  assert_int_equal(amxd_dm_resolve_pathf(&dm, &paths, "RootObject.TemplateObject.[ChildObject.Param3>220]"), 0);
259  assert_int_equal(amxc_llist_size(&paths), 2);
260  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.4.");
261  amxc_llist_clean(&paths, amxc_string_list_it_free);
262 
263  assert_int_equal(amxd_dm_resolve_pathf_ext(&dm, &key_path, &paths, "RootObject.TemplateObject.[ChildObject.Param3>220]"), 0);
264  assert_int_equal(amxc_llist_size(&paths), 2);
265  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.4.");
266  amxc_llist_clean(&paths, amxc_string_list_it_free);
267 
268  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.*.ChildObject."), 0);
269  assert_int_equal(amxc_llist_size(&paths), 5);
270  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.ChildObject.");
271  amxc_llist_clean(&paths, amxc_string_list_it_free);
272 
273  assert_int_equal(amxd_object_resolve_pathf_ext(root_obj, &key_path, &paths, "RootObject.TemplateObject.*.ChildObject."), 0);
274  assert_int_equal(amxc_llist_size(&paths), 5);
275  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.1.ChildObject.");
276  amxc_llist_clean(&paths, amxc_string_list_it_free);
277 
278  assert_int_equal(amxd_dm_resolve_pathf(&dm, &paths, "RootObject.TemplateObject.*.ChildObject.TemplateObject.[Alias=='SubAlias']"), 0);
279  assert_int_equal(amxc_llist_size(&paths), 2);
280  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.2.ChildObject.TemplateObject.1.");
281  amxc_llist_clean(&paths, amxc_string_list_it_free);
282 
283  assert_int_equal(amxd_dm_resolve_pathf_ext(&dm, &key_path, &paths, "RootObject.TemplateObject.*.ChildObject.TemplateObject.[Alias=='SubAlias']"), 0);
284  assert_int_equal(amxc_llist_size(&paths), 2);
285  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.2.ChildObject.TemplateObject.1.");
286  amxc_llist_clean(&paths, amxc_string_list_it_free);
287 
288  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.Alias5.ChildObject.TemplateObject.[SubAlias2]"), 0);
289  assert_int_equal(amxc_llist_size(&paths), 1);
290  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.5.ChildObject.TemplateObject.1.");
291  amxc_llist_clean(&paths, amxc_string_list_it_free);
292 
293  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[5].ChildObject.TemplateObject.[SubAlias2]"), 0);
294  assert_int_equal(amxc_llist_size(&paths), 1);
295  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.5.ChildObject.TemplateObject.1.");
296  amxc_llist_clean(&paths, amxc_string_list_it_free);
297 
298  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[ChildObject.Param3 == 240].ChildObject.TemplateObject.*"), 0);
299  assert_int_equal(amxc_llist_size(&paths), 1);
300  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.TemplateObject.5.ChildObject.TemplateObject.1.");
301  amxc_llist_clean(&paths, amxc_string_list_it_free);
302 
303  root_obj = amxd_dm_findf(&dm, "RootObject");
304  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "."), 0);
305  assert_int_equal(amxc_llist_size(&paths), 1);
306  assert_string_equal(amxc_string_get(amxc_string_from_llist_it(amxc_llist_get_first(&paths)), 0), "RootObject.");
307  amxc_llist_clean(&paths, amxc_string_list_it_free);
308 
309  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "%s", ""), 0);
310  assert_int_equal(amxc_llist_size(&paths), 1);
311  amxc_llist_clean(&paths, amxc_string_list_it_free);
312 }
amxd_object_t amxd_status_t amxd_status_t amxd_dm_resolve_pathf_ext(amxd_dm_t *const dm, bool *key_path, amxc_llist_t *paths, const char *abs_path,...) __attribute__((format(printf
amxd_object_t amxd_status_t amxd_dm_resolve_pathf(amxd_dm_t *const dm, amxc_llist_t *paths, const char *abs_path,...) __attribute__((format(printf
amxd_object_t amxd_status_t amxd_status_t amxd_object_resolve_pathf_ext(amxd_object_t *object, bool *key_path, amxc_llist_t *paths, const char *rel_path,...) __attribute__((format(printf
Resolves a search path into a list of matching object paths.

◆ test_object_search_setup()

int test_object_search_setup ( UNUSED void **  state)

Definition at line 176 of file test_amxd_object_search.c.

176  {
177  test_build_dm();
178  return 0;
179 }
static void test_build_dm(void)

◆ test_object_search_teardown()

int test_object_search_teardown ( UNUSED void **  state)

Definition at line 181 of file test_amxd_object_search.c.

181  {
182  amxd_dm_clean(&dm);
183 
184  return 0;
185 }
void amxd_dm_clean(amxd_dm_t *dm)
Cleans a data model structure.
Definition: amxd_dm.c:365

◆ test_search_fails_with_empty_expression()

void test_search_fails_with_empty_expression ( UNUSED void **  state)

Definition at line 340 of file test_amxd_object_search.c.

340  {
341  amxc_llist_t paths;
342  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
343  amxc_llist_init(&paths);
344 
345  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[]."), 0);
346  assert_int_equal(amxc_llist_size(&paths), 0);
347 }

◆ test_search_fails_with_invalid_expression()

void test_search_fails_with_invalid_expression ( UNUSED void **  state)

Definition at line 314 of file test_amxd_object_search.c.

314  {
315  amxc_llist_t paths;
316  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
317  amxc_llist_init(&paths);
318 
319  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[ChildObject.Param3!>220]"), 0);
320  assert_int_equal(amxc_llist_size(&paths), 0);
321 }

◆ test_search_fails_with_invalid_path_syntax()

void test_search_fails_with_invalid_path_syntax ( UNUSED void **  state)

Definition at line 364 of file test_amxd_object_search.c.

364  {
365  amxc_llist_t paths;
366  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
367  amxc_llist_init(&paths);
368 
369  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.Param3>100].ChildObject"), 0);
370  assert_int_equal(amxc_llist_size(&paths), 0);
371 
372  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[Param3>100.ChildObject"), 0);
373  assert_int_equal(amxc_llist_size(&paths), 0);
374 
375  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.\"Param3>100\".ChildObject"), 0);
376  assert_int_equal(amxc_llist_size(&paths), 0);
377 
378  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.`Param3>100\".ChildObject"), 0);
379  assert_int_equal(amxc_llist_size(&paths), 0);
380 }

◆ test_search_fails_with_wildcard_or_expression_on_wrong_object()

void test_search_fails_with_wildcard_or_expression_on_wrong_object ( UNUSED void **  state)

Definition at line 323 of file test_amxd_object_search.c.

323  {
324  amxc_llist_t paths;
325  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
326  amxc_llist_init(&paths);
327 
328  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.*.[Param3>200]"), 0);
329  assert_int_equal(amxc_llist_size(&paths), 0);
330  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.*.*"), 0);
331  assert_int_equal(amxc_llist_size(&paths), 0);
332  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.*"), 0);
333  assert_int_equal(amxc_llist_size(&paths), 0);
334  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.[Param3>300]"), 0);
335  assert_int_equal(amxc_llist_size(&paths), 0);
336  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "."), 0);
337  assert_int_equal(amxc_llist_size(&paths), 0);
338 }

◆ test_search_list_is_empty_when_no_objects_found()

void test_search_list_is_empty_when_no_objects_found ( UNUSED void **  state)

Definition at line 349 of file test_amxd_object_search.c.

349  {
350  amxc_llist_t paths;
351  amxd_object_t* root_obj = amxd_dm_get_root(&dm);
352  amxc_llist_init(&paths);
353 
354  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.NotExisting.[Param3>100]."), 0);
355  assert_int_equal(amxc_llist_size(&paths), 0);
356 
357  assert_int_not_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[Param3>100].NonExisting."), 0);
358  assert_int_equal(amxc_llist_size(&paths), 0);
359 
360  assert_int_equal(amxd_object_resolve_pathf(root_obj, &paths, "RootObject.TemplateObject.[Param3>500].ChildObject."), 0);
361  assert_int_equal(amxc_llist_size(&paths), 0);
362 }

Variable Documentation

◆ dm

amxd_dm_t dm
static

Definition at line 83 of file test_amxd_object_search.c.