54 lines
1.3 KiB
C
54 lines
1.3 KiB
C
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <setjmp.h>
|
|
#include <cmocka.h>
|
|
|
|
#include <string.h>
|
|
|
|
/*
|
|
* Important note: In every particular test, don't use any string-related
|
|
* functions other than function under test. We are linking against
|
|
* src/lib/string.c not the standard library. This is important for proper test
|
|
* isolation. One can use __builtin_xxx for many of the most simple str*()
|
|
* functions, when non-coreboot one is required.
|
|
*/
|
|
|
|
struct strings_t {
|
|
char *str;
|
|
size_t size;
|
|
} strings[] = {
|
|
{"coreboot", 8},
|
|
{"is\0very", 2}, /* strlen should be 2 because of the embedded \0 */
|
|
{"nice\n", 5}
|
|
};
|
|
|
|
static void test_strlen_strings(void **state)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(strings); i++)
|
|
assert_int_equal(strings[i].size, strlen(strings[i].str));
|
|
}
|
|
|
|
static void test_strdup(void **state)
|
|
{
|
|
char str[] = "Hello coreboot\n";
|
|
char *duplicate;
|
|
|
|
duplicate = strdup(str);
|
|
|
|
/* There is a more suitable Cmocka's function 'assert_string_equal()', but it
|
|
is using strcmp() internally. */
|
|
assert_int_equal(0, memcmp(str, duplicate, __builtin_strlen(str)));
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
const struct CMUnitTest tests[] = {
|
|
cmocka_unit_test(test_strlen_strings),
|
|
cmocka_unit_test(test_strdup),
|
|
};
|
|
|
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
|
}
|