Home | History | Annotate | Download | only in tests
      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