class RSpec::Core::Example
def self.delegate_to_metadata(*keys)
def self.delegate_to_metadata(*keys) keys.each do |key| define_method(key) {@metadata[key]} end end
def around_hooks(example_group_class, example_group_instance, the_example)
def around_hooks(example_group_class, example_group_instance, the_example) hooks = RSpec.configuration.hooks[:around][:each] hooks.push example_group_class.ancestors.reverse.map{|a| a.hooks[:around][:each]} hooks.flatten.reverse.inject(the_example) do |accum, hook| def accum.run; call; end lambda { example_group_instance.instance_exec(accum, &hook) } end end
def assign_auto_description
def assign_auto_description if description.empty? metadata[:description] = RSpec::Matchers.generated_description RSpec::Matchers.clear_generated_description end end
def example_group
def example_group @example_group_class end
def in_block?
def in_block? @in_block end
def initialize(example_group_class, desc, options, example_block=nil)
def initialize(example_group_class, desc, options, example_block=nil) @example_group_class, @options, @example_block = example_group_class, options, example_block @metadata = @example_group_class.metadata.for_example(desc, options) end
def record_results(results={})
def record_results(results={}) execution_result.update(results) end
def run(example_group_instance, reporter)
def run(example_group_instance, reporter) start @in_block = false @example_group_instance = example_group_instance @example_group_instance.example = self exception = nil the_example = lambda do begin run_before_each @in_block = true @example_group_instance.instance_eval(&example_block) unless pending rescue Exception => e exception = e ensure @in_block = false run_after_each end end begin pending_declared_in_example = catch(:pending_declared_in_example) do around_hooks(@example_group_class, @example_group_instance, the_example).call throw :pending_declared_in_example, false end rescue Exception => e exception = e ensure @example_group_instance.example = nil assign_auto_description end if exception run_failed(reporter, exception) false elsif pending_declared_in_example run_pending(reporter, pending_declared_in_example) true elsif pending run_pending(reporter, 'Not Yet Implemented') true else run_passed(reporter) true end end
def run_after_each
def run_after_each @example_group_class.eval_after_eachs(@example_group_instance) @example_group_instance._verify_mocks if @example_group_instance.respond_to?(:_verify_mocks) ensure @example_group_instance._teardown_mocks if @example_group_instance.respond_to?(:_teardown_mocks) end
def run_before_each
def run_before_each @example_group_instance._setup_mocks if @example_group_instance.respond_to?(:_setup_mocks) @example_group_class.eval_before_eachs(@example_group_instance) end
def run_failed(reporter, exception)
def run_failed(reporter, exception) run_finished reporter, 'failed', :exception_encountered => exception end
def run_finished(reporter, status, results={})
def run_finished(reporter, status, results={}) record_results results.update(:status => status) finish_time = Time.now record_results :finished_at => finish_time, :run_time => (finish_time - execution_result[:started_at]) reporter.example_finished(self) end
def run_passed(reporter=nil)
def run_passed(reporter=nil) run_finished reporter, 'passed' end
def run_pending(reporter, message)
def run_pending(reporter, message) run_finished reporter, 'pending', :pending_message => message end
def start
def start record_results :started_at => Time.now end