view runtime/doc/test_urls.vim @ 32782:abf161ce0c77 v9.0.1707

patch 9.0.1707: Cannot wrap around in popup_filter_menu() Commit: https://github.com/vim/vim/commit/badeedd913d9d6456ad8087911d024fd36800743 Author: Christian Brabandt <cb@256bit.org> Date: Sun Aug 13 19:25:28 2023 +0200 patch 9.0.1707: Cannot wrap around in popup_filter_menu() Problem: Cannot wrap around in popup_filter_menu() Solution: Allow to wrap around by default Currently, it is not possible, to wrap around at the end of the list using e.g. down (and go back to the top) or up at the beginning of the list and go directly to the last item. This is not consistent behaviour with e.g. how the pum-menu currently works, so let's just allow this. Also adjust tests about it. closes: #12689 closes: #12693 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 13 Aug 2023 19:30: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()