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