142 lines
2.6 KiB
C
142 lines
2.6 KiB
C
#include <criterion/criterion.h>
|
|
#include <stdint.h>
|
|
#include "cli_parse_utils.h"
|
|
|
|
/* Test 1: Valid even-length string */
|
|
Test(parse_hex, even_length)
|
|
{
|
|
uint8_t out[4];
|
|
size_t len;
|
|
int ret = cli_parse_hex("deadbeef", out, 4, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 4);
|
|
cr_assert_eq(out[0], 0xde);
|
|
cr_assert_eq(out[1], 0xad);
|
|
cr_assert_eq(out[2], 0xbe);
|
|
cr_assert_eq(out[3], 0xef);
|
|
}
|
|
|
|
/* Test 2: Valid odd-length string — trailing nibble padded with 0 */
|
|
Test(parse_hex, odd_length)
|
|
{
|
|
uint8_t out[2];
|
|
size_t len;
|
|
int ret = cli_parse_hex("abc", out, 2, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 2);
|
|
cr_assert_eq(out[0], 0xab);
|
|
cr_assert_eq(out[1], 0xc0);
|
|
}
|
|
|
|
/* Test 3: Single char */
|
|
Test(parse_hex, single_char)
|
|
{
|
|
uint8_t out[1];
|
|
size_t len;
|
|
int ret = cli_parse_hex("f", out, 1, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 1);
|
|
cr_assert_eq(out[0], 0xf0);
|
|
}
|
|
|
|
/* Test 4: Single byte */
|
|
Test(parse_hex, single_byte)
|
|
{
|
|
uint8_t out[1];
|
|
size_t len;
|
|
int ret = cli_parse_hex("ff", out, 1, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 1);
|
|
cr_assert_eq(out[0], 0xff);
|
|
}
|
|
|
|
/* Test 5: Mixed case */
|
|
Test(parse_hex, mixed_case)
|
|
{
|
|
uint8_t out[2];
|
|
size_t len;
|
|
int ret = cli_parse_hex("DeAd", out, 2, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 2);
|
|
cr_assert_eq(out[0], 0xde);
|
|
cr_assert_eq(out[1], 0xad);
|
|
}
|
|
|
|
/* Test 6: All zeros */
|
|
Test(parse_hex, all_zeros)
|
|
{
|
|
uint8_t out[2];
|
|
size_t len;
|
|
int ret = cli_parse_hex("0000", out, 2, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 2);
|
|
cr_assert_eq(out[0], 0x00);
|
|
cr_assert_eq(out[1], 0x00);
|
|
}
|
|
|
|
/* Test 7: Exactly at max_len */
|
|
Test(parse_hex, exact_max_len)
|
|
{
|
|
uint8_t out[4];
|
|
size_t len;
|
|
int ret = cli_parse_hex("deadbeef", out, 4, &len);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
cr_assert_eq(len, 4);
|
|
}
|
|
|
|
/* Test 8: Exceeds max_len */
|
|
Test(parse_hex, exceeds_max_len)
|
|
{
|
|
uint8_t out[2];
|
|
size_t len;
|
|
int ret = cli_parse_hex("deadbeef", out, 2, &len);
|
|
|
|
cr_assert_eq(ret, 1);
|
|
}
|
|
|
|
/* Test 9: NULL input */
|
|
Test(parse_hex, null_input)
|
|
{
|
|
uint8_t out[4];
|
|
size_t len;
|
|
int ret = cli_parse_hex(NULL, out, 4, &len);
|
|
|
|
cr_assert_eq(ret, 1);
|
|
}
|
|
|
|
/* Test 10: Empty string */
|
|
Test(parse_hex, empty_string)
|
|
{
|
|
uint8_t out[4];
|
|
size_t len;
|
|
int ret = cli_parse_hex("", out, 4, &len);
|
|
|
|
cr_assert_eq(ret, 1);
|
|
}
|
|
|
|
/* Test 11: Invalid hex characters */
|
|
Test(parse_hex, invalid_chars)
|
|
{
|
|
uint8_t out[4];
|
|
size_t len;
|
|
int ret = cli_parse_hex("xyz", out, 4, &len);
|
|
|
|
cr_assert_eq(ret, 1);
|
|
}
|
|
|
|
/* Test 12: Invalid char mid-string */
|
|
Test(parse_hex, invalid_char_mid)
|
|
{
|
|
uint8_t out[4];
|
|
size_t len;
|
|
int ret = cli_parse_hex("de_d", out, 4, &len);
|
|
|
|
cr_assert_eq(ret, 1);
|
|
}
|