71 char data[] =
"abcdefghij";
90 assert_ptr_equal(string->
buffer, NULL);
91 assert_int_equal(string->
length, 0);
94 assert_ptr_equal(
string, NULL);
97 assert_ptr_not_equal(string->
buffer, NULL);
98 assert_int_equal(string->
length, 10);
101 assert_ptr_equal(
string, NULL);
108 assert_ptr_equal(
string.buffer, NULL);
109 assert_int_equal(
string.length, 0);
110 assert_int_equal(
string.last_used, 0);
112 assert_int_equal(
string.length, 0);
113 assert_int_equal(
string.last_used, 0);
116 assert_ptr_not_equal(
string.buffer, NULL);
117 assert_int_equal(
string.length, 10);
118 assert_int_equal(
string.last_used, 0);
120 assert_int_equal(
string.length, 10);
121 assert_int_equal(
string.last_used, 0);
123 assert_ptr_equal(
string.buffer, NULL);
124 assert_int_equal(
string.length, 0);
125 assert_int_equal(
string.last_used, 0);
138 assert_ptr_not_equal(
string.buffer, NULL);
139 assert_int_equal(
string.length, 5);
140 assert_int_equal(
string.last_used, 0);
143 assert_ptr_not_equal(
string.buffer, NULL);
144 assert_int_equal(
string.length, 10);
145 assert_int_equal(
string.last_used, 0);
148 assert_ptr_not_equal(
string.buffer, NULL);
149 assert_int_equal(
string.length, 17);
150 assert_int_equal(
string.last_used, 0);
167 assert_ptr_not_equal(
string.buffer, NULL);
168 assert_int_equal(
string.length, 15);
169 assert_int_equal(
string.last_used, 0);
172 assert_ptr_not_equal(
string.buffer, NULL);
173 assert_int_equal(
string.length, 10);
174 assert_int_equal(
string.last_used, 0);
177 assert_ptr_not_equal(
string.buffer, NULL);
178 assert_int_equal(
string.length, 7);
179 assert_int_equal(
string.last_used, 0);
182 assert_ptr_equal(
string.buffer, NULL);
183 assert_int_equal(
string.length, 0);
184 assert_int_equal(
string.last_used, 0);
199 assert_int_equal(
string.length, 10);
200 assert_int_equal(
string.last_used, 5);
201 assert_string_equal(
string.buffer,
"abcde");
204 assert_int_equal(
string.length, 11);
205 assert_int_equal(
string.last_used, 10);
206 assert_string_equal(
string.buffer,
"abcde12345");
209 assert_int_equal(
string.length, 16);
210 assert_int_equal(
string.last_used, 15);
211 assert_string_equal(
string.buffer,
"abcde12345abcde");
214 assert_int_equal(
string.length, 11);
215 assert_int_equal(
string.last_used, 10);
230 assert_int_equal(
string.length, 10);
231 assert_int_equal(
string.last_used, 5);
232 assert_string_equal(
string.buffer,
"abcde");
235 assert_int_equal(
string.length, 11);
236 assert_int_equal(
string.last_used, 10);
237 assert_string_equal(
string.buffer,
"12345abcde");
240 assert_int_equal(
string.length, 16);
241 assert_int_equal(
string.last_used, 15);
242 assert_string_equal(
string.buffer,
"abcde12345abcde");
245 assert_int_equal(
string.length, 11);
246 assert_int_equal(
string.last_used, 10);
311 assert_int_equal(
string.length, 12);
312 assert_int_equal(
string.last_used, 11);
318 assert_int_equal(
string.length, 12);
319 assert_int_equal(
string.last_used, 12);
320 assert_string_equal(
string.buffer,
"hello Europe");
324 "and the rest of the world",
333 assert_int_equal(
string.length, 37);
334 assert_int_equal(
string.last_used, 37);
335 assert_string_equal(
string.buffer,
"hello Asiapeand the rest of the world");
362 assert_int_equal(
string.length, 12);
363 assert_int_equal(
string.last_used, 5);
364 assert_string_equal(
string.buffer,
"hello");
367 assert_int_equal(
string.length, 12);
368 assert_int_equal(
string.last_used, 3);
369 assert_string_equal(
string.buffer,
"heo");
379 assert_int_equal(
string.length, 12);
380 assert_int_equal(
string.last_used, 5);
381 assert_string_equal(
string.buffer,
"hello");
411 char* dup_buffer = NULL;
427 assert_ptr_not_equal(dup_buffer, NULL);
428 assert_string_equal(dup_buffer,
"hello world");
432 assert_ptr_not_equal(dup_buffer, NULL);
433 assert_string_equal(dup_buffer,
"hello world");
437 assert_ptr_not_equal(dup_buffer, NULL);
438 assert_string_equal(dup_buffer,
"world");
442 assert_ptr_not_equal(dup_buffer, NULL);
443 assert_string_equal(dup_buffer,
"ll");
460 assert_int_equal(
string.last_used, 0);
464 " \t hello world\t ",
469 assert_int_equal(
string.last_used, 18);
471 assert_int_equal(
string.last_used, 18);
473 assert_int_equal(
string.last_used, 18);
475 assert_int_equal(
string.last_used, 14);
476 assert_string_equal(
string.buffer,
"hello world\t ");
479 assert_int_equal(
string.last_used, 11);
480 assert_string_equal(
string.buffer,
"hello world");
483 assert_string_equal(
string.buffer,
"hello world");
492 assert_int_equal(
string.last_used, 0);
501 assert_int_equal(
string.last_used, 0);
506 " \t hello world\t ",
510 assert_string_equal(
string.buffer,
"hello world");
514 assert_string_equal(
string.buffer,
"");
518 assert_string_equal(
string.buffer,
"");
535 assert_ptr_not_equal(buffer, NULL);
536 assert_string_equal(buffer,
"Hello World");
537 assert_int_equal(
string.length, 0);
538 assert_int_equal(
string.last_used, 0);
539 assert_ptr_equal(
string.buffer, NULL);
557 assert_int_equal(
string.length, 12);
558 assert_int_equal(
string.last_used, 11);
560 assert_int_equal(
string.buffer[
string.last_used], 0);
564 assert_int_equal(
string.buffer[
string.last_used], 0);
580 assert_int_equal(
string.length, 12);
581 assert_int_equal(
string.last_used, 11);
582 assert_string_equal(
string.buffer,
"Hello world");
585 assert_string_equal(
string.buffer,
"Hello worldacracadabra-5");
602 assert_int_equal(
string.length, 12);
603 assert_int_equal(
string.last_used, 11);
604 assert_string_equal(
string.buffer,
"Hello world");
607 assert_string_equal(
string.buffer,
"acracadabra-5Hello world");
689 setenv(
"TestEnvVar",
"MyValue", 1);
690 setenv(
"RefVar",
"$(TestEnvVar)", 1);
696 assert_string_equal(
string.buffer,
"Resolves Env Var MyValue");
699 assert_int_equal(
amxc_string_appendf(&
string,
"$(TestEnvVar) $(TestEnvVar) $TestEnvVar TestEnvVar"), 0);
701 assert_string_equal(
string.buffer,
"MyValue MyValue $TestEnvVar TestEnvVar");
706 assert_string_equal(
string.buffer,
"MyValue MyValue");
711 assert_string_equal(
string.buffer,
" MyValue");
716 assert_string_equal(
string.buffer,
" $(RefVar");
721 assert_string_equal(
string.buffer,
"$(Dummy - $(RefVar");
744 assert_string_equal(
string.buffer,
"Resolves Var /tmp/");
747 assert_int_equal(
amxc_string_appendf(&
string,
"${name} ${rw_data_path} $rw_data_path rw_data_path"), 0);
749 assert_string_equal(
string.buffer,
"a_name /tmp/ $rw_data_path rw_data_path");
754 assert_string_equal(
string.buffer,
"a_name a_name");
759 assert_string_equal(
string.buffer,
" a_name");
777 setenv(
"TESTENV",
"MyValue", 1);
778 setenv(
"DATAREF",
"${name}", 1);
788 assert_int_equal(
amxc_string_appendf(&
string,
"TESTENV = $(TESTENV) & name = ${name}"), 0);
790 assert_string_equal(
string.buffer,
"TESTENV = MyValue & name = a_name");
795 assert_string_equal(
string.buffer,
"name = a_name & TESTENV = MyValue");
798 assert_int_equal(
amxc_string_appendf(&
string,
"${ref} ${rw_data_path} $(TESTENV) ${name}"), 0);
800 assert_string_equal(
string.buffer,
"MyValue /tmp/ MyValue a_name");
803 assert_int_equal(
amxc_string_appendf(&
string,
"$\\{ref\\} \\\" $\\(TESTENV\\) \\' \\\\"), 0);
805 assert_string_equal(
string.buffer,
"${ref} \" $(TESTENV) ' \\");
810 assert_string_equal(
string.buffer,
"${ref} $(TESTENV)");
815 assert_string_equal(
string.buffer,
"$\\{ref\\} \\\" $\\(TESTENV\\) \\' \\\\");
820 assert_string_equal(
string.buffer,
"\\n\\t\\\\n");
823 assert_string_equal(
string.buffer,
"\n\t\\n\\");
834 setenv(
"TESTENV",
"MyValue", 1);
835 setenv(
"DATAREF",
"${name}", 1);
846 assert_string_equal(
string.buffer,
"TESTENV = MyValue & name = a_name");
866 setenv(
"TESTENV",
"MyValue", 1);
867 setenv(
"DATAREF",
"${name}", 1);
876 assert_ptr_not_equal(
string, NULL);
877 assert_string_equal(string->
buffer,
"TESTENV = MyValue & name = a_name");
881 assert_ptr_equal(
string, NULL);
884 assert_ptr_equal(
string, NULL);
887 assert_ptr_equal(
string, NULL);
889 assert_ptr_equal(
string, NULL);
891 assert_ptr_equal(
string, NULL);
919 assert_int_equal(
amxc_string_search(&
string,
"Too long needle, it can not be in the text", 0), -1);
938 amxc_string_setf(&
string,
"This is text and some more text and more text text");
941 assert_int_equal(
amxc_string_replace(&
string,
"text",
"dummy-foo extra text", UINT32_MAX), 1);
944 assert_string_equal(
string.buffer,
"This is dummy and some more foo and more foo dummy-foo extra foo");
946 amxc_string_setf(&
string,
"This is text and some more text and more text text");
948 assert_string_equal(
string.buffer,
"This is text and some more text and more text text");
953 assert_string_equal(
string.buffer,
"This is and some more and more ");
986 assert_string_equal(dst.
buffer,
"");
1001 assert_int_equal(
string.last_used, 0);
1002 assert_string_equal(
string.buffer,
"");
1010 assert_int_equal(
amxc_string_set(&
string,
"Hello world, I am so happy"), 26);
1011 assert_string_equal(
amxc_string_get(&
string, 0),
"Hello world, I am so happy");
1022 char data[11] = { 0xA0, 0x1B, 0xC2, 0x3D, 0xE4, 0x00, 0xA5, 0x6B, 0xC7, 0x8D, 0xE9 };
1025 amxc_ts_parse(&time,
"2020-02-29T16:16:16.123456-01:15", strlen(
"2020-02-29T16:16:16.123456-01:15"));
1029 assert_string_equal(
amxc_string_get(&
string, 0),
"A01BC23DE400A56BC78DE9");
1033 assert_string_equal(
amxc_string_get(&
string, 0),
"E49F5A5E0000000000CA5B07B5FF0000");
1045 char verify[11] = { 0xA0, 0x1B, 0xC2, 0x3D, 0xE4, 0x00, 0xA5, 0x6B, 0xC7, 0x8D, 0xE9 };
1051 assert_non_null(
data);
1052 assert_int_equal(len, 11);
1053 for(
int i = 0; i < 11; i++) {
1054 assert_int_equal(
data[i], verify[i]);
1060 assert_non_null(
data);
1061 assert_int_equal(len, 11);
1062 for(
int i = 0; i < 11; i++) {
1063 assert_int_equal(
data[i], verify[i]);
1069 assert_non_null(time);
1070 assert_int_equal(len,
sizeof(
amxc_ts_t));
1072 assert_string_equal(time_str,
"2020-02-29T16:16:16.123456-01:15");
1077 assert_non_null(time);
1078 assert_int_equal(len,
sizeof(
amxc_ts_t));
1080 assert_string_equal(time_str,
"2020-02-29T16:16:16.123456-01:15");
1088 char mac_addr[6] = { 0x02, 0x42, 0xac, 0x11, 0x00, 0x02 };
1092 assert_string_equal(
amxc_string_get(&
string, 0),
"02:42:AC:11:00:02");
1102 char verify[6] = { 0x02, 0x42, 0xac, 0x11, 0x00, 0x02 };
1108 assert_non_null(
data);
1109 assert_int_equal(len, 6);
1110 for(
int i = 0; i < 6; i++) {
1111 assert_int_equal(
data[i], verify[i]);
1128 assert_int_equal(len, 0);
1133 assert_int_equal(len, 0);
1137 assert_int_equal(len, 0);
1141 assert_int_equal(len, 0);
1155 assert_non_null(
data);
1156 assert_int_equal(len, 1);
1158 assert_int_equal(
data[0], 10);
1168 amxc_string_setf(&
string,
"This is some text with symbols ;=) and uppercase ABC");
1171 assert_string_equal(
amxc_string_get(&
string, 0),
"THIS IS SOME TEXT WITH SYMBOLS ;=) AND UPPERCASE ABC");
1182 amxc_string_setf(&
string,
"THIS IS SOME TEXT WITH SYMBOLS ;=) AND LOWERCASE abc");
1185 assert_string_equal(
amxc_string_get(&
string, 0),
"this is some text with symbols ;=) and lowercase abc");
1201 return string != NULL && strlen(
string) <= 5;
1208 va_start(args, fmt);
1212 if(expected == NULL) {
1213 assert_int_not_equal(0, retval);
1216 assert_int_equal(0, retval);
1247 "int32_t: -2147483648, "
1248 "int64_t: -9223372036854775808, "
1251 "uint32_t: 4294967295, "
1252 "uint64_t: 18446744073709551615",
1255 ", int16_t: %" PRId16
1256 ", int32_t: %" PRId32
1257 ", int64_t: %" PRId64
1258 ", uint8_t: %" PRIu8
1259 ", uint16_t: %" PRIu16
1260 ", uint32_t: %" PRIu32
1261 ", uint64_t: %" PRIu64,
1298 assert_int_equal(0, retval);
1315 assert_int_not_equal(0, retval);
Ambiorix string API header file.
Ambiorix variant API header file.
#define cstring_t
Convenience macro.
size_t amxc_llist_size(const amxc_llist_t *const llist)
Calculates the size of the linked list.
int amxc_llist_init(amxc_llist_t *const llist)
Initializes a linked list.
void amxc_llist_clean(amxc_llist_t *const llist, amxc_llist_it_delete_t func)
Removes all items from the linked list.
amxc_llist_it_t * amxc_llist_add_string(amxc_llist_t *const llist, const char *text)
Adds a string (char*) to a linked list of amxc_string_t structures.
int amxc_string_set_resolved(amxc_string_t *string, const char *text, const amxc_var_t *const data)
Sets the resolved string.
int amxc_string_esc(amxc_string_t *const string)
Add escape characters to a string.
int amxc_string_new_resolved(amxc_string_t **string, const char *text, const amxc_var_t *const data)
Sets the resolved string.
int amxc_string_resolve_var(amxc_string_t *const string, const amxc_var_t *const data)
Resolves variant path variables.
int amxc_string_resolve(amxc_string_t *const string, const amxc_var_t *const data)
Resolves variant paths and environment variables.
void amxc_string_list_it_free(amxc_llist_it_t *it)
Helper function to delete an item in a linked list.
int amxc_string_resolve_esc(amxc_string_t *const string)
Resolves escaped characters in a string.
int amxc_string_resolve_env(amxc_string_t *const string)
Resolves environment variables.
void amxc_string_delete(amxc_string_t **string)
Frees the previously allocated string.
const char * amxc_string_get(const amxc_string_t *const string, const size_t offset)
Gets the content of the string buffer.
int amxc_string_to_lower(amxc_string_t *const string)
Converts all upper case characters to lower case.
int amxc_string_bytes_2_hex_binary(amxc_string_t *const string, const char bytes[], const uint32_t len, const char *sep)
Creates a hexbinary string from an array of bytes.
int amxc_string_setf(amxc_string_t *const string, const char *fmt,...) __attribute__((format(printf
Sets the content of the string using printf like formatting.
AMXC_INLINE size_t amxc_string_buffer_length(const amxc_string_t *const string)
Gets the current size of the allocate string buffer.
int amxc_string_push_buffer(amxc_string_t *const string, char *buffer, size_t length)
Sets the string buffer.
size_t amxc_string_set(amxc_string_t *const string, const char *text)
Sets a 0 terminated string in the string buffer.
AMXC_INLINE int amxc_string_append(amxc_string_t *const string, const char *const text, const size_t length)
Appends text to the end of the current content of the string buffer.
int amxc_string_replace(amxc_string_t *const string, const char *needle, const char *newstr, uint32_t max)
Replaces a number of sub-string occurrences in a string.
char * amxc_string_dup(const amxc_string_t *const string, const size_t start, size_t length)
Creates a full or partial copy of the text in the string buffer.
void amxc_string_reset(amxc_string_t *const string)
Resets the buffer, reset the content to all 0.
int amxc_string_to_upper(amxc_string_t *const string)
Converts all lower case characters to upper case.
int amxc_string_copy(amxc_string_t *const dest, const amxc_string_t *const src)
Copies the content.
int amxc_string_new(amxc_string_t **string, const size_t length)
Allocates a string.
AMXC_INLINE size_t amxc_string_text_length(const amxc_string_t *const string)
Gets the current size of the used string buffer.
bool(* amxc_string_is_safe_cb_t)(const char *replacement)
Checks if given replacement is safe to be included in a bigger string in a particular language.
int amxc_string_search(const amxc_string_t *const string, const char *needle, uint32_t start_pos)
Searches a sub-string in a string.
AMXC_INLINE int amxc_string_prepend(amxc_string_t *const string, const char *const text, const size_t length)
Inserts text at the beginning of the current content of the string buffer.
int int amxc_string_vappendf_checked(amxc_string_t *target_string, amxc_string_is_safe_cb_t is_safe_cb, const char *fmt, va_list args)
va_list version of amxc_string_appendf_checked
int amxc_string_appendf_checked(amxc_string_t *string, amxc_string_is_safe_cb_t is_safe_cb, const char *fmt,...) __attribute__((format(printf
Appends a formatted string while performing safety checks on the replacements.
int amxc_string_grow(amxc_string_t *const string, const size_t length)
Grows the string buffer.
int amxc_string_shrink(amxc_string_t *const string, const size_t length)
Shrinks the string buffer.
void amxc_string_trim(amxc_string_t *const string, amxc_string_is_char_fn_t fn)
Trim.
int amxc_string_init(amxc_string_t *const string, const size_t length)
Initializes a string.
int amxc_string_appendf(amxc_string_t *const string, const char *fmt,...) __attribute__((format(printf
Appends a formatted string to a string.
int amxc_string_remove_at(amxc_string_t *const string, const size_t pos, size_t length)
Removes part of the text in the string buffer.
int amxc_string_set_at(amxc_string_t *const string, const size_t pos, const char *const text, const size_t length, const amxc_string_flags_t flags)
Set text in the string buffer at a certain position.
int amxc_string_hex_binary_2_bytes(const amxc_string_t *const string, char **bytes, uint32_t *len, const char *sep)
Creates an array of bytes from a hex binary string.
void amxc_string_triml(amxc_string_t *const string, amxc_string_is_char_fn_t fn)
Trim left.
void amxc_string_trimr(amxc_string_t *const string, amxc_string_is_char_fn_t fn)
Trim right.
int bool amxc_string_is_numeric(const amxc_string_t *const string)
Checks if a string is fully numeric.
AMXC_INLINE bool amxc_string_is_empty(const amxc_string_t *const string)
Checks if the string is empty.
int amxc_string_prependf(amxc_string_t *const string, const char *fmt,...) __attribute__((format(printf
Prepends a formatted string to a string.
void amxc_string_clean(amxc_string_t *const string)
Frees the string buffer and reset length attributes.
char * amxc_string_take_buffer(amxc_string_t *const string)
Takes the string buffer.
size_t amxc_ts_format(const amxc_ts_t *tsp, char *dst, size_t len)
Transforms unix epoch time to a string.
int amxc_ts_parse(amxc_ts_t *tsp, const char *str, size_t len)
Transforms the given string in to unix epoch time.
#define AMXC_VAR_ID_HTABLE
Ambiorix Hash Table variant id.
#define amxc_var_add_key(type, var, key, data)
Convenience macro for adding a variant to composite variant type.
int amxc_var_set_type(amxc_var_t *const var, const uint32_t type)
Change the variant data type.
int amxc_var_init(amxc_var_t *const var)
Initializes a variant.
void amxc_var_clean(amxc_var_t *const var)
Clean-up and reset variant.
The linked list structure.
The variant struct definition.
The timestamp structure (unix epoch time).
void test_amxc_string_setf(UNUSED void **state)
void test_amxc_string_build_hex_binary(UNUSED void **state)
void test_amxc_string_grow_null(UNUSED void **state)
void test_amxc_string_get(UNUSED void **state)
void test_amxc_string_build_byte_array_with_invalid_string(UNUSED void **state)
void test_amxc_string_resolve_var(UNUSED void **state)
void test_amxc_llist_add_string(UNUSED void **state)
void test_amxc_string_trim(UNUSED void **state)
static bool s_reject_all_strings(UNUSED const char *string)
void test_amxc_string_shrink_null(UNUSED void **state)
void test_amxc_string_append(UNUSED void **state)
void test_amxc_string_new_delete_null(UNUSED void **state)
void test_amxc_string_prepend(UNUSED void **state)
void test_amxc_string_init_reset_clean_null(UNUSED void **state)
void test_amxc_string_build_hex_binary_using_separator(UNUSED void **state)
void test_amxc_string_build_byte_array(UNUSED void **state)
void test_amxc_string_prependf(UNUSED void **state)
void test_amxc_string_text_length(UNUSED void **state)
static bool s_reject_longer_than_5(const char *string)
void test_amxc_string_vappendf_checked(UNUSED void **state)
void test_amxc_string_resolve(UNUSED void **state)
void test_amxc_string_init_reset_clean(UNUSED void **state)
void test_amxc_string_dup(UNUSED void **state)
void test_amxc_string_new_resolved(UNUSED void **state)
void test_amxc_string_search(UNUSED void **state)
void test_amxc_string_resolve_env(UNUSED void **state)
void test_amxc_string_replace(UNUSED void **state)
void test_amxc_string_build_byte_array_with_separator(UNUSED void **state)
void test_amxc_string_take_push_buffer(UNUSED void **state)
void test_amxc_string_shrink(UNUSED void **state)
void test_amxc_string_grow(UNUSED void **state)
void test_amxc_string_remove_at(UNUSED void **state)
void test_amxc_string_toupper(UNUSED void **state)
void test_amxc_string_is_numeric(UNUSED void **state)
void test_amxc_string_buffer_length(UNUSED void **state)
void test_amxc_string_appendf_checked__rejected(UNUSED void **state)
void test_amxc_string_set(UNUSED void **state)
void test_amxc_string_set_at(UNUSED void **state)
void test_amxc_string_appendf(UNUSED void **state)
void test_amxc_string_set_resolved(UNUSED void **state)
static void s_testhelper_vappendf_checked(const char *expected, amxc_string_is_safe_cb_t is_safe_cb, const char *fmt,...)
void test_amxc_string_new_delete(UNUSED void **state)
void test_amxc_string_appendf_checked__normalcase(UNUSED void **state)
void test_amxc_string_tolower(UNUSED void **state)
void test_amxc_string_reset(UNUSED void **state)
void test_amxc_string_copy(UNUSED void **state)
void test_amxc_string_build_byte_array_from_incomplete_string(UNUSED void **state)
static bool s_accept_all_strings(UNUSED const char *string)