@@ -277,8 +277,16 @@ def on_message(message)
277
277
278
278
describe 'pausing' do
279
279
it 'pauses on error' do
280
- queue = Queue . new
281
- test = AdHoc . spawn :tester do
280
+ queue = Queue . new
281
+ resuming_behaviour = Behaviour . restarting_behaviour_definition . map do |c , args |
282
+ if Behaviour ::Supervising == c
283
+ [ c , [ :resume! , :one_for_one ] ]
284
+ else
285
+ [ c , args ]
286
+ end
287
+ end
288
+
289
+ test = AdHoc . spawn name : :tester , behaviour_definition : resuming_behaviour do
282
290
actor = AdHoc . spawn name : :pausing ,
283
291
behaviour_definition : Behaviour . restarting_behaviour_definition do
284
292
queue << :init
@@ -288,50 +296,44 @@ def on_message(message)
288
296
actor << :supervise
289
297
queue << actor . ask! ( :supervisor )
290
298
actor << nil
299
+ queue << actor . ask ( :add )
291
300
292
301
-> m do
293
302
queue << m
294
- if UnknownMessage === m
295
- ivar = envelope . sender . ask ( :add )
296
- envelope . sender << :resume!
297
- queue << ivar . value!
298
- end
299
303
end
300
304
end
301
305
302
306
expect ( queue . pop ) . to eq :init
303
307
expect ( queue . pop ) . to eq test
304
- expect ( queue . pop ) . to be_kind_of ( UnknownMessage )
305
- expect ( queue . pop ) . to eq 1
308
+ expect ( queue . pop . value ) . to eq 1
306
309
expect ( queue . pop ) . to eq :resumed
307
310
terminate_actors test
308
311
309
- test = AdHoc . spawn :tester do
312
+ test = AdHoc . spawn name : :tester ,
313
+ behaviour_definition : Behaviour . restarting_behaviour_definition do
310
314
actor = AdHoc . spawn name : :pausing ,
311
315
supervise : true ,
312
316
behaviour_definition : Behaviour . restarting_behaviour_definition do
313
317
queue << :init
314
- -> m { m == :add ? 1 : pass }
318
+ -> m { m == :object_id ? self . object_id : pass }
315
319
end
316
320
317
321
queue << actor . ask! ( :supervisor )
322
+ queue << actor . ask! ( :object_id )
318
323
actor << nil
324
+ queue << actor . ask ( :object_id )
319
325
320
326
-> m do
321
327
queue << m
322
- if UnknownMessage === m
323
- ivar = envelope . sender . ask ( :add )
324
- envelope . sender << :reset!
325
- queue << ivar . value!
326
- end
327
328
end
328
329
end
329
330
330
331
expect ( queue . pop ) . to eq :init
331
332
expect ( queue . pop ) . to eq test
332
- expect ( queue . pop ) . to be_kind_of ( UnknownMessage )
333
+ first_id = queue . pop
334
+ second_id = queue . pop . value
335
+ expect ( first_id ) . not_to eq second_id # context already reset
333
336
expect ( queue . pop ) . to eq :init # rebuilds context
334
- expect ( queue . pop ) . to eq 1
335
337
expect ( queue . pop ) . to eq :reset
336
338
terminate_actors test
337
339
end
0 commit comments