51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 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. ${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}
 | 
						|
 |