enhanced the test runner for errors to support multiple scripts in a single file
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
d99a514278
commit
4d5f2266b4
@ -16,14 +16,6 @@ check_ERRORS = \
|
||||
do-5001.err \
|
||||
do-5002.err \
|
||||
feed-5001.err \
|
||||
feed-5002.err \
|
||||
feed-5003.err \
|
||||
feed-5004.err \
|
||||
feed-5005.err \
|
||||
feed-5006.err \
|
||||
feed-5007.err \
|
||||
feed-5008.err \
|
||||
feed-5009.err \
|
||||
mlist-5001.err \
|
||||
var-5001.err \
|
||||
var-5002.err \
|
||||
|
@ -487,14 +487,6 @@ check_ERRORS = \
|
||||
do-5001.err \
|
||||
do-5002.err \
|
||||
feed-5001.err \
|
||||
feed-5002.err \
|
||||
feed-5003.err \
|
||||
feed-5004.err \
|
||||
feed-5005.err \
|
||||
feed-5006.err \
|
||||
feed-5007.err \
|
||||
feed-5008.err \
|
||||
feed-5009.err \
|
||||
mlist-5001.err \
|
||||
var-5001.err \
|
||||
var-5002.err \
|
||||
|
81
t/err.sh
81
t/err.sh
@ -3,22 +3,73 @@
|
||||
for i in $@; do :; done
|
||||
script="$i"
|
||||
|
||||
expected_errinfo=$(grep -n -o -E "##ERROR: .+" "$script" 2>/dev/null)
|
||||
[ -z "$expected_errinfo" ] && {
|
||||
echo "INVALID TESTER - $script contains no ERROR information"
|
||||
exit 1
|
||||
run_partfile() {
|
||||
l_cmd="";
|
||||
l_nargs=$#
|
||||
|
||||
while [ $# -gt 3 ]
|
||||
do
|
||||
l_cmd="$l_cmd $1"
|
||||
shift
|
||||
done
|
||||
|
||||
l_script="$1"
|
||||
shift ## skip the original script.
|
||||
l_partno="$1"
|
||||
shift ## partno
|
||||
|
||||
l_partfile="$1"
|
||||
l_cmd="$l_cmd $l_partfile"
|
||||
|
||||
l_expected_errinfo=$(grep -n -o -E "##ERROR: .+" "$l_partfile" 2>/dev/null)
|
||||
[ -z "$l_expected_errinfo" ] && {
|
||||
echo "ERROR: INVALID TESTER - $l_script($l_partno) contains no ERROR information"
|
||||
return 1
|
||||
}
|
||||
|
||||
l_expected_errline=$(echo $l_expected_errinfo | cut -d: -f1)
|
||||
l_xlen=$(echo $l_expected_errline | wc -c)
|
||||
l_xlen=$(expr $l_xlen + 10)
|
||||
l_expected_errmsg=$(echo $l_expected_errinfo | cut -c${l_xlen}-)
|
||||
l_output=`$l_cmd 2>&1`
|
||||
## the regular expression is not escaped properly. the error information must not
|
||||
## include specifial regex characters to avoid problems.
|
||||
echo "$l_output" | grep -E "ERROR:.+${l_partfile}\[${l_expected_errline},[[:digit:]]+\] ${l_expected_errmsg}" >/dev/null 2>&1 || {
|
||||
echo "ERROR: error not raised - $l_script($l_partno) - $l_output"
|
||||
return 1
|
||||
}
|
||||
|
||||
echo "OK"
|
||||
return 0
|
||||
}
|
||||
|
||||
expected_errline=$(echo $expected_errinfo | cut -d: -f1)
|
||||
xlen=$(echo $expected_errline | wc -c)
|
||||
xlen=$(expr $xlen + 10)
|
||||
expected_errmsg=$(echo $expected_errinfo | cut -c${xlen}-)
|
||||
|
||||
output=$($@ 2>&1)
|
||||
## the regular expression is not escaped properly. the error information must not
|
||||
## include specifial regex characters to avoid problems.
|
||||
echo "$output" | grep -E "ERROR:.+${script}\[${expected_errline},[[:digit:]]+\] ${expected_errmsg}" || {
|
||||
echo "$script - $output"
|
||||
exit 1
|
||||
ever_failed=0
|
||||
partfile=`mktemp`
|
||||
partno=0
|
||||
partlines=0
|
||||
> "$partfile"
|
||||
|
||||
## TODO: don't use while read line..
|
||||
while IFS= read -r line
|
||||
do
|
||||
if [ "$line" = "---" ]
|
||||
then
|
||||
[ $partlines -gt 0 ] && {
|
||||
run_partfile "$@" "$partno" "$partfile" || ever_failed=1
|
||||
}
|
||||
partno=`expr $partno + 1`
|
||||
partlines=0
|
||||
> "$partfile"
|
||||
else
|
||||
echo "$line" >> "$partfile"
|
||||
partlines=`expr $partlines + 1`
|
||||
fi
|
||||
done < "$script"
|
||||
|
||||
[ $partlines -gt 0 ] && {
|
||||
run_partfile "$@" "$partno" "$partfile" || ever_failed=1
|
||||
}
|
||||
exit 0
|
||||
|
||||
rm -f "$partfile"
|
||||
exit $ever_failed
|
||||
|
@ -1,2 +1,69 @@
|
||||
## you can't have another colon before the method..
|
||||
(obj: :method) ##ERROR: syntax error - : disallowed
|
||||
|
||||
---
|
||||
|
||||
## while EOL is ignored in explicitly parenthesized XLIST, a semicolon must not be.
|
||||
(printf
|
||||
"hello, world\n"
|
||||
)
|
||||
|
||||
(printf; ##ERROR: syntax error - unexpected semicolon
|
||||
"hello, world\n"
|
||||
)
|
||||
|
||||
---
|
||||
|
||||
## semicolon inside #{} must raise a syntax error
|
||||
|
||||
a := #{
|
||||
"k1":
|
||||
"hello k1\n",
|
||||
"k2":
|
||||
"hello k2\n"; ##ERROR: syntax error - unexpected semicolon
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
{
|
||||
;;;
|
||||
|
||||
(do
|
||||
(printf "hello\n")
|
||||
(printf "hello\n")
|
||||
);;
|
||||
|
||||
k := [10 ; 20 ]; ##ERROR: syntax error - unexpected semicolon
|
||||
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
## a code point greater than 255 is illegal in the character literal prefix fixed with b.
|
||||
|
||||
printf "[%c] [#x%x] [%d]\n" '★' '★' #x2605;
|
||||
printf "[%c]\n" b'★'; ##ERROR: syntax error - wrong character literal
|
||||
|
||||
---
|
||||
|
||||
## #b can be followed by [ or binary digits.
|
||||
|
||||
printf "%O\n" #b[ 10 20 30 ];
|
||||
printf "%010b\n" #b0101;
|
||||
printf "%O\n" #bxy; ##ERROR: syntax error - neither valid radixed number nor valid directive #bxy
|
||||
|
||||
---
|
||||
|
||||
printf :*; ##ERROR: syntax error - prohibited in this context
|
||||
|
||||
---
|
||||
|
||||
defun :: fun1() { ##ERROR: syntax error - function name not symbol in defun
|
||||
return 10;
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
defun :* fun1() { ##ERROR: syntax error - function name not symbol in defun
|
||||
return 10;
|
||||
};
|
||||
|
@ -1,8 +0,0 @@
|
||||
## while EOL is ignored in explicitly parenthesized XLIST, a semicolon must not be.
|
||||
(printf
|
||||
"hello, world\n"
|
||||
)
|
||||
|
||||
(printf; ##ERROR: syntax error - unexpected semicolon
|
||||
"hello, world\n"
|
||||
)
|
@ -1,9 +0,0 @@
|
||||
## semicolon inside #{} must raise a syntax error
|
||||
|
||||
a := #{
|
||||
"k1":
|
||||
"hello k1\n",
|
||||
"k2":
|
||||
"hello k2\n"; ##ERROR: syntax error - unexpected semicolon
|
||||
};
|
||||
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
;;;
|
||||
|
||||
(do
|
||||
(printf "hello\n")
|
||||
(printf "hello\n")
|
||||
);;
|
||||
|
||||
k := [10 ; 20 ]; ##ERROR: syntax error - unexpected semicolon
|
||||
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
## a code point greater than 255 is illegal in the character literal prefix fixed with b.
|
||||
|
||||
printf "[%c] [#x%x] [%d]\n" '★' '★' #x2605;
|
||||
printf "[%c]\n" b'★'; ##ERROR: syntax error - wrong character literal
|
@ -1,6 +0,0 @@
|
||||
## #b can be followed by [ or binary digits.
|
||||
|
||||
printf "%O\n" #b[ 10 20 30 ];
|
||||
printf "%010b\n" #b0101;
|
||||
printf "%O\n" #bxy; ##ERROR: syntax error - neither valid radixed number nor valid directive #bxy
|
||||
|
@ -1 +0,0 @@
|
||||
printf :*; ##ERROR: syntax error - prohibited in this context
|
@ -1,3 +0,0 @@
|
||||
defun :: fun1() { ##ERROR: syntax error - function name not symbol in defun
|
||||
return 10;
|
||||
};
|
@ -1,3 +0,0 @@
|
||||
defun :* fun1() { ##ERROR: syntax error - function name not symbol in defun
|
||||
return 10;
|
||||
};
|
@ -1,6 +1,6 @@
|
||||
set t (
|
||||
class | x | {
|
||||
defun :* make() { set x 1234; return self; };
|
||||
defun :* make() { x := 1234; return self; };
|
||||
defun get-x() { return x };
|
||||
}
|
||||
);
|
||||
@ -16,11 +16,11 @@ if (nqv? t 1234) { printf "ERROR: t must be 1234\n" } \
|
||||
else { printf "OK: t is %d\n" t };
|
||||
|
||||
|
||||
set j #{ ((X:make):get-x): 9999, 4512: ((X: make): get-x) };
|
||||
set v (dic.get j 1234);
|
||||
j := #{ ((X:make):get-x): 9999, 4512: ((X: make): get-x) };
|
||||
v := (dic.get j 1234);
|
||||
if (nqv? v 9999) { printf "ERROR: v is not 9999\n" } \
|
||||
else { printf "OK: value is %d\n" v };
|
||||
|
||||
set v (dic.get j 4512);
|
||||
v := (dic.get j 4512);
|
||||
if (nqv? v 1234) { printf "ERROR: v is not 1234\n" } \
|
||||
else { printf "OK: value is %d\n" v };
|
||||
|
Loading…
Reference in New Issue
Block a user