diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-02-14 10:20:44 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-02-23 11:35:11 +0000 |
commit | 5480cb67b283c078770b02766c37768cb0930d7b (patch) | |
tree | 3208634cb643410a2ea1ad0410d887fb39f0d9ad | |
parent | 34de613deab1c8728118fce389963ecb29ca51e7 (diff) |
libmm-glib,tests: add ishexstr/hexstr2bin/bin2hexstr unit tests
-rw-r--r-- | libmm-glib/tests/test-common-helpers.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/libmm-glib/tests/test-common-helpers.c b/libmm-glib/tests/test-common-helpers.c index 78432bed..9a5701d1 100644 --- a/libmm-glib/tests/test-common-helpers.c +++ b/libmm-glib/tests/test-common-helpers.c @@ -502,6 +502,102 @@ field_parser_double (void) } /**************************************************************/ +/* hexstr2bin & bin2hexstr */ + +static void +common_hexstr2bin_test_failure (const gchar *input_hex) +{ + g_autoptr(GError) error = NULL; + g_autofree guint8 *bin = NULL; + gsize bin_len = 0; + + g_assert (mm_utils_ishexstr (input_hex) == FALSE); + + bin = mm_utils_hexstr2bin (input_hex, -1, &bin_len, &error); + g_assert_null (bin); + g_assert_nonnull (error); +} + +static void +common_hexstr2bin_test_success_len (const gchar *input_hex, + gssize input_hex_len) +{ + g_autoptr(GError) error = NULL; + g_autofree guint8 *bin = NULL; + gsize bin_len = 0; + g_autofree gchar *hex = NULL; + + bin = mm_utils_hexstr2bin (input_hex, input_hex_len, &bin_len, &error); + g_assert_nonnull (bin); + g_assert_no_error (error); + + hex = mm_utils_bin2hexstr (bin, bin_len); + g_assert_nonnull (hex); + + if (input_hex_len == -1) + g_assert (g_ascii_strcasecmp (input_hex, hex) == 0); + else + g_assert (g_ascii_strncasecmp (input_hex, hex, (gsize)input_hex_len) == 0); +} + +static void +common_hexstr2bin_test_success (const gchar *input_hex) +{ + gsize input_hex_len; + gssize i; + + g_assert (mm_utils_ishexstr (input_hex) == TRUE); + + common_hexstr2bin_test_success_len (input_hex, -1); + + input_hex_len = strlen (input_hex); + for (i = input_hex_len; i >= 2; i-=2) + common_hexstr2bin_test_success_len (input_hex, i); +} + +static void +hexstr_lower_case (void) +{ + common_hexstr2bin_test_success ("000123456789abcdefff"); +} + +static void +hexstr_upper_case (void) +{ + common_hexstr2bin_test_success ("000123456789ABCDEFFF"); +} + +static void +hexstr_mixed_case (void) +{ + common_hexstr2bin_test_success ("000123456789AbcDefFf"); +} + +static void +hexstr_empty (void) +{ + common_hexstr2bin_test_failure (""); +} + +static void +hexstr_missing_digits (void) +{ + common_hexstr2bin_test_failure ("012"); +} + +static void +hexstr_wrong_digits_all (void) +{ + common_hexstr2bin_test_failure ("helloworld"); +} + +static void +hexstr_wrong_digits_some (void) +{ + common_hexstr2bin_test_failure ("012345k7"); +} + +/**************************************************************/ int main (int argc, char **argv) { @@ -539,5 +635,13 @@ int main (int argc, char **argv) g_test_add_func ("/MM/Common/FieldParsers/Uint", field_parser_uint); g_test_add_func ("/MM/Common/FieldParsers/Double", field_parser_double); + g_test_add_func ("/MM/Common/HexStr/lower-case", hexstr_lower_case); + g_test_add_func ("/MM/Common/HexStr/upper-case", hexstr_upper_case); + g_test_add_func ("/MM/Common/HexStr/mixed-case", hexstr_mixed_case); + g_test_add_func ("/MM/Common/HexStr/missing-empty", hexstr_empty); + g_test_add_func ("/MM/Common/HexStr/missing-digits", hexstr_missing_digits); + g_test_add_func ("/MM/Common/HexStr/wrong-digits-all", hexstr_wrong_digits_all); + g_test_add_func ("/MM/Common/HexStr/wrong-digits-some", hexstr_wrong_digits_some); + return g_test_run (); } |