Files
Pyarmor-Static-Unpack-1shot/tests/decompyle_test.sh

133 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
testdir="$srcdir/tests"
testname="$1"
outdir="$2"
if [[ -z "$PYTHON_EXE" ]]; then
PYTHON_EXE="$(which python3)"
fi
if [[ -z "$testname" ]]; then
echo "Missing required parameter: testname" >&2
exit 1
fi
if [[ -z "$outdir" ]]; then
echo "Missing required parameter: outdir" >&2
exit 1
fi
shopt -s nullglob
compfiles=( "$testdir/compiled/$testname".?.?.pyc )
xfcfiles=( "$testdir/xfail/$testname".?.?.pyc )
shopt -u nullglob
if (( ${#compfiles[@]} + ${#xfcfiles[@]} == 0 )); then
echo "No compiled/xfail modules found for $testname.*.pyc"
exit 1
fi
mkdir -p "$outdir"
echo -ne "\033[1m*** $testname:\033[0m "
fails=0
xfails=0
upass=0
efiles=()
errors=()
upfiles=()
for pyc in "${compfiles[@]}" "${xfcfiles[@]}"; do
base="$outdir/$(basename "$pyc")"
./pycdc "$pyc" -o "$base.src.py" >"$base.err" 2>&1
if (( $? )) || [[ -s "$base.err" ]]
then
if [[ "$(dirname "$pyc")" =~ xfail ]]
then
let xfails+=1
else
let fails+=1
efiles+=("$(basename "$pyc")")
errors+=("$(cat "$base.err")")
fi
continue
fi
"$PYTHON_EXE" "$srcdir"/scripts/token_dump "$base.src.py" 2>"$base.tok.err" 1>"$base.tok.txt"
if (( $? )) || [[ -s "$base.tok.err" ]]
then
if [[ "$(dirname "$pyc")" =~ xfail ]]
then
let xfails+=1
else
let fails+=1
efiles+=("$(basename "$pyc")")
errors+=("$(cat "$base.tok.err")")
fi
continue
fi
diff -u "$testdir/tokenized/$testname.txt" "$base.tok.txt" >"$base.tok.diff"
if (( $? ))
then
if [[ "$(dirname "$pyc")" =~ xfail ]]
then
let xfails+=1
else
let fails+=1
efiles+=("$(basename "$pyc")")
errors+=("$base.tok.txt does not match $testdir/tokenized/$testname.txt:\n$(cat "$base.tok.diff")")
fi
else
if [[ "$(dirname "$pyc")" =~ xfail ]]
then
let upass+=1
upfiles+=("$(basename "$pyc")")
fi
fi
done
if (( $fails == 0 ))
then
if (( $xfails != 0 ))
then
if (( ${#compfiles[@]} == 0 ))
then
echo -e "\033[33mXFAIL ($xfails)\033[0m"
else
echo -e "\033[32mPASS (${#compfiles[@]})\033[33m + XFAIL ($xfails)\033[0m"
fi
else
echo -e "\033[32mPASS (${#compfiles[@]})\033[0m"
fi
else
if (( $xfails != 0 ))
then
echo -e "\033[31mFAIL ($fails of ${#compfiles[@]})\033[33m + XFAIL ($xfails)\033[0m"
else
echo -e "\033[31mFAIL ($fails of ${#compfiles[@]})\033[0m"
fi
for ((i=0; i<${#efiles[@]}; i++))
do
echo -e "\t\033[31m${efiles[i]}\033[0m"
echo -e "${errors[i]}\n"
done
fi
if (( $upass != 0 ))
then
echo -e "\033[1;34mUnexpected passes:\033[0m"
for ((i=0; i<${#upfiles[@]}; i++))
do
echo -e "\t\033[33m${upfiles[i]}\033[0m"
done
fi
if (( $fails != 0 ))
then
exit 1
fi