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 |