diff options
Diffstat (limited to 'suites.py')
| -rw-r--r-- | suites.py | 137 |
1 files changed, 134 insertions, 3 deletions
@@ -77,9 +77,12 @@ def suite_redirection(): test("echo bonjour>>test>je>>suis", setup="", files=["test", "je", "suis"]) test("cat<test<je", setup="echo bonjour > test; echo salut > je") - test("echo bonjour > a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'", files=["abcdefghijklmnopqrstuvzxyz"]) - test('echo bonjour > a"b"c"d"e"f"g"h"i"j"k"l"m"n"o"p"q"r"s"t"u"v"w"x"y"z"', files=["abcdefghijklmnopqrstuvzxyz"]) - test('echo bonjour > a\'b\'c"d"e\'f\'g"h"i\'j\'k"l"m\'n\'o"p\'q\'r"s\'t\'u"v"w"x"y\'z\'', files=["abcdefghijklmnopqrstuvzxyz"]) + test("echo bonjour > a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'", + files=["abcdefghijklmnopqrstuvzxyz"]) + test('echo bonjour > a"b"c"d"e"f"g"h"i"j"k"l"m"n"o"p"q"r"s"t"u"v"w"x"y"z"', + files=["abcdefghijklmnopqrstuvzxyz"]) + test('echo bonjour > a\'b\'c"d"e\'f\'g"h"i\'j\'k"l"m\'n\'o"p\'q\'r"s\'t\'u"v"w"x"y\'z\'', + files=["abcdefghijklmnopqrstuvzxyz"]) @suite def suite_edgecases(): @@ -105,3 +108,131 @@ def suite_cmd_error(): test("cat <<< bar", setup="echo bonjour > bar") test("cat <<<< bar", setup="echo bonjour > bar") test("cat <<<<< bar", setup="echo bonjour > bar") + +@suite +def suite_interpolation(): + test("echo $TEST", exports={"TEST": "bonjour"}) + test("echo $TES", exports={"TEST": "bonjour"}) + test("echo $TEST_", exports={"TEST": "bonjour"}) + + test('echo "|$TEST|"', exports={"TEST": "bonjour"}) + test('echo "|$TES|"', exports={"TEST": "bonjour"}) + test('echo "|$TEST_|"', exports={"TEST": "bonjour"}) + + test("echo '|$TEST|'", exports={"TEST": "bonjour"}) + test("echo '|$TES|'", exports={"TEST": "bonjour"}) + test("echo '|$TEST_|'", exports={"TEST": "bonjour"}) + + test("echo $A$B$C", exports={"A": "foo", "B": "bar", "C": "baz"}) + test('echo "$A$B$C"', exports={"A": "foo", "B": "bar", "C": "baz"}) + test("echo '$A$B$C'", exports={"A": "foo", "B": "bar", "C": "baz"}) + + test("echo $A,$B,$C", exports={"A": "foo", "B": "bar", "C": "baz"}) + test('echo "$A,$B,$C"', exports={"A": "foo", "B": "bar", "C": "baz"}) + test("echo '$A,$B,$C'", exports={"A": "foo", "B": "bar", "C": "baz"}) + + test('echo $A"$B"$C"A"$B"$C"', exports={"A": "foo", "B": "bar", "C": "baz"}) + test("echo $A'$B'$C'A'$B'$C'", exports={"A": "foo", "B": "bar", "C": "baz"}) + + test("echo $A", exports={"A": "'" + config.LOREM + "'"}) + test('echo "$A"', exports={"A": "'" + config.LOREM + "'"}) + test("echo '$A'", exports={"A": "'" + config.LOREM + "'"}) + + test("$ECHO $ECHO", exports={"ECHO": "echo"}) + test("$A$B bonjour", exports={"A": "ec", "B": "ho"}) + + test("echo $") + +@suite +def suite_glob(): + test("echo *") + test("echo *", setup="touch a b c") + test("echo *.c", setup="touch a b c foo.c bar.c") + test("echo src/*.c", setup="mkdir src; touch src/a src/b src/c src/foo.c src/bar.c") + test("echo */*.c", setup="mkdir src; touch src/a src/b src/c src/foo.c src/bar.c") + test("echo */*.c", + setup="mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.c inc/bar.c") + test("echo */*.h", + setup="mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + test("echo l1/*/l3/*/*", + setup="mkdir -p l1/l2_1/l3; mkdir -p l1/l2_2; cd l1/l2_1/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h;\ + cd ../../..; cd l1/l2_2; touch bonjour je suis") + + test("echo */*/*/*/*.c", + setup="mkdir -p l1/l2/l3; cd l1/l2/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + test("echo */*/*/*/*.h", + setup="mkdir -p l1/l2/l3; cd l1/l2/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + + test("echo */*/*/*.c", + setup="mkdir -p l1/l2/l3; cd l1/l2/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + test("echo */*/*/*.h", + setup="mkdir -p l1/l2/l3; cd l1/l2/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + + test("echo */*/*/*/*/*.c", + setup="mkdir -p l1/l2/l3; cd l1/l2/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + test("echo */*/*/*/*/*.h", + setup="mkdir -p l1/l2/l3; cd l1/l2/l3;\ + mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.h inc/bar.h") + + test("echo /etc/*") + test("echo /usr/include/*.h") + test("echo /*/*") + + test("echo *nothing") + test("echo nothing*") + test("echo *nothing*") + + test("echo **") + test("echo **", setup="touch a b c") + test("echo **", setup="mkdir d; touch d/a d/b d/c") + test("echo */*", setup="mkdir d; touch d/a d/b d/c") + test("echo */a", setup="mkdir d; touch d/a d/b d/c") + test("echo d/*", setup="mkdir d; touch d/a d/b d/c") + +@suite +def suite_escape(): + test(r"echo \a") + test(r"\e\c\h\o bonjour") + test(r"echo charles\ ") + test(r"echo \ \ jesuis\ \ charles") + test(r"echo \ \ \ \ \ \ \ \ ") + test(r"echo \ \ \ \ \ \ \ \ \ \ \ \ \ \ ") + test(r"echo \$PATH") + test(r"echo \$\P\A\T\H") + test(r"echo\ bonjour") + +@suite +def suite_preprocess(): + test(r"echo \*", setup="touch a b c") + test(r"echo \*\*", setup="touch a b c") + test(r"echo \ *", setup="touch a b c") + test(r"echo *\.c", setup="touch a.c b.c c.c") + test(r"echo *.\c", setup="touch a.c b.c c.c") + test(r"echo *.c\ ", setup="touch a.c b.c c.c") + test("echo $A$B", + setup="mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.c inc/bar.c", + exports={"A": "*", "B": "/*.c"}) + test("echo $A$B", + setup="mkdir src; touch src/a src/b src/c src/foo.c src/bar.c;\ + mkdir inc; touch inc/a inc/b inc/c inc/foo.c inc/bar.c", + exports={"A": "*/.", "B": "*.c"}) + +@suite +def suite_encoding(): + test("echo " + ''.join([chr(i) for i in range(1, 127) if chr(i) not in '\n`"\'()|&><'])) |
