-
Notifications
You must be signed in to change notification settings - Fork 19
/
tester
executable file
Β·129 lines (112 loc) Β· 4.49 KB
/
tester
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash
MINISHELL_PATH="../minishell"
# Run a specific test if the file name was specified
if [[ $1 ]]; then
test_lists=(
$1
)
else
test_lists=(
"builtins"
"pipes"
"redirects"
"extras"
)
fi
if [[ $1 == "wildcards" || $1 == "bonus" ]]; then
MINISHELL_PATH="../minishell_bonus"
fi
BOLD="\e[1m"
YELLOW="\033[0;33m"
GREY="\033[38;5;244m"
PURPLE="\033[0;35m"
BLUE="\033[0;36m"
RED="\e[0;31m"
END="\033[0m"
chmod 000 ./test_files/invalid_permission
mkdir ./outfiles
mkdir ./mini_outfiles
mkdir ./bash_outfiles
printf $RED
echo "π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯";
echo " ";
echo " ββ ββ β ββ β β βββββ β β βββββ β β ββββββ βββββ βββββ ββββββ βββββ βββββ ";
echo " βββ βββ β βββ β β β β β β β β ββ β β ββ β β ββ ";
echo " β ββββ β β β ββ β β βββββ βββββ ββββ β β ββ ββββ βββββ ββ ββββ βββββ ";
echo " β ββ β β β ββ β β β β β β β β ββ β β ββ β β ββ ";
echo " β β β β βββ β βββββ β β βββββ βββββ βββββ ββ βββββ βββββ ββ βββββ β ββ ";
echo " ";
echo "π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯";
echo " ";
PROMPT=$(echo -e "\nexit\n" | $MINISHELL_PATH | head -n 1 | sed "s/\x1B\[[0-9;]\{1,\}[A-Za-z]//g" )
# Helper commands:
REMOVE_COLORS="sed s/\x1B\[[0-9;]\{1,\}[A-Za-z]//g"
REMOVE_EXIT="grep -v ^exit$"
for testfile in ${test_lists[*]}; do
printf $RED
echo ββββββββββββ $testfile
while read teste; do
((i++))
rm -rf ./outfiles/*
rm -rf ./mini_outfiles/*
MINI_OUTPUT=$(echo -e "$teste" | $MINISHELL_PATH 2> /dev/null | $REMOVE_COLORS | grep -vF "$PROMPT" | $REMOVE_EXIT )
MINI_OUTFILES=$(cp ./outfiles/* ./mini_outfiles &>/dev/null)
MINI_EXIT_CODE=$(echo -e "$MINISHELL_PATH\n$teste\necho \$?\nexit\n" | bash 2> /dev/null | $REMOVE_COLORS | grep -vF "$PROMPT" | $REMOVE_EXIT | tail -n 1)
MINI_ERROR_MSG=$(trap "" PIPE && echo "$teste" | $MINISHELL_PATH 2>&1 > /dev/null | grep -o '[^:]*$' )
rm -rf ./outfiles/*
rm -rf ./bash_outfiles/*
BASH_OUTPUT=$(echo -e "$teste" | bash 2> /dev/null)
BASH_EXIT_CODE=$(echo $?)
BASH_OUTFILES=$(cp ./outfiles/* ./bash_outfiles &>/dev/null)
BASH_ERROR_MSG=$(trap "" PIPE && echo "$teste" | bash 2>&1 > /dev/null | grep -o '[^:]*$' | head -n1)
OUTFILES_DIFF=$(diff --brief ./mini_outfiles ./bash_outfiles)
printf $YELLOW
printf "Test %3s: " $i
if [[ "$MINI_OUTPUT" == "$BASH_OUTPUT" && "$MINI_EXIT_CODE" == "$BASH_EXIT_CODE" && -z "$OUTFILES_DIFF" ]]; then
printf β
((ok++))
if [ "$MINI_ERROR_MSG" != "$BASH_ERROR_MSG" ]; then
printf "β οΈ "
fi
else
printf β
fi
printf "$GREY $teste \n$END"
if [ "$OUTFILES_DIFF" ]; then
echo "$OUTFILES_DIFF"
echo mini outfiles:
cat ./mini_outfiles/*
echo bash outfiles:
cat ./bash_outfiles/*
fi
if [ "$MINI_OUTPUT" != "$BASH_OUTPUT" ]; then
echo mini output = \($MINI_OUTPUT\)
echo bash output = \($BASH_OUTPUT\)
fi
if [ "$MINI_EXIT_CODE" != "$BASH_EXIT_CODE" ]; then
echo mini exit code = $MINI_EXIT_CODE
echo bash exit code = $BASH_EXIT_CODE
fi
if [ "$MINI_ERROR_MSG" != "$BASH_ERROR_MSG" ]; then
echo mini error = \($MINI_ERROR_MSG\)
echo bash error = \($BASH_ERROR_MSG\)
fi
done < $testfile
done
chmod 666 ./test_files/invalid_permission
rm -rf ./outfiles
rm -rf ./mini_outfiles
rm -rf ./bash_outfiles
printf $PURPLE
printf $BOLD
echo $ok/$i
printf $END
if [[ "$ok" == "$i" ]]; then
echo "π π π"
echo "π π π"
echo "π π π"
exit 0
else
echo "π π π"
exit 1
fi