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