35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/async/rspec/reactor.rb', line 35
def run_in_reactor(reactor, duration = nil)
result = nil
timer_task = nil
if duration
timer_task = reactor.async do |task|
task.annotate("Timer task duration=#{duration}.")
task.sleep(duration)
buffer = StringIO.new
reactor.print_hierarchy(buffer)
raise TimeoutError, "Run time exceeded duration #{duration}s:\n#{buffer.string}"
end
end
spec_task = reactor.async do |spec_task|
spec_task.annotate("running example")
result = yield(spec_task)
timer_task&.stop
raise Async::Stop
end
begin
timer_task&.wait
spec_task.wait
ensure
spec_task.stop
end
return result
end
|