tests.sh 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #!/bin/zsh
  2. tmpf="/tmp/toto"
  3. tests=(
  4. ## Execution ##
  5. "ls" # test execution simple
  6. "cat auteur" # execution simple
  7. "ls -l" # avec option
  8. "ls ~" # avec tilde
  9. "/bin/ls" # execution avec le chemin entier
  10. "/sbin/yubikey_shell" # execution sans les droits d’execution
  11. "yubikey_shell" #
  12. "naritse" # cmd, élément qui n’existe pas
  13. "./21sh -c ls" # execution avec './'
  14. "./anrsiute" # execution élément qui n’existe pas
  15. "touch $tmpf ; chmod 000 $tmpf ; ./$tmpf" # execution toto sans les droits avec './'
  16. "$tmpf" # execution toto sans les droits avec le path entier
  17. "rm -f $tmpf"
  18. ## Builtin ##
  19. ## CD ##
  20. "cd ; pwd"
  21. "cd ~ ; pwd"
  22. "cd / ; pwd"
  23. "cd - ; pwd"
  24. "cd . ; pwd"
  25. "cd .. ; pwd"
  26. "cd ~/. ; pwd"
  27. "cd nasrt" # élément qui n’éxiste pas
  28. "cd auteur" # cd fichier
  29. ## ENV ##
  30. "env"
  31. "export TOTO=toto" # test setenv
  32. #"unsetenv TOTO"
  33. ## Other ##
  34. "pwd"
  35. "exit ; ls" # test exit: exit and don't display ls result
  36. ## Point-virgule
  37. "cat auteur ; cat auteur" # test un point-virgule
  38. "cat auteur ; cat auteur ; cat auteur" # test deux points-virgule
  39. ## Parsing ##
  40. ";;;;,;;;; ;;;;"
  41. "; ;"
  42. #" \t " # espaces, tabulations
  43. ## Pipe
  44. " " # empty
  45. "ls | cat" # pipe simple
  46. "ls | cat | cat" # pipe double
  47. "ls | cat | cat | cat" # pipe triple
  48. "ls -A -l | cat -e | cat -e" # pipe double with options
  49. "ls | cat | wc -l" # different commands
  50. "ls | cat | cat | cat | cat | cat | cat | cat | cat | cat | cat \
  51. | cat | cat | cat | cat | cat | cat | cat | cat | cat | cat" # twenty pipes
  52. "ls || cat" # Segfault
  53. "ls ||||||||| cat"
  54. "ls | | ls" # Segfault
  55. ## Redirections droite
  56. "ls > $tmpf ; cat $tmpf ; rm $tmpf" # simple
  57. "ls >> $tmpf ; cat $tmpf ; rm $tmpf" # double
  58. "mkdir 2> $tmpf; cat $tmpf ; rm $tmpf" # simple avec fd2 spécifié et erreur
  59. "mkdir 2>> $tmpf; cat $tmpf ; rm $tmpf" # double avec fd2 spécifié et erreur
  60. "ls 2> $tmpf; cat $tmpf ; rm $tmpf" # simple avec fd2 spécifié sans erreur
  61. "ls 2>> $tmpf; cat $tmpf ; rm $tmpf" # double avec fd2 spécifié sans erreur
  62. "ls>$tmpf ; cat $tmpf ; rm $tmpf" # collé
  63. "ls 1> $tmpf ; cat $tmpf" # fd 1 spécifié
  64. ## Redirections gauche
  65. "cat < $tmpf"
  66. #"cat << fin\nnrstai\nfin\n" # double gauche
  67. #"cat << toto\nnrstai\nrsnati\nairnst\ntoto" # double gauche avec autre string de fin
  68. ## Redirections avec fd de sortie spécifié
  69. ### Redirection closed
  70. "ls 1>&-"
  71. "ls 2>&-"
  72. "mkdir -p 2>&-"
  73. "mkdir -p 1>&-"
  74. ### Redirection opened
  75. "echo test 1>&2"
  76. "echo test >&2"
  77. "echo test 2>&1"
  78. #"echo test 2>>&1" # create file named "1"
  79. "echo test 2<&1"
  80. "mkdir -p 2>&1 | cat -e" # La sortie doit être : "rm: nosuchfile: No such file or directory$"
  81. "echo No dollar character 1>&2 | cat -e" # La sortie doit être "No dollar character".
  82. ## Segfault and parsing tests on redirections
  83. ">"
  84. "ls>"
  85. "ls >"
  86. #"> toto", ">toto", ">> toto", ">>toto" # are not working
  87. ">>"
  88. "ls>>"
  89. "ls >>"
  90. "<"
  91. "cat<"
  92. "cat <"
  93. "< toto"
  94. "<toto"
  95. "<<"
  96. "cat<<"
  97. "cat <<"
  98. "<<end"
  99. "<< end"
  100. "echo test 2>&1toto; rm 1toto" # zsh create file named "1toto"
  101. "echo test2>&1 toto"
  102. "echo test2>&1toto; rm 1toto" # zsh create file named "1toto"
  103. ## Mix
  104. "rm $tmpf ; ls ; pwd; ls -a | cat -e | wc > $tmpf ; cat $tmpf ; rm $tmpf" # point-virgules, pipes et redirection
  105. "ls -a | cat -e | wc >> $tmpf ; cat $tmpf ; rm $tmpf" # pipes et double redirection
  106. "mkdir test ; cd test ; ls -a ; ls | cat | wc -c > fifi ; cat fifi ; rm fifi ; cd .. ; rm -rf test"
  107. )
  108. TSH="21sh"
  109. SH="zsh"
  110. TSHO="/tmp/"$TSH"_output"
  111. SHO="/tmp/"$SH"_output"
  112. clear
  113. echo "\033[0;35m##### TESTS UNITAIRES DU SHELL #####\033[0m"
  114. for tu in $tests
  115. do
  116. echo "\033[0;32m>>>> Test \"$tu\" <<<<\033[0m"
  117. ./$TSH -c $tu > $TSHO
  118. $SH -c $tu > $SHO
  119. diff $TSHO $SHO
  120. echo ""
  121. done
  122. echo "\033[0;32m>>>> Test \"sh shell_script.sh\" <<<<\033[0m"
  123. ./$TSH shell_script.sh > $TSHO
  124. $SH shell_script.sh > $SHO
  125. diff $TSHO $SHO