tests: add infrastructure for writing tests in C

This commit is contained in:
Khaïs COLIN 2025-02-06 15:48:48 +01:00
parent e022ca0ce7
commit 60d9b212fb
No known key found for this signature in database
4 changed files with 92 additions and 0 deletions

1
.gitignore vendored
View file

@ -19,6 +19,7 @@ test
minishell minishell
testexec.sh testexec.sh
tests/* tests/*
!tests/Makefile
!tests/*.c !tests/*.c
!tests/*.h !tests/*.h
infile infile

View file

@ -13,6 +13,7 @@ export CFLAGS
srcs = \ srcs = \
objs = $(srcs:.c=.o) objs = $(srcs:.c=.o)
export objs
minishell_objs = $(addsuffix .o,src/$(NAME)) $(objs) minishell_objs = $(addsuffix .o,src/$(NAME)) $(objs)
all_objs = $(minishell_objs) all_objs = $(minishell_objs)
deps = $(all_objs:.o=.d) deps = $(all_objs:.o=.d)
@ -36,6 +37,7 @@ clean:
fclean: clean fclean: clean
rm -f $(NAME) rm -f $(NAME)
+make -C tests fclean
re: re:
+make fclean +make fclean
@ -45,10 +47,19 @@ norm:
norminette src | grep -v OK || true norminette src | grep -v OK || true
tests: tests:
@echo "Running tests with AddressSanitizer..."
+CFLAGS="$(CFLAGS) $(ASAN)" make re +CFLAGS="$(CFLAGS) $(ASAN)" make re
shellspec shellspec
+CFLAGS="$(CFLAGS) $(ASAN)" make -C tests
@echo "Running tests with UndefinedBehaviourSanitizer..."
+CFLAGS="$(CFLAGS) $(UBSAN)" make re +CFLAGS="$(CFLAGS) $(UBSAN)" make re
shellspec shellspec
+CFLAGS="$(CFLAGS) $(UBTSAN)" make -C tests
@echo "Running tests with ThreadSanitizer..."
+CFLAGS="$(CFLAGS) $(TSAN)" make re +CFLAGS="$(CFLAGS) $(TSAN)" make re
shellspec shellspec
+CFLAGS="$(CFLAGS) $(TSAN)" make -C tests
@echo "All tests passed!" @echo "All tests passed!"

21
tests/Makefile Normal file
View file

@ -0,0 +1,21 @@
rawtests = \
metacharacters \
tests = $(addprefix test_,$(rawtests))
test_objs = $(addsuffix .o,$(tests))
objs := $(addprefix ../,$(objs))
.PHONY: run
%.o: %.c
$(CC) -c $(CFLAGS) $(LDFLAGS) -o $*.o $*.c
$(CC) -MM $(CFLAGS) $(LDFLAGS) $*.c > $*.d
test_%: %.o $(objs)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $*.o $(objs) $(LDLIBS)
run: $(tests)
$(addprefix ./,$(addsuffix &&,$(tests))) echo "Finished running C tests"
fclean:
rm -f $(tests)

59
tests/metacharacters.c Normal file
View file

@ -0,0 +1,59 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* metacharacters.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: kcolin <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/06 15:21:00 by kcolin #+# #+# */
/* Updated: 2025/02/06 15:57:40 by kcolin ### ########.fr */
/* */
/* ************************************************************************** */
#include "../src/parser/matchers/metacharacter.h"
#include <assert.h>
#include <stdio.h>
#include <unistd.h>
void test_metacharacters(void)
{
dup2(STDERR_FILENO, STDIN_FILENO);
char c = 'a';
printf("not metachar:");
while (c != 'z')
{
printf("%c", c);
assert(!is_metacharacter(c));
c++;
}
c = 'A';
while (c != 'Z')
{
printf("%c", c);
assert(!is_metacharacter(c));
c++;
}
c = '0';
while (c != '9')
{
printf("%c", c);
assert(!is_metacharacter(c));
c++;
}
char *metachars = " \t\n|&;()<>";
int i = 0;
printf("\nmetachar:");
while (metachars[i] != '\0')
{
printf("%c", metachars[i]);
assert(is_metacharacter(metachars[i]));
i++;
}
printf("\n");
}
int main(void)
{
test_metacharacters();
return (0);
}