view src/testdir/test_sound.vim @ 33591:288da62613ba v9.0.2040

patch 9.0.2040: trim(): hard to use default mask Commit: https://github.com/vim/vim/commit/6e6386716f9494ae86027c6d34f657fd03dfec42 Author: Illia Bobyr <illia.bobyr@gmail.com> Date: Tue Oct 17 11:09:45 2023 +0200 patch 9.0.2040: trim(): hard to use default mask Problem: trim(): hard to use default mask Solution: Use default 'mask' when it is v:none The default 'mask' value is pretty complex, as it includes many characters. Yet, if one needs to specify the trimming direction, the third argument, 'trim()' currently requires the 'mask' value to be provided explicitly. 'v:none' is already used to mean "use the default argument value" in user defined functions. See |none-function_argument| in help. closes: #13363 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
author Christian Brabandt <cb@256bit.org>
date Tue, 17 Oct 2023 11:15:09 +0200
parents 71137f73c94d
children 70c1a9c6f41d
line wrap: on
line source

" Tests for the sound feature

source check.vim
source shared.vim

CheckFeature sound

func PlayCallback(id, result)
  let g:playcallback_count += 1
  let g:id = a:id
  let g:result = a:result
endfunc

func Test_play_event()
  if has('win32')
    throw 'Skipped: Playing event with callback is not supported on Windows'
  endif
  let g:playcallback_count = 0
  let g:id = 0
  let event_name = 'bell'
  if has('osx')
      let event_name = 'Tink'
  endif
  let id = event_name->sound_playevent('PlayCallback')
  if id == 0
    throw 'Skipped: bell event not available'
  endif

  " Stop it quickly, avoid annoying the user.
  sleep 20m
  eval id->sound_stop()
  call WaitForAssert({-> assert_equal(id, g:id)})
  call assert_equal(1, g:result)  " sound was aborted
  call assert_equal(1, g:playcallback_count)
endfunc

func Test_play_silent()
  let fname = fnamemodify('silent.wav', '%p')
  let g:playcallback_count = 0

  " play without callback
  let id1 = sound_playfile(fname)
  if id1 == 0
    throw 'Skipped: playing a sound is not working'
  endif

  " play until the end
  let id2 = fname->sound_playfile('PlayCallback')
  call assert_true(id2 > 0)
  call WaitForAssert({-> assert_equal(id2, g:id)})
  call assert_equal(0, g:result)
  call assert_equal(1, g:playcallback_count)

  let id2 = sound_playfile(fname, 'PlayCallback')
  call assert_true(id2 > 0)
  sleep 20m
  call sound_clear()
  call WaitForAssert({-> assert_equal(id2, g:id)})
  call assert_equal(1, g:result)  " sound was aborted
  call assert_equal(2, g:playcallback_count)

  " Play 2 sounds almost at the same time to exercise
  " code with multiple callbacks in the callback list.
  call sound_playfile(fname, 'PlayCallback')
  call sound_playfile(fname, 'PlayCallback')
  call WaitForAssert({-> assert_equal(4, g:playcallback_count)})

  " recursive use was causing a crash
  func PlayAgain(id, fname)
    let g:id = a:id
    let g:id_again = sound_playfile(a:fname)
  endfunc

  let id3 = sound_playfile(fname, {id, res -> PlayAgain(id, fname)})
  call assert_true(id3 > 0)
  sleep 50m
  call sound_clear()
  call WaitForAssert({-> assert_true(g:id > 0)})
endfunc

func Test_play_event_error()
  " FIXME: sound_playevent() doesn't return 0 in case of error on Windows.
  if !has('win32')
    call assert_equal(0, sound_playevent(''))
    call assert_equal(0, sound_playevent(test_null_string()))
    call assert_equal(0, sound_playevent('doesnotexist'))
    call assert_equal(0, sound_playevent('doesnotexist', 'doesnotexist'))
    call assert_equal(0, sound_playevent(test_null_string(), test_null_string()))
    call assert_equal(0, sound_playevent(test_null_string(), test_null_function()))
  endif

  call assert_equal(0, sound_playfile(''))
  call assert_equal(0, sound_playfile(test_null_string()))
  call assert_equal(0, sound_playfile('doesnotexist'))
  call assert_equal(0, sound_playfile('doesnotexist', 'doesnotexist'))
  call assert_equal(0, sound_playfile(test_null_string(), test_null_string()))
  call assert_equal(0, sound_playfile(test_null_string(), test_null_function()))
endfunc

" vim: shiftwidth=2 sts=2 expandtab