Mercurial > vim
view runtime/doc/test_urls.vim @ 33634:7c43330262d4 v9.0.2058
patch 9.0.2058: tests: avoid error when no swap files exist
Commit: https://github.com/vim/vim/commit/a36acb7ac444a789440dc30e0f04d5427069face
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat Oct 21 11:50:26 2023 +0200
patch 9.0.2058: tests: avoid error when no swap files exist
Problem: tests: avoid error when no swap files exist
Solution: use unlet! so that no error message is reported
in case the variable does not exists
When s:GetSwapFileList() does not find any swapfiles, it will return an
empty list []. This means, that the variable 'name' will not be
declared, cause the following unlet command to fail and causing a 1 sec
delay on running the tests.
So let's instead use the :unlet! command which simply skips reporting an
error when the variable given as parameter does not exists.
closes: #13396
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 21 Oct 2023 12:00:04 +0200 |
parents | 7fd105bfe992 |
children | e09acb1daea7 |
line wrap: on
line source
" Test for URLs in help documents. " " Opens a new window with all found URLS followed by return code from curl " (anything other than 0 means unreachable) " " Written by Christian Brabandt. func Test_check_URLs() if has("win32") echoerr "Doesn't work on MS-Windows" return endif if executable('curl') " Note: does not follow redirects! let s:command = 'curl --silent --fail --output /dev/null --head ' elseif executable('wget') " Note: only allow a couple of redirects let s:command = 'wget --quiet -S --spider --max-redirect=2 --timeout=5 --tries=2 -O /dev/null ' else echoerr 'Only works when "curl" or "wget" is available' return endif let pat='\(https\?\|ftp\)://[^\t* ]\+' exe 'helpgrep' pat helpclose let urls = map(getqflist(), 'v:val.text') " do not use submatch(1)! let urls = map(urls, {key, val -> matchstr(val, pat)}) " remove examples like user@host (invalid urls) let urls = filter(urls, 'v:val !~ "@"') " Remove example URLs which are invalid let urls = filter(urls, {key, val -> val !~ '\<\(\(my\|some\)\?host\|machine\|hostname\|file\)\>'}) new put =urls " remove some more invalid items " empty lines v/./d " remove # anchors %s/#.*$//e " remove trailing stuff (parenthesis, dot, comma, quotes), but only for HTTP " links g/^h/s#[.,)'"/>][:.]\?$## g#^[hf]t\?tp:/\(/\?\.*\)$#d silent! g/ftp://,$/d silent! g/=$/d let a = getline(1,'$') let a = uniq(sort(a)) %d call setline(1, a) " Do the testing. set nomore %s/.*/\=TestURL(submatch(0))/ " highlight the failures /.* \([0-9]*[1-9]\|[0-9]\{2,}\)$ endfunc func TestURL(url) " Relies on the return code to determine whether a page is valid echom printf("Testing URL: %d/%d %s", line('.'), line('$'), a:url) call system(s:command . shellescape(a:url)) return printf("%s %d", a:url, v:shell_error) endfunc call Test_check_URLs()