view src/testdir/test_quotestar.vim @ 11217:466657ab7340 v8.0.0495

patch 8.0.0495: quotestar test uses timer instead of timeout commit https://github.com/vim/vim/commit/f5610da7a8a5908e747d1ae39dbed1408bbd2644 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Mar 20 21:47:16 2017 +0100 patch 8.0.0495: quotestar test uses timer instead of timeout Problem: The quotestar test uses a timer instead of a timeout, thus it cannot be rerun like a flaky test. Solution: Remove the timer and add a timeout. (Kazunobu Kuriyama)
author Christian Brabandt <cb@256bit.org>
date Mon, 20 Mar 2017 22:00:04 +0100
parents 1083038c59ba
children 9bfae04699c3
line wrap: on
line source

" *-register (quotestar) tests

if !has('clipboard')
  finish
endif

source shared.vim

func Do_test_quotestar_for_macunix()
  if empty(exepath('pbcopy')) || empty(exepath('pbpaste'))
    return 'Test requires pbcopy(1) and pbpaste(1)'
  endif

  let @* = ''

  " Test #1: Pasteboard to Vim
  let test_msg = "text from pasteboard to vim via quotestar"
  " Write a piece of text to the pasteboard.
  call system('/bin/echo -n "' . test_msg . '" | pbcopy')
  " See if the *-register is changed as expected.
  call assert_equal(test_msg, @*)

  " Test #2: Vim to Pasteboard
  let test_msg = "text from vim to pasteboard via quotestar"
  " Write a piece of text to the *-register.
  let @* = test_msg
  " See if the pasteboard is changed as expected.
  call assert_equal(test_msg, system('pbpaste'))

  return ''
endfunc

func Do_test_quotestar_for_x11()
  if !has('clientserver') || !has('job')
    return 'Test requires the client-server and job features'
  endif

  let cmd = GetVimCommand()
  if cmd == ''
    return 'GetVimCommand() failed'
  endif

  let name = 'XVIMCLIPBOARD'
  let cmd .= ' --servername ' . name
  let g:job = job_start(cmd, {'stoponexit': 'kill', 'out_io': 'null'})
  call WaitFor('job_status(g:job) == "run"')
  if job_status(g:job) != 'run'
    call assert_report('Cannot run the Vim server')
    return ''
  endif

  " Takes a short while for the server to be active.
  call WaitFor('serverlist() =~ "' . name . '"')
  call assert_match(name, serverlist())

  " Clear the *-register of this vim instance.
  let @* = ''

  " Try to change the *-register of the server.
  call remote_foreground(name)
  call remote_send(name, ":let @* = 'yes'\<CR>")
  call WaitFor('remote_expr("' . name . '", "@*", "", 1) == "yes"')
  call assert_equal('yes', remote_expr(name, "@*", "", 2))

  " Check that the *-register of this vim instance is changed as expected.
  call assert_equal('yes', @*)

  if has('unix') && has('gui') && !has('gui_running')
    let @* = ''

    " Running in a terminal and the GUI is avaiable: Tell the server to open
    " the GUI and check that the remote command still works.
    " Need to wait for the GUI to start up, otherwise the send hangs in trying
    " to send to the terminal window.
    if has('gui_athena') || has('gui_motif')
      " For those GUIs, ignore the 'failed to create input context' error.
      call remote_send(name, ":call test_ignore_error('E285') | gui -f\<CR>")
    else
      call remote_send(name, ":gui -f\<CR>")
    endif
    " Wait for the server to be up and answering requests.
    call WaitFor('remote_expr("' . name . '", "v:version", "", 1) != ""')

    call remote_send(name, ":let @* = 'maybe'\<CR>")
    call WaitFor('remote_expr("' . name . '", "@*", "", 1) == "maybe"')
    call assert_equal('maybe', remote_expr(name, "@*", "", 2))

    call assert_equal('maybe', @*)
  endif

  call remote_send(name, ":qa!\<CR>")
  call WaitFor('job_status(g:job) == "dead"')
  if job_status(g:job) != 'dead'
    call assert_report('Server did not exit')
    call job_stop(g:job, 'kill')
  endif

  return ''
endfunc

func Test_quotestar()
  let skipped = ''

  let quotestar_saved = @*

  if has('macunix')
    let skipped = Do_test_quotestar_for_macunix()
  elseif !empty("$DISPLAY")
    let skipped = Do_test_quotestar_for_x11()
  else
    let skipped = "Test is not implemented yet for this platform."
  endif

  let @* = quotestar_saved

  if !empty(skipped)
    throw 'Skipped: ' . skipped
  endif
endfunc