1 #!/bin/bash 2 # 3 # Copyright 2014 The Chromium Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 # 7 # Hacky, primitive testing: This runs the style plugin for a set of input files 8 # and compares the output with golden result files. 9 10 E_BADARGS=65 11 E_FAILEDTEST=1 12 13 failed_any_test= 14 15 # Prints usage information. 16 usage() { 17 echo "Usage: $(basename "${0}")" \ 18 "<path to clang>" \ 19 "<path to plugin>" 20 echo "" 21 echo " Runs all the libBlinkGCPlugin unit tests" 22 echo "" 23 } 24 25 # Runs a single test case. 26 do_testcase() { 27 local flags="" 28 if [ -e "${3}" ]; then 29 flags="$(cat "${3}")" 30 fi 31 local output="$("${CLANG_PATH}" -c -Wno-c++11-extensions \ 32 -Xclang -load -Xclang "${PLUGIN_PATH}" \ 33 -Xclang -add-plugin -Xclang blink-gc-plugin ${flags} ${1} 2>&1)" 34 local json="${input%cpp}graph.json" 35 if [ -f "$json" ]; then 36 output="$(python ../process-graph.py -c ${json} 2>&1)" 37 fi 38 local diffout="$(echo "${output}" | diff - "${2}")" 39 if [ "${diffout}" = "" ]; then 40 echo "PASS: ${1}" 41 else 42 failed_any_test=yes 43 echo "FAIL: ${1}" 44 echo "Output of compiler:" 45 echo "${output}" 46 echo "Expected output:" 47 cat "${2}" 48 echo 49 fi 50 } 51 52 # Validate input to the script. 53 if [[ -z "${1}" ]]; then 54 usage 55 exit ${E_BADARGS} 56 elif [[ -z "${2}" ]]; then 57 usage 58 exit ${E_BADARGS} 59 elif [[ ! -x "${1}" ]]; then 60 echo "${1} is not an executable" 61 usage 62 exit ${E_BADARGS} 63 elif [[ ! -f "${2}" ]]; then 64 echo "${2} could not be found" 65 usage 66 exit ${E_BADARGS} 67 else 68 export CLANG_PATH="${1}" 69 export PLUGIN_PATH="${2}" 70 echo "Using clang ${CLANG_PATH}..." 71 echo "Using plugin ${PLUGIN_PATH}..." 72 73 # The golden files assume that the cwd is this directory. To make the script 74 # work no matter what the cwd is, explicitly cd to there. 75 cd "$(dirname "${0}")" 76 fi 77 78 for input in *.cpp; do 79 do_testcase "${input}" "${input%cpp}txt" "${input%cpp}flags" 80 done 81 82 if [[ "${failed_any_test}" ]]; then 83 exit ${E_FAILEDTEST} 84 fi 85