From e60737d3208f11403a637f44c1667742ce21460b Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Wed, 18 Nov 2015 17:52:46 +0000 Subject: [PATCH] 'make perf': Unbreak by porting over 'make test' harness changes. In particular, tests were relying on the harness to provide a sandbox working directory, but the perf harness wasn't providing that. --- tests/test-perfs.zsh | 66 ++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/tests/test-perfs.zsh b/tests/test-perfs.zsh index 0d4adc3..45a800b 100755 --- a/tests/test-perfs.zsh +++ b/tests/test-perfs.zsh @@ -1,6 +1,6 @@ #!/usr/bin/env zsh # ------------------------------------------------------------------------------------------------- -# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors +# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, are permitted @@ -31,20 +31,20 @@ # Check an highlighter was given as argument. [[ -n "$1" ]] || { - echo "You must provide the name of a valid highlighter as argument." >&2 - exit 1 + echo >&2 "Bail out! You must provide the name of a valid highlighter as argument." + exit 2 } # Check the highlighter is valid. [[ -f ${0:h:h}/highlighters/$1/$1-highlighter.zsh ]] || { - echo "Could not find highlighter '$1'." >&2 - exit 1 + echo >&2 "Bail out! Could not find highlighter '$1'." + exit 2 } # Check the highlighter has test data. [[ -d ${0:h:h}/highlighters/$1/test-data ]] || { - echo "Highlighter '$1' has no test data." >&2 - exit 1 + echo >&2 "Bail out! Highlighter '$1' has no test data." + exit 2 } # Load the main script. @@ -53,23 +53,49 @@ # Activate the highlighter. ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) -# Process each test data file in test data directory. -for data_file in ${0:h:h}/highlighters/$1/test-data/*; do +# Runs a highlighting test +# $1: data file +run_test_internal() { + local -a highlight_zone + local unused_highlight='bg=red,underline' # a style unused by anything else, for tests to use + + local tests_tempdir="$1"; shift + local srcdir="$PWD" + builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 } + + echo -n "# ${1:t:r}: " # Load the data and prepare checking it. - BUFFER= - echo -n "* ${data_file:t:r}: " - . $data_file + PREBUFFER= BUFFER= ; + . "$srcdir"/"$1" - # Check the data declares $BUFFER. - if [[ ${#BUFFER} -eq 0 ]]; then - echo "KO\n - 'BUFFER' is not declared or blank." - else + # Check the data declares $PREBUFFER or $BUFFER. + [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; } - # Measure the time taken by _zsh_highlight. - TIMEFMT="%*Es" - time ( BUFFER="$BUFFER" && _zsh_highlight) + # Measure the time taken by _zsh_highlight. + TIMEFMT="%*Es" + time (BUFFER="$BUFFER" && _zsh_highlight) +} - fi +run_test() { + # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. + local __tests_tempdir + __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || { + echo >&2 "Bail out! mktemp failed"; return 1 + } + typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on + { + (run_test_internal "$__tests_tempdir" "$@") + } always { + rm -rf -- "$__tests_tempdir" + } +} + +# Process each test data file in test data directory. +for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do + run_test "$data_file" + (( $pipestatus[1] )) && exit 2 done + +exit 0