mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-28 01:47:47 +00:00
9e2177deff
Makefile's generally hate spaces in filenames, and it's largely impossible to make them work. Due to that, with the change to use a `Makefile` the `EXE=` parameter did not work with spaces, and programs such as "foo bar.bas" would not compile because it produces "foo bar.exe" which has a space in the name. There were options here, but in this very specific case it is actually possible to allow the Makefile to work with spaces. `EXE` is only a single filename, so as long as we always quote it correctly and the provided `EXE=` parameter escapes the spaces with `\` then it will work. Thus, we modified the Makefile to always do the quoting, and modified QB64 to automatically escape the spaces in the executable name provided to the Makefile. I also modified the `compile_tests` to test that spaces in filenames and paths of the executable correctly compile. Fixes: #80
61 lines
1.5 KiB
Bash
Executable file
61 lines
1.5 KiB
Bash
Executable file
#!/bin/bash
|
|
# Arg 1: qb54 location
|
|
|
|
PREFIX="Compilation"
|
|
|
|
RESULTS_DIR="./tests/results/$PREFIX"
|
|
|
|
mkdir -p $RESULTS_DIR
|
|
|
|
QB64=$1
|
|
|
|
show_failure()
|
|
{
|
|
cat "$RESULTS_DIR/$1-compile_result.txt"
|
|
cat "$RESULTS_DIR/$1-compilelog.txt"
|
|
}
|
|
|
|
show_incorrect_result()
|
|
{
|
|
printf "EXPECTED: '%s'\n" "$1"
|
|
printf "GOT: '%s'\n" "$2"
|
|
}
|
|
|
|
for test in ./tests/compile_tests/*
|
|
do
|
|
test=$(basename "$test")
|
|
|
|
TESTCASE="$test"
|
|
EXE="$RESULTS_DIR/$test - output"
|
|
|
|
# Clear out temp folder before next compile, avoids stale compilelog files
|
|
rm -fr ./internal/temp/*
|
|
|
|
"$QB64" -x "./tests/compile_tests/$test/test.bas" -o "$EXE" 1>"$RESULTS_DIR/$test-compile_result.txt"
|
|
ERR=$?
|
|
cp_if_exists ./internal/temp/compilelog.txt "$RESULTS_DIR/$test-compilelog.txt"
|
|
|
|
(exit $ERR)
|
|
assert_success_named "Compile" "Compilation Error:" show_failure "$test"
|
|
|
|
test -f "$EXE"
|
|
assert_success_named "exe exists" "$test-output executable does not exist!" show_failure "$test"
|
|
|
|
if [ ! -f "./tests/compile_tests/$test/test.output" ]; then
|
|
continue
|
|
fi
|
|
|
|
expectedResult="$(cat "./tests/compile_tests/$test/test.output")"
|
|
|
|
pushd . > /dev/null
|
|
cd "./tests/compile_tests/$test"
|
|
testResult=$("../../../$EXE" 2>&1)
|
|
ERR=$?
|
|
popd > /dev/null
|
|
|
|
(exit $ERR)
|
|
assert_success_named "run" "Execution Error:" echo "$testResult"
|
|
|
|
[ "$testResult" == "$expectedResult" ]
|
|
assert_success_named "result" "Result is wrong:" show_incorrect_result "$expectedResult" "$testResult"
|
|
done
|