" Runs all the indent tests for which there is no .out file.
"
" Current directory must be runtime/indent.

" Only do this with the +eval feature
if 1

set nocp
filetype indent on
syn on
set nowrapscan
set report=9999
set modeline
set debug=throw

au! SwapExists * call HandleSwapExists()
func HandleSwapExists()
  " Ignore finding a swap file for the test input and output, the user might be
  " editing them and that's OK.
  if expand('<afile>') =~ '.*\.\(in\|out\|fail\|ok\)'
    let v:swapchoice = 'e'
  endif
endfunc

let failed_count = 0
for fname in glob('testdir/*.in', 1, 1)
  let root = substitute(fname, '\.in', '', '')

  " Execute the test if the .out file does not exist of when the .in file is
  " newer.
  let in_time = getftime(fname)
  let out_time = getftime(root . '.out')
  if out_time < 0 || in_time > out_time
    call delete(root . '.fail')
    call delete(root . '.out')

    set sw& ts& filetype=
    exe 'split ' . fname

    let did_some = 0
    let failed = 0
    let end = 1
    while 1
      " Indent all the lines between "START_INDENT" and "END_INDENT"
      exe end
      let start = search('\<START_INDENT\>')
      let end = search('\<END_INDENT\>')
      if start <= 0 || end <= 0 || end <= start
	if did_some == 0
	  call append(0, 'ERROR: START_INDENT and/or END_INDENT not found')
	  let failed = 1
	endif
	break
      else
	let did_some = 1

	" Execute all commands marked with INDENT_EXE and find any pattern.
	let lnum = start
	let pattern = ''
	let at = ''
	while 1
	  exe lnum + 1
	  let lnum_exe = search('\<INDENT_EXE\>')
	  exe lnum + 1
	  let indent_at = search('\<INDENT_\(AT\|NEXT\|PREV\)\>')
	  if lnum_exe > 0 && lnum_exe < end && (indent_at <= 0 || lnum_exe < indent_at)
	    exe substitute(getline(lnum_exe), '.*INDENT_EXE', '', '')
	    let lnum = lnum_exe
	    let start = lnum
	  elseif indent_at > 0 && indent_at < end
	    if pattern != ''
	      call append(indent_at, 'ERROR: duplicate pattern')
	      let failed = 1
	      break
	    endif
	    let text = getline(indent_at)
	    let pattern = substitute(text, '.*INDENT_\S*\s*', '', '')
	    let at = substitute(text, '.*INDENT_\(\S*\).*', '\1', '')
	    let lnum = indent_at
	    let start = lnum
	  else
	    break
	  endif
	endwhile

	exe start + 1
	if pattern == ''
	  try
	    exe 'normal =' . (end - 1) . 'G'
	  catch
	    call append(indent_at, 'ERROR: ' . v:exception)
	    let failed = 1
	  endtry
	else
	  let lnum = search(pattern)
	  if lnum <= 0
	    call append(indent_at, 'ERROR: pattern not found: ' . pattern)
	    let failed = 1
	    break
	  endif
	  if at == 'AT'
	    exe lnum
	  elseif at == 'NEXT'
	    exe lnum + 1
	  else
	    exe lnum - 1
	  endif
	  try
	    normal ==
	  catch
	    call append(indent_at, 'ERROR: ' . v:exception)
	    let failed = 1
	  endtry
	endif
      endif
    endwhile

    if !failed
      " Check the resulting text equals the .ok file.
      if getline(1, '$') != readfile(root . '.ok')
	let failed = 1
      endif
    endif

    if failed
      let failed_count += 1
      exe 'write ' . root . '.fail'
      echoerr 'Test ' . fname . ' FAILED!'
    else
      exe 'write ' . root . '.out'
      echo "Test " . fname . " OK\n"
    endif

    quit!  " close the indented file
  endif
endfor

" Matching "if 1" at the start.
endif

if failed_count > 0
  " have make report an error
  cquit
endif
qall!
