50 lines
1.1 KiB
Bash
Executable File
50 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Try to compile all programs in the test/compilation_failure directory.
|
|
# Compilation must fail and the error message must match the pattern in the
|
|
# corresponding .pattern file.
|
|
#
|
|
|
|
DIR="test/compilation_failure"
|
|
CXX=${CXX:-clang++}
|
|
|
|
if [ `uname -s` = "Darwin" ]; then
|
|
CXXFLAGS="$CXXFLAGS -stdlib=libc++"
|
|
fi
|
|
|
|
error_msg() {
|
|
if [ ! -z "$1" ]; then
|
|
printf 'output was:\n=======\n%s\n=======\n' "$1"
|
|
fi
|
|
}
|
|
|
|
exit_code=0
|
|
for test_code in $DIR/*.cpp; do
|
|
name=`basename $test_code .cpp`
|
|
|
|
result=`${CXX} -std=c++11 -c -o /dev/null -I./include ${CXXFLAGS} ${test_code} 2>&1`
|
|
status=$?
|
|
|
|
if [ $status = 1 ]; then
|
|
expected=`sed -n -e '/@EXPECTED/s/.*: \+//p' ${test_code}`
|
|
if echo $result | grep -q "$expected"; then
|
|
echo "$name [OK]"
|
|
else
|
|
echo "$name [FAILED - wrong error message]"
|
|
echo "Expected error message: $expected"
|
|
error_msg "$result"
|
|
exit_code=1
|
|
fi
|
|
elif [ $status = 0 ]; then
|
|
echo "$name [FAILED - compile was successful]"
|
|
error_msg "$result"
|
|
exit_code=1
|
|
else
|
|
echo "$name [FAILED - unknown error in compile]"
|
|
error_msg "$result"
|
|
exit_code=1
|
|
fi
|
|
done
|
|
|
|
exit ${exit_code}
|