Add unit test for common/buf.c

This commit is contained in:
Johan Malm 2023-09-23 15:07:25 +01:00 committed by Consolatis
parent 5ae9eed1ac
commit a368bbee6a
6 changed files with 126 additions and 3 deletions

1
t/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.t

65
t/buf-simple.c Normal file
View file

@ -0,0 +1,65 @@
// SPDX-License-Identifier: GPL-2.0-only
#define _POSIX_C_SOURCE 200809L
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <cmocka.h>
#include "common/buf.h"
#include "common/mem.h"
static void
test_expand_title(void **state)
{
(void)state;
struct buf s = BUF_INIT;
char TEMPLATE[] = "foo ~/bar";
char expect[4096];
snprintf(expect, sizeof(expect), "foo %s/bar", getenv("HOME"));
buf_add(&s, TEMPLATE);
assert_string_equal(s.data, TEMPLATE);
assert_int_equal(s.len, strlen(TEMPLATE));
// Resolve ~
buf_expand_tilde(&s);
assert_string_equal(s.data, expect);
assert_int_equal(s.len, strlen(expect));
setenv("bar", "BAR", 1);
// Resolve $bar and ${bar}
s.len = 0;
buf_add(&s, "foo $bar baz");
buf_expand_shell_variables(&s);
assert_string_equal(s.data, "foo BAR baz");
assert_int_equal(s.len, 11);
s.len = 0;
buf_add(&s, "foo ${bar} baz");
buf_expand_shell_variables(&s);
assert_string_equal(s.data, "foo BAR baz");
assert_int_equal(s.len, 11);
// Don't resolve $()
s.len = 0;
buf_add(&s, "foo $(bar) baz");
buf_expand_shell_variables(&s);
assert_string_equal(s.data, "foo $(bar) baz");
assert_int_equal(s.len, 14);
unsetenv("bar");
free(s.data);
}
int main(int argc, char **argv)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_expand_title),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}

27
t/meson.build Normal file
View file

@ -0,0 +1,27 @@
test_lib = static_library(
'test_lib',
sources: files(
'../src/common/buf.c',
'../src/common/mem.c',
'../src/common/string-helpers.c'
),
include_directories: [labwc_inc],
dependencies: [dep_cmocka],
)
tests = [
'buf-simple',
]
foreach t : tests
test(
'test_@0@'.format(t),
executable(
'test_@0@'.format(t),
sources: '@0@.c'.format(t),
include_directories: [labwc_inc],
link_with: [test_lib],
),
is_parallel: false,
)
endforeach