@@ -5,6 +5,7 @@ class TestCallback < Test::Unit::TestCase
55 TOPDIR = File . expand_path ( File . join ( File . dirname ( __FILE__ ) , '..' ) )
66
77 def setup
8+ GC . start
89 @params = Whisper ::Params . new
910 @whisper = Whisper ::Context . new ( File . join ( TOPDIR , '..' , '..' , 'models' , 'ggml-base.en.bin' ) )
1011 @audio = File . join ( TOPDIR , '..' , '..' , 'samples' , 'jfk.wav' )
@@ -73,4 +74,90 @@ def test_new_segment_callback_user_data_gc
7374
7475 assert_same @whisper , @whisper . transcribe ( @audio , @params )
7576 end
77+
78+ def test_progress_callback
79+ first = nil
80+ last = nil
81+ @params . progress_callback = -> ( context , state , progress , user_data ) {
82+ assert_kind_of Integer , progress
83+ assert 0 <= progress && progress <= 100
84+ assert_same @whisper , context
85+ first = progress if first . nil?
86+ last = progress
87+ }
88+ @whisper . transcribe ( @audio , @params )
89+ assert_equal 0 , first
90+ assert_equal 100 , last
91+ end
92+
93+ def test_progress_callback_user_data
94+ udata = Object . new
95+ @params . progress_callback_user_data = udata
96+ @params . progress_callback = -> ( context , state , n_new , user_data ) {
97+ assert_same udata , user_data
98+ }
99+
100+ @whisper . transcribe ( @audio , @params )
101+ end
102+
103+ def test_on_progress
104+ first = nil
105+ last = nil
106+ @params . on_progress do |progress |
107+ assert_kind_of Integer , progress
108+ assert 0 <= progress && progress <= 100
109+ first = progress if first . nil?
110+ last = progress
111+ end
112+ @whisper . transcribe ( @audio , @params )
113+ assert_equal 0 , first
114+ assert_equal 100 , last
115+ end
116+
117+ def test_abort_callback
118+ i = 0
119+ @params . abort_callback = -> ( user_data ) {
120+ assert_nil user_data
121+ i += 1
122+ return false
123+ }
124+ @whisper . transcribe ( @audio , @params )
125+ assert i > 0
126+ end
127+
128+ def test_abort_callback_abort
129+ i = 0
130+ @params . abort_callback = -> ( user_data ) {
131+ i += 1
132+ return i == 3
133+ }
134+ @whisper . transcribe ( @audio , @params )
135+ assert_equal 3 , i
136+ end
137+
138+ def test_abort_callback_user_data
139+ udata = Object . new
140+ @params . abort_callback_user_data = udata
141+ yielded = nil
142+ @params . abort_callback = -> ( user_data ) {
143+ yielded = user_data
144+ }
145+ @whisper . transcribe ( @audio , @params )
146+ assert_same udata , yielded
147+ end
148+
149+ def test_abort_on
150+ do_abort = false
151+ aborted_from_callback = false
152+ @params . on_new_segment do |segment |
153+ do_abort = true if segment . text . match? /ask/
154+ end
155+ i = 0
156+ @params . abort_on do
157+ i += 1
158+ do_abort
159+ end
160+ @whisper . transcribe ( @audio , @params )
161+ assert i > 0
162+ end
76163end
0 commit comments