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) { |spec_task| ... }
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:\n#{buffer.string}" end end spec_task = reactor.async do |spec_task| spec_task.annotate("running example") result = yield(spec_task) # We are finished, so stop the timer task if it was started: timer_task&.stop # Now stop the entire reactor: raise Async::Stop end begin timer_task&.wait spec_task.wait ensure spec_task.stop end return result end