Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 1 | " Tests for the sound feature |
| 2 | |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 3 | source check.vim |
Bram Moolenaar | 7b130b9 | 2020-12-06 21:43:44 +0100 | [diff] [blame] | 4 | source shared.vim |
| 5 | |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 6 | CheckFeature sound |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 7 | |
| 8 | func PlayCallback(id, result) |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 9 | let g:playcallback_count += 1 |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 10 | let g:id = a:id |
| 11 | let g:result = a:result |
| 12 | endfunc |
| 13 | |
| 14 | func Test_play_event() |
Bram Moolenaar | 9b28352 | 2019-06-17 22:19:33 +0200 | [diff] [blame] | 15 | if has('win32') |
| 16 | throw 'Skipped: Playing event with callback is not supported on Windows' |
| 17 | endif |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 18 | let g:playcallback_count = 0 |
Bram Moolenaar | 7b130b9 | 2020-12-06 21:43:44 +0100 | [diff] [blame] | 19 | let g:id = 0 |
Bram Moolenaar | f6ed61e | 2019-09-07 19:05:09 +0200 | [diff] [blame] | 20 | let id = 'bell'->sound_playevent('PlayCallback') |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 21 | if id == 0 |
| 22 | throw 'Skipped: bell event not available' |
| 23 | endif |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 24 | |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 25 | " Stop it quickly, avoid annoying the user. |
| 26 | sleep 20m |
Bram Moolenaar | f6ed61e | 2019-09-07 19:05:09 +0200 | [diff] [blame] | 27 | eval id->sound_stop() |
Bram Moolenaar | 7b130b9 | 2020-12-06 21:43:44 +0100 | [diff] [blame] | 28 | call WaitForAssert({-> assert_equal(id, g:id)}) |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 29 | call assert_equal(1, g:result) " sound was aborted |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 30 | call assert_equal(1, g:playcallback_count) |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 31 | endfunc |
| 32 | |
| 33 | func Test_play_silent() |
| 34 | let fname = fnamemodify('silent.wav', '%p') |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 35 | let g:playcallback_count = 0 |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 36 | |
| 37 | " play without callback |
| 38 | let id1 = sound_playfile(fname) |
Bram Moolenaar | 541faf7 | 2019-06-09 15:35:41 +0200 | [diff] [blame] | 39 | if id1 == 0 |
| 40 | throw 'Skipped: playing a sound is not working' |
| 41 | endif |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 42 | |
| 43 | " play until the end |
Bram Moolenaar | f6ed61e | 2019-09-07 19:05:09 +0200 | [diff] [blame] | 44 | let id2 = fname->sound_playfile('PlayCallback') |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 45 | call assert_true(id2 > 0) |
Bram Moolenaar | 7b130b9 | 2020-12-06 21:43:44 +0100 | [diff] [blame] | 46 | call WaitForAssert({-> assert_equal(id2, g:id)}) |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 47 | call assert_equal(0, g:result) |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 48 | call assert_equal(1, g:playcallback_count) |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 49 | |
| 50 | let id2 = sound_playfile(fname, 'PlayCallback') |
| 51 | call assert_true(id2 > 0) |
| 52 | sleep 20m |
Bram Moolenaar | 3ff5f0f | 2019-06-10 13:11:22 +0200 | [diff] [blame] | 53 | call sound_clear() |
Bram Moolenaar | 7b130b9 | 2020-12-06 21:43:44 +0100 | [diff] [blame] | 54 | call WaitForAssert({-> assert_equal(id2, g:id)}) |
| 55 | call assert_equal(1, g:result) " sound was aborted |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 56 | call assert_equal(2, g:playcallback_count) |
| 57 | |
| 58 | " Play 2 sounds almost at the same time to exercise |
| 59 | " code with multiple callbacks in the callback list. |
| 60 | call sound_playfile(fname, 'PlayCallback') |
| 61 | call sound_playfile(fname, 'PlayCallback') |
| 62 | call WaitForAssert({-> assert_equal(4, g:playcallback_count)}) |
Bram Moolenaar | 28e67e0 | 2019-08-15 23:05:49 +0200 | [diff] [blame] | 63 | |
| 64 | " recursive use was causing a crash |
| 65 | func PlayAgain(id, fname) |
| 66 | let g:id = a:id |
| 67 | let g:id_again = sound_playfile(a:fname) |
| 68 | endfunc |
| 69 | |
| 70 | let id3 = sound_playfile(fname, {id, res -> PlayAgain(id, fname)}) |
| 71 | call assert_true(id3 > 0) |
| 72 | sleep 50m |
| 73 | call sound_clear() |
Bram Moolenaar | 7b130b9 | 2020-12-06 21:43:44 +0100 | [diff] [blame] | 74 | call WaitForAssert({-> assert_true(g:id > 0)}) |
Bram Moolenaar | 427f5b6 | 2019-06-09 13:43:51 +0200 | [diff] [blame] | 75 | endfunc |
Bram Moolenaar | 6d91bcb | 2020-08-12 18:50:36 +0200 | [diff] [blame] | 76 | |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 77 | func Test_play_event_error() |
Dominique Pelle | 2f9c209 | 2021-06-07 20:28:45 +0200 | [diff] [blame] | 78 | " FIXME: sound_playevent() doesn't return 0 in case of error on Windows. |
| 79 | if !has('win32') |
| 80 | call assert_equal(0, sound_playevent('')) |
| 81 | call assert_equal(0, sound_playevent(test_null_string())) |
| 82 | call assert_equal(0, sound_playevent('doesnotexist')) |
| 83 | call assert_equal(0, sound_playevent('doesnotexist', 'doesnotexist')) |
| 84 | call assert_equal(0, sound_playevent(test_null_string(), test_null_string())) |
| 85 | call assert_equal(0, sound_playevent(test_null_string(), test_null_function())) |
| 86 | endif |
Dominique Pelle | c64ed2b | 2021-06-06 15:07:09 +0200 | [diff] [blame] | 87 | |
| 88 | call assert_equal(0, sound_playfile('')) |
| 89 | call assert_equal(0, sound_playfile(test_null_string())) |
| 90 | call assert_equal(0, sound_playfile('doesnotexist')) |
| 91 | call assert_equal(0, sound_playfile('doesnotexist', 'doesnotexist')) |
| 92 | call assert_equal(0, sound_playfile(test_null_string(), test_null_string())) |
| 93 | call assert_equal(0, sound_playfile(test_null_string(), test_null_function())) |
| 94 | endfunc |
| 95 | |
Bram Moolenaar | 6d91bcb | 2020-08-12 18:50:36 +0200 | [diff] [blame] | 96 | " vim: shiftwidth=2 sts=2 expandtab |