xref: /vim-8.2.3635/src/testdir/summarize.vim (revision c7719086)
1*c7719086SBram Moolenaarset cpo&vim
29c0cec65SBram Moolenaarif 1
3f1e0544dSBram Moolenaar  " This is executed only with the eval feature
4f1e0544dSBram Moolenaar  set nocompatible
5eb698d0bSBram Moolenaar  set viminfo=
69c0cec65SBram Moolenaar  func Count(match, type)
79c0cec65SBram Moolenaar    if a:type ==# 'executed'
89c0cec65SBram Moolenaar      let g:executed += (a:match+0)
99c0cec65SBram Moolenaar    elseif a:type ==# 'failed'
10150f0550SBram Moolenaar      let g:failed += a:match+0
119c0cec65SBram Moolenaar    elseif a:type ==# 'skipped'
129c0cec65SBram Moolenaar      let g:skipped += 1
13a7f6c3cfSBram Moolenaar      call extend(g:skipped_output, ["\t" .. a:match])
149c0cec65SBram Moolenaar    endif
159c0cec65SBram Moolenaar  endfunc
169c0cec65SBram Moolenaar
179c0cec65SBram Moolenaar  let g:executed = 0
189c0cec65SBram Moolenaar  let g:skipped = 0
199c0cec65SBram Moolenaar  let g:failed = 0
209c0cec65SBram Moolenaar  let g:skipped_output = []
219c0cec65SBram Moolenaar  let g:failed_output = []
229c0cec65SBram Moolenaar  let output = [""]
239c0cec65SBram Moolenaar
24a7f6c3cfSBram Moolenaar  if $TEST_FILTER != ''
25a7f6c3cfSBram Moolenaar    call extend(g:skipped_output, ["\tAll tests not matching $TEST_FILTER: '" .. $TEST_FILTER .. "'"])
26a7f6c3cfSBram Moolenaar  endif
27a7f6c3cfSBram Moolenaar
289c0cec65SBram Moolenaar  try
299c0cec65SBram Moolenaar    " This uses the :s command to just fetch and process the output of the
3060b1bcfeSBram Moolenaar    " tests, it doesn't actually replace anything.
31f1e0544dSBram Moolenaar    " And it uses "silent" to avoid reporting the number of matches.
327eaafe65SBram Moolenaar    silent %s/Executed\s\+\zs\d\+\ze\s\+tests\?/\=Count(submatch(0),'executed')/egn
33f1e0544dSBram Moolenaar    silent %s/^SKIPPED \zs.*/\=Count(submatch(0), 'skipped')/egn
34f1e0544dSBram Moolenaar    silent %s/^\(\d\+\)\s\+FAILED:/\=Count(submatch(1), 'failed')/egn
359c0cec65SBram Moolenaar
369c0cec65SBram Moolenaar    call extend(output, ["Skipped:"])
379c0cec65SBram Moolenaar    call extend(output, skipped_output)
389c0cec65SBram Moolenaar
399c0cec65SBram Moolenaar    call extend(output, [
409c0cec65SBram Moolenaar          \ "",
419c0cec65SBram Moolenaar          \ "-------------------------------",
429c0cec65SBram Moolenaar          \ printf("Executed: %5d Tests", g:executed),
439c0cec65SBram Moolenaar          \ printf(" Skipped: %5d Tests", g:skipped),
449c0cec65SBram Moolenaar          \ printf("  %s: %5d Tests", g:failed == 0 ? 'Failed' : 'FAILED', g:failed),
459c0cec65SBram Moolenaar          \ "",
469c0cec65SBram Moolenaar          \ ])
479c0cec65SBram Moolenaar    if filereadable('test.log')
489c0cec65SBram Moolenaar      " outputs and indents the failed test result
499c0cec65SBram Moolenaar      call extend(output, ["", "Failures: "])
509c0cec65SBram Moolenaar      let failed_output = filter(readfile('test.log'), { v,k -> !empty(k)})
519c0cec65SBram Moolenaar      call extend(output, map(failed_output, { v,k -> "\t".k}))
529c0cec65SBram Moolenaar      " Add a final newline
539c0cec65SBram Moolenaar      call extend(output, [""])
549c0cec65SBram Moolenaar    endif
559c0cec65SBram Moolenaar
569c0cec65SBram Moolenaar  catch  " Catch-all
579c0cec65SBram Moolenaar  finally
589c0cec65SBram Moolenaar    call writefile(output, 'test_result.log')  " overwrites an existing file
599c0cec65SBram Moolenaar  endtry
609c0cec65SBram Moolenaarendif
619c0cec65SBram Moolenaar
629c0cec65SBram Moolenaarq!
63