#!/bin/bash
# autopkgtest check: process worksheet examples
set -ue

if [ ! -v AUTOPKGTEST_TMP ]; then
	AUTOPKGTEST_TMP=$(mktemp -d -p $HOME/forge/wxmaxima/ AUTOPKGTEST_TMP-XXXXXXX)
fi

cd $AUTOPKGTEST_TMP

## when $HOME/.config is nonexistant wxmaxima
## creates it with inapropriate permissions
mkdir -p -m 700 $HOME/.config

if [ ! -v XDG_RUNTIME_DIR ]; then
	export XDG_RUNTIME_DIR=$AUTOPKGTEST_TMP/XDG_RUNTIME_DIR
	mkdir -p -m 700 XDG_RUNTIME_DIR
fi

cp -prd /usr/share/doc/wxmaxima/examples .
cd examples

mkdir -p BOOK

declare -A skiplist=(
[diffEquations]="asks questions"
[www-Example1]="asks questions"
####[fittingEquations]="apparent maxima library issue"
)

declare -A skippablelist=(
[draw2d]="DRI hazard"
)

declare -A testresults=()

## at least one log file may exist (see postamble)
touch stamp.log

## preload/precompile some maxima packages (and grab along some info)
PREAMAMPLEMXM=preamble.mxm
cat > $PREAMAMPLEMXM <<-EOS
	build_info();
	timedate();
	system("hostname -f");
	load("operatingsystem");
	load("draw");
	load("wrstcse");
	load("mnewton");
	load("minpack");
	load("interpol");
	load("lsquares");
	load("fmin_cobyla");
	load("engineering-format");
	quit();
	EOS
maxima --quit-on-error --batch $PREAMAMPLEMXM

shopt -s nullglob

set -o pipefail
set +e
STATUS=0
for wxm in *.wxm *.wxmx ; do
	gnwxm=${wxm%.*}
	wxnext=${wxm##*.}
	if [[ -v skiplist[$gnwxm] ]]; then
		echo "SKIP: $wxm (reason: ${skiplist[$gnwxm]})"
		testresults[$wxm]="SKIP"
	else
		echo "===8><--- $wxm ---"
		cp -p -t BOOK $wxm
		xvfb-run -a wxmaxima --batch --exit-on-error --logtostderr BOOK/$wxm 2>&1 | tee $gnwxm-$wxnext.log
		if [ $? -eq 0 ]; then
			testresults[$wxm]="PASS"
		elif [[ -v skippablelist[$gnwxm] ]]; then
			testresults[$wxm]="IGNO"
		else
			testresults[$wxm]="FAIL"
			STATUS=1
		fi
		echo "----------><8==="
	fi
	echo
done
set -e
set +o pipefail

echo "======================="
for key in "${!testresults[@]}"; do
	value=${testresults[$key]}
	gnwxm=${key%.*}
	case $value in
		SKIP) printf "SKIP: %-31s (reason: %s)\n" "$key" "${skiplist[$gnwxm]}" ;;
		IGNO) printf "IGNO: %-31s (reason: %s)\n" "$key" "${skippablelist[$gnwxm]}" ;;
		*)    printf "%s: %s\n" "$value" "$key" ;;
	esac
done
echo "======================="
if [ $STATUS -ne 0 ]; then
	echo "FAIL"
else
	echo "PASS"
fi
echo "======================="
echo

if [ $STATUS -ne 0 ]; then
	exit 1
fi

#grep -e 'Error:' -e 'Maxima error:' *.log || true #&& exit 2
grep -i -e 'error' *.log || true #&& exit 3
echo

exit 0
