xref: /vim-8.2.3635/src/testdir/test_sound.vim (revision 2f9c209b)
1427f5b66SBram Moolenaar" Tests for the sound feature
2427f5b66SBram Moolenaar
3c64ed2b7SDominique Pellesource check.vim
47b130b97SBram Moolenaarsource shared.vim
57b130b97SBram Moolenaar
6c64ed2b7SDominique PelleCheckFeature sound
7427f5b66SBram Moolenaar
8427f5b66SBram Moolenaarfunc PlayCallback(id, result)
9c64ed2b7SDominique Pelle  let g:playcallback_count += 1
10427f5b66SBram Moolenaar  let g:id = a:id
11427f5b66SBram Moolenaar  let g:result = a:result
12427f5b66SBram Moolenaarendfunc
13427f5b66SBram Moolenaar
14427f5b66SBram Moolenaarfunc Test_play_event()
159b283523SBram Moolenaar  if has('win32')
169b283523SBram Moolenaar    throw 'Skipped: Playing event with callback is not supported on Windows'
179b283523SBram Moolenaar  endif
18c64ed2b7SDominique Pelle  let g:playcallback_count = 0
197b130b97SBram Moolenaar  let g:id = 0
20f6ed61e1SBram Moolenaar  let id = 'bell'->sound_playevent('PlayCallback')
21427f5b66SBram Moolenaar  if id == 0
22427f5b66SBram Moolenaar    throw 'Skipped: bell event not available'
23427f5b66SBram Moolenaar  endif
24c64ed2b7SDominique Pelle
25427f5b66SBram Moolenaar  " Stop it quickly, avoid annoying the user.
26427f5b66SBram Moolenaar  sleep 20m
27f6ed61e1SBram Moolenaar  eval id->sound_stop()
287b130b97SBram Moolenaar  call WaitForAssert({-> assert_equal(id, g:id)})
29427f5b66SBram Moolenaar  call assert_equal(1, g:result)  " sound was aborted
30c64ed2b7SDominique Pelle  call assert_equal(1, g:playcallback_count)
31427f5b66SBram Moolenaarendfunc
32427f5b66SBram Moolenaar
33427f5b66SBram Moolenaarfunc Test_play_silent()
34427f5b66SBram Moolenaar  let fname = fnamemodify('silent.wav', '%p')
35c64ed2b7SDominique Pelle  let g:playcallback_count = 0
36427f5b66SBram Moolenaar
37427f5b66SBram Moolenaar  " play without callback
38427f5b66SBram Moolenaar  let id1 = sound_playfile(fname)
39541faf7aSBram Moolenaar  if id1 == 0
40541faf7aSBram Moolenaar    throw 'Skipped: playing a sound is not working'
41541faf7aSBram Moolenaar  endif
42427f5b66SBram Moolenaar
43427f5b66SBram Moolenaar  " play until the end
44f6ed61e1SBram Moolenaar  let id2 = fname->sound_playfile('PlayCallback')
45427f5b66SBram Moolenaar  call assert_true(id2 > 0)
467b130b97SBram Moolenaar  call WaitForAssert({-> assert_equal(id2, g:id)})
47427f5b66SBram Moolenaar  call assert_equal(0, g:result)
48c64ed2b7SDominique Pelle  call assert_equal(1, g:playcallback_count)
49427f5b66SBram Moolenaar
50427f5b66SBram Moolenaar  let id2 = sound_playfile(fname, 'PlayCallback')
51427f5b66SBram Moolenaar  call assert_true(id2 > 0)
52427f5b66SBram Moolenaar  sleep 20m
533ff5f0f0SBram Moolenaar  call sound_clear()
547b130b97SBram Moolenaar  call WaitForAssert({-> assert_equal(id2, g:id)})
557b130b97SBram Moolenaar  call assert_equal(1, g:result)  " sound was aborted
56c64ed2b7SDominique Pelle  call assert_equal(2, g:playcallback_count)
57c64ed2b7SDominique Pelle
58c64ed2b7SDominique Pelle  " Play 2 sounds almost at the same time to exercise
59c64ed2b7SDominique Pelle  " code with multiple callbacks in the callback list.
60c64ed2b7SDominique Pelle  call sound_playfile(fname, 'PlayCallback')
61c64ed2b7SDominique Pelle  call sound_playfile(fname, 'PlayCallback')
62c64ed2b7SDominique Pelle  call WaitForAssert({-> assert_equal(4, g:playcallback_count)})
6328e67e0cSBram Moolenaar
6428e67e0cSBram Moolenaar  " recursive use was causing a crash
6528e67e0cSBram Moolenaar  func PlayAgain(id, fname)
6628e67e0cSBram Moolenaar    let g:id = a:id
6728e67e0cSBram Moolenaar    let g:id_again = sound_playfile(a:fname)
6828e67e0cSBram Moolenaar  endfunc
6928e67e0cSBram Moolenaar
7028e67e0cSBram Moolenaar  let id3 = sound_playfile(fname, {id, res -> PlayAgain(id, fname)})
7128e67e0cSBram Moolenaar  call assert_true(id3 > 0)
7228e67e0cSBram Moolenaar  sleep 50m
7328e67e0cSBram Moolenaar  call sound_clear()
747b130b97SBram Moolenaar  call WaitForAssert({-> assert_true(g:id > 0)})
75427f5b66SBram Moolenaarendfunc
766d91bcb4SBram Moolenaar
77c64ed2b7SDominique Pellefunc Test_play_event_error()
78*2f9c209bSDominique Pelle  " FIXME: sound_playevent() doesn't return 0 in case of error on Windows.
79*2f9c209bSDominique Pelle  if !has('win32')
80c64ed2b7SDominique Pelle    call assert_equal(0, sound_playevent(''))
81c64ed2b7SDominique Pelle    call assert_equal(0, sound_playevent(test_null_string()))
82c64ed2b7SDominique Pelle    call assert_equal(0, sound_playevent('doesnotexist'))
83c64ed2b7SDominique Pelle    call assert_equal(0, sound_playevent('doesnotexist', 'doesnotexist'))
84c64ed2b7SDominique Pelle    call assert_equal(0, sound_playevent(test_null_string(), test_null_string()))
85c64ed2b7SDominique Pelle    call assert_equal(0, sound_playevent(test_null_string(), test_null_function()))
86*2f9c209bSDominique Pelle  endif
87c64ed2b7SDominique Pelle
88c64ed2b7SDominique Pelle  call assert_equal(0, sound_playfile(''))
89c64ed2b7SDominique Pelle  call assert_equal(0, sound_playfile(test_null_string()))
90c64ed2b7SDominique Pelle  call assert_equal(0, sound_playfile('doesnotexist'))
91c64ed2b7SDominique Pelle  call assert_equal(0, sound_playfile('doesnotexist', 'doesnotexist'))
92c64ed2b7SDominique Pelle  call assert_equal(0, sound_playfile(test_null_string(), test_null_string()))
93c64ed2b7SDominique Pelle  call assert_equal(0, sound_playfile(test_null_string(), test_null_function()))
94c64ed2b7SDominique Pelleendfunc
95c64ed2b7SDominique Pelle
966d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
97