Files
42sh/validation_tests.py
2025-04-29 12:35:13 +02:00

176 lines
3.4 KiB
Python

from validator import Test
TESTS = [
Test(
key="SIMPLE",
name="simple commands",
cmds=[
"ls\n",
"uname\n",
"who\n",
]
),
Test(
key="ARGS",
name="multiple arguments",
cmds=[
"echo kek\n",
"ls --all\n",
"cat -e Makefile\n",
"find . -type f\n",
"ls -a . . .\n",
"wc --chars --words --lines Makefile\n",
],
depends_on=("SIMPLE",)
),
Test(
key="BAD CMD",
name="invalid commands",
cmds=[
"plopdjksjesi\n",
"ls -PQRT\n",
],
depends_on=("ARGS",)
),
Test(
key="PATH",
name="path handing",
cmds=[
"/bin/ls\n",
"/../bin/ls\n",
# "~/../../bin/sh --version\n",
"fixtures/exec.sh\n",
],
depends_on=("ARGS",)
),
Test(
key="ENV",
name="setenv / unsetenv",
cmds=[
"setenv Hello plop\n",
"setenv 1 nope\n",
"setenv @\n",
],
depends_on=("ARGS",)
),
Test(
key="PWD",
name="pwd",
cmds=["pwd\n"],
depends_on=("SIMPLE",)
),
Test(
key="SEMICOLON",
name="semicolon",
cmds=[
";\n",
"echo a; echo b\n",
"echo a;; echo b\n",
"echo a; echo b;\n",
],
depends_on=("ARGS",)
),
Test(
key="CD",
name="cd builtin",
cmds=[
"cd /; pwd\n",
"cd; pwd\n",
"cd ~; pwd\n",
"cd .; pwd\n",
"cd ..; pwd\n",
"cd /..; pwd\n",
"cd a\n",
"cd . .\n",
"cd src/; pwd\n",
],
depends_on=("ARGS", "PWD", "SEMICOLON")
),
Test(
key="FMT",
name="line formatting (space and tabs)",
cmds=[
" echo plop\n",
"\techo plop\n",
" \techo plop\n",
"echo\tplop\n",
"echo plop\n",
"echo\t\tplop\n",
"echo plop\t \n",
],
depends_on=("ARGS",)
),
Test(
key="REDIR",
name="I/O redirections",
cmds=[
"echo plop > out.txt\n",
"cat < out.txt\n",
"echo again >> out.txt\n",
"cat < out.txt\n",
"cat nofile.txt\n",
"echo test > /no/perm/file\n",
],
depends_on=("ARGS",)
),
Test(
key="PIPE",
name="pipes",
cmds=[
"echo plop | cat\n",
"echo kek | grep kek\n",
"ls | grep Makefile\n",
"who | wc -l\n",
"ls | | cat\n", # Syntax error
],
depends_on=("ARGS",)
),
Test(
key="ENV_EXPANSION",
name="environment variable expansion",
cmds=[
"echo $HOME\n",
"echo $PATH\n",
"setenv TESTVAR bonjour;echo $TESTVAR;unsetenv TESTVAR;echo $TESTVAR\n",
],
depends_on=("ENV","SEMICOLON",)
),
Test(
key="EXIT",
name="exit command",
cmds=[
"exit\n",
],
depends_on=("ARGS",)
),
Test(
key="MULTICMD",
name="multiple commands per line",
cmds=[
"echo one ; echo two ; echo three\n",
"ls ; pwd ; whoami\n",
"cd src/ ; pwd ; cd - ; pwd\n",
],
depends_on=("SEMICOLON",)
),
Test(
key="PARSING_ERR",
name="bad parsing cases",
cmds=[
"ls |\n",
"ls >\n",
"; ls\n",
";; ls\n",
"ls ;; ls\n",
],
depends_on=("PIPE", "REDIR", "SEMICOLON",)
),
]