lib-opal/opal/rspec/async/example.rb
# await: *await*
module RSpec
module Core
class Example
def run_await(example_group_instance, reporter)
# added awaits
@example_group_instance = example_group_instance
@reporter = reporter
RSpec.configuration.configure_example(self, hooks)
RSpec.current_example = self
start(reporter)
Pending.mark_pending!(self, pending) if pending?
begin
if skipped?
Pending.mark_pending! self, skip
elsif !RSpec.configuration.dry_run?
with_around_and_singleton_context_hooks_await do
begin
run_before_example_await
RSpec.current_scope = :example
@example_group_instance.instance_exec_await(self, &@example_block)
if pending?
Pending.mark_fixed! self
raise Pending::PendingExampleFixedError,
'Expected example to fail since it is pending, but it passed.',
[location]
end
rescue Pending::SkipDeclaredInExample => _
# The "=> _" is normally useless but on JRuby it is a workaround
# for a bug that prevents us from getting backtraces:
# https://github.com/jruby/jruby/issues/4467
#
# no-op, required metadata has already been set by the `skip`
# method.
rescue AllExceptionsExcludingDangerousOnesOnRubiesThatAllowIt => e
set_exception(e)
ensure
RSpec.current_scope = :after_example_hook
run_after_example_await
end
end
end
rescue Support::AllExceptionsExceptOnesWeMustNotRescue => e
set_exception(e)
ensure
@example_group_instance = nil # if you love something... let it go
end
finish(reporter)
ensure
execution_result.ensure_timing_set(clock)
RSpec.current_example = nil
end
def run_before_example_await
# added awaits
@example_group_instance.setup_mocks_for_rspec
hooks.run_await(:before, :example, self)
end
def run_after_example_await
# added awaits
assign_generated_description if defined?(::RSpec::Matchers)
hooks.run_await(:after, :example, self)
verify_mocks
ensure
@example_group_instance.teardown_mocks_for_rspec
end
def with_around_and_singleton_context_hooks_await
singleton_context_hooks_host = example_group_instance.singleton_class
singleton_context_hooks_host.run_before_context_hooks_await(example_group_instance)
with_around_example_hooks_await { yield.await }
ensure
singleton_context_hooks_host.run_after_context_hooks_await(example_group_instance)
end
def with_around_example_hooks_await
RSpec.current_scope = :before_example_hook
hooks.run_await(:around, :example, self) { yield.await }
rescue Support::AllExceptionsExceptOnesWeMustNotRescue => e
set_exception(e)
end
def instance_exec_await(*args, &block)
@example_group_instance.instance_exec_await(*args, &block)
end
class Procsy
alias run_await run
end
end
end
end