test.sh revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1986b8f798272d3ae2898617c8fb089156a5941c0Ian Romanick#!/bin/bash 2a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# 3a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# Copyright 2014 The Chromium Authors. All rights reserved. 4a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# Use of this source code is governed by a BSD-style license that can be 5a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# found in the LICENSE file. 6a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# 7a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# Hacky, primitive testing: This runs the style plugin for a set of input files 8a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# and compares the output with golden result files. 9a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick 10a87ac255cf7ef0672b4de865d82e6a40c93b57dIan RomanickE_BADARGS=65 11a87ac255cf7ef0672b4de865d82e6a40c93b57dIan RomanickE_FAILEDTEST=1 12a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick 13a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanickfailed_any_test= 14a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick 15a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick# Prints usage information. 16a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanickusage() { 17a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick echo "Usage: $(basename "${0}")" \ 18a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick "<path to clang>" \ 19a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick "<path to plugin>" 20a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick echo "" 21a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick echo " Runs all the libBlinkGCPlugin unit tests" 22a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick echo "" 23a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick} 24a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick 25e309a6051d1a04ee581f0a47c6c585918fba1096Ian Romanick# Runs a single test case. 26e309a6051d1a04ee581f0a47c6c585918fba1096Ian Romanickdo_testcase() { 27e309a6051d1a04ee581f0a47c6c585918fba1096Ian Romanick local flags="" 28e309a6051d1a04ee581f0a47c6c585918fba1096Ian Romanick if [ -e "${3}" ]; then 290044e7edcea22d2456c051a1c4b744a26960ad27Ian Romanick flags="$(cat "${3}")" 3078b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick fi 310044e7edcea22d2456c051a1c4b744a26960ad27Ian Romanick local output="$("${CLANG_PATH}" -c -Wno-c++11-extensions \ 32a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick -Xclang -load -Xclang "${PLUGIN_PATH}" \ 33a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick -Xclang -add-plugin -Xclang blink-gc-plugin ${flags} ${1} 2>&1)" 34a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick local json="${input%cpp}graph.json" 35a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick if [ -f "$json" ]; then 36a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick output="$(python ../process-graph.py -c ${json} 2>&1)" 37a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick fi 38a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick local diffout="$(echo "${output}" | diff - "${2}")" 390044e7edcea22d2456c051a1c4b744a26960ad27Ian Romanick if [ "${diffout}" = "" ]; then 40a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick echo "PASS: ${1}" 41a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick else 42a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick failed_any_test=yes 4378b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick echo "FAIL: ${1}" 4478b51b0fdd61b58940f9043ef9046217552f2c70Ian Romanick echo "Output of compiler:" 4544e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke echo "${output}" 4644e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke echo "Expected output:" 4744e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke cat "${2}" 4844e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke echo 4944e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke fi 5044e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke} 5144e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke 5244e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke# Validate input to the script. 5344e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunkeif [[ -z "${1}" ]]; then 5444e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke usage 55fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke exit ${E_BADARGS} 5644e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunkeelif [[ -z "${2}" ]]; then 5744e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunke usage 58a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick exit ${E_BADARGS} 5944e1dfa2df4de3e2de963f0505cdadade6fe8180Kenneth Graunkeelif [[ ! -x "${1}" ]]; then 60d27ec2461bca2625d09a3592ec8cc4137d4347f3Ian Romanick echo "${1} is not an executable" 61d27ec2461bca2625d09a3592ec8cc4137d4347f3Ian Romanick usage 62d27ec2461bca2625d09a3592ec8cc4137d4347f3Ian Romanick exit ${E_BADARGS} 63a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanickelif [[ ! -f "${2}" ]]; then 64a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick echo "${2} could not be found" 65a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick usage 66fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke exit ${E_BADARGS} 67fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunkeelse 68fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke export CLANG_PATH="${1}" 69fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke export PLUGIN_PATH="${2}" 70fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke echo "Using clang ${CLANG_PATH}..." 71fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke echo "Using plugin ${PLUGIN_PATH}..." 72fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke 73fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke # The golden files assume that the cwd is this directory. To make the script 74fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke # work no matter what the cwd is, explicitly cd to there. 75fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke cd "$(dirname "${0}")" 76fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunkefi 77fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke 78fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunkefor input in *.cpp; do 79fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke do_testcase "${input}" "${input%cpp}txt" "${input%cpp}flags" 80fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunkedone 81fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunke 82fb9fb5f51deca28ed1ec7b71759fb71fc26a0ab6Kenneth Graunkeif [[ "${failed_any_test}" ]]; then 83a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick exit ${E_FAILEDTEST} 84a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanickfi 85a87ac255cf7ef0672b4de865d82e6a40c93b57dIan Romanick