module Async::RSpec::Reactor
Public Instance Methods
notify_failure(exception = $!)
click to toggle source
# File lib/async/rspec/reactor.rb, line 31 def notify_failure(exception = $!) ::RSpec::Support.notify_failure(exception) end
run_in_reactor(reactor, duration = nil) { || ... }
click to toggle source
# 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| # Wait for the timeout, at any point this task might be cancelled if the user code completes: task.annotate("timer task duration=#{duration}") task.sleep(duration) # The timeout expired, so generate an error: buffer = StringIO.new reactor.print_hierarchy(buffer) # Raise an error so it is logged: raise TimeoutError, "run time exceeded duration #{duration}s:\r\n#{buffer.string}" end end reactor.run do |task| task.annotate(self.class) spec_task = task.async do |spec_task| spec_task.annotate("running example") result = yield timer_task&.stop raise Async::Stop end begin timer_task&.wait spec_task.wait ensure spec_task.stop end end.wait return result end