tests: Provide an independent, auto-cleaned working directory to each test.
Fixes zsh-users/zsh-syntax-highlighting#182. Prerequisite for testing issue #228. * tests/test-highlighting.zsh (run_test): Move functionality to run_test_internal; make run_test be a wrapper that handles creating and cleaning up the tempdir. * tests/README.md: Document the new feature. * "highlighters/main/test-data/path-space- .zsh" * highlighters/main/test-data/path-tilde-named.zsh * highlighters/main/test-data/path.zsh Change test data to not depend on being run from the source directory.
This commit is contained in:
		
							parent
							
								
									b5d02a2f49
								
							
						
					
					
						commit
						c015339202
					
				|  | @ -27,9 +27,11 @@ | |||
| # vim: ft=zsh sw=2 ts=2 et | ||||
| # ------------------------------------------------------------------------------------------------- | ||||
| 
 | ||||
| BUFFER='ls highlighters/main/test-data/path-space-\ .zsh' | ||||
| mkdir A | ||||
| touch "A/mu with spaces" | ||||
| BUFFER='ls A/mu\ with\ spaces' | ||||
| 
 | ||||
| expected_region_highlight=( | ||||
|   "1 2  $ZSH_HIGHLIGHT_STYLES[command]" # ls | ||||
|   "4 48 $ZSH_HIGHLIGHT_STYLES[path]"    # highlighters/main/test-data/path-space-\ .zsh | ||||
|   "4 19 $ZSH_HIGHLIGHT_STYLES[path]"    # A/mu\ with\ spaces | ||||
| ) | ||||
|  |  | |||
|  | @ -27,11 +27,13 @@ | |||
| # vim: ft=zsh sw=2 ts=2 et | ||||
| # ------------------------------------------------------------------------------------------------- | ||||
| 
 | ||||
| hash -d D=highlighters/main/test-data | ||||
| mkdir mydir | ||||
| touch mydir/path-tilde-named.test | ||||
| hash -d D=mydir | ||||
| 
 | ||||
| BUFFER='ls ~D/path-tilde-named.zsh' | ||||
| BUFFER='ls ~D/path-tilde-named.test' | ||||
| 
 | ||||
| expected_region_highlight=( | ||||
|   "1 2  $ZSH_HIGHLIGHT_STYLES[command]" # ls | ||||
|   "4 26 $ZSH_HIGHLIGHT_STYLES[path]"    # ~D/path-tilde-named.zsh | ||||
|   "4 27 $ZSH_HIGHLIGHT_STYLES[path]"    # ~D/path-tilde-named.test | ||||
| ) | ||||
|  |  | |||
|  | @ -27,9 +27,11 @@ | |||
| # vim: ft=zsh sw=2 ts=2 et | ||||
| # ------------------------------------------------------------------------------------------------- | ||||
| 
 | ||||
| BUFFER='ls highlighters/main/test-data/path.zsh' | ||||
| mkdir A | ||||
| touch A/mu | ||||
| BUFFER='ls A/mu' | ||||
| 
 | ||||
| expected_region_highlight=( | ||||
|   "1 2  $ZSH_HIGHLIGHT_STYLES[command]" # ls | ||||
|   "4 39 $ZSH_HIGHLIGHT_STYLES[path]"    # highlighters/main/test-data/path.zsh | ||||
|   "1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls | ||||
|   "4 7 $ZSH_HIGHLIGHT_STYLES[path]"     # A/mu | ||||
| ) | ||||
|  |  | |||
|  | @ -17,7 +17,8 @@ _Note_: `$region_highlight` uses the same `"$i $j $style"` syntax but interprets | |||
| 
 | ||||
| **Isolation**: Each test is run in a separate subshell, so any variables, aliases, functions, etc., | ||||
| it defines will be visible to the tested code (that computes `$region_highlight`), but will not affect | ||||
| subsequent tests. | ||||
| subsequent tests.  The current working directory of tests is set to a newly-created empty directory, | ||||
| which is automatically cleaned up after the test exits. | ||||
| 
 | ||||
| 
 | ||||
| highlighting test | ||||
|  |  | |||
|  | @ -55,15 +55,19 @@ ZSH_HIGHLIGHT_HIGHLIGHTERS=($1) | |||
| 
 | ||||
| # Runs a highlighting test | ||||
| # $1: data file | ||||
| run_test() { | ||||
| 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 "# ${1:t:r}" | ||||
| 
 | ||||
|   # Load the data and prepare checking it. | ||||
|   PREBUFFER= BUFFER= ; | ||||
|   . "$1" | ||||
|   . "$srcdir"/"$1" | ||||
| 
 | ||||
|   # 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; } | ||||
|  | @ -108,6 +112,21 @@ run_test() { | |||
|   done | ||||
| } | ||||
| 
 | ||||
| run_test() { | ||||
|   # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?. | ||||
|   local __tests_tempdir; __tests_tempdir="$(mktemp -d)" | ||||
|   if [[ $? -ne 0 ]] || [[ -z $__tests_tempdir ]] || [[ ! -d $__tests_tempdir ]]; then | ||||
|     echo >&2 "Bail out! mktemp failed"; return 1 | ||||
|   fi | ||||
|   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. | ||||
| integer something_failed=0 | ||||
| for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue