Class: Shoulda::FastContext

Inherits:
Context
  • Object
show all
Defined in:
lib/shoulda/context.rb

Instance Attribute Summary

Attributes inherited from Context

#name, #parent, #setup_blocks, #should_eventuallys, #shoulds, #subcontexts, #subject_block, #teardown_blocks

Instance Method Summary collapse

Methods inherited from Context

#am_subcontext?, #context, #create_test_from_should_hash, #fast_context, #full_name, #initialize, #merge_block, #method_missing, #print_should_eventuallys, #run_all_setup_blocks, #run_all_teardown_blocks, #run_current_setup_blocks, #run_parent_setup_blocks, #setup, #should, #should_eventually, #should_not, #subject, #teardown, #test_methods, #test_unit_class

Constructor Details

This class inherits a constructor from Shoulda::Context

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Shoulda::Context

Instance Method Details

#buildObject



498
499
500
501
502
503
# File 'lib/shoulda/context.rb', line 498

def build
  run_current_should_blocks
  subcontexts.each { |context| context.build }

  print_should_eventuallys
end

#run_current_should_blocksObject

end of method build



505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
# File 'lib/shoulda/context.rb', line 505

def run_current_should_blocks
  test_name = ["test:", full_name].flatten.join(' ').to_sym

  if test_unit_class.instance_methods.include?(test_name.to_s)
    warn "  * WARNING: '#{test_name}' is already defined"
  end
  
  context = self
  all_shoulds = shoulds
  test_unit_class.send(:define_method, test_name) do
    @shoulda_context = context
    @current_should = nil
    begin
      context.run_parent_setup_blocks(self)
      all_shoulds.each {|should| 
        @current_should = should
        should[:before].bind(self).call if should[:before] 
      }
      context.run_current_setup_blocks(self)
      all_shoulds.each do |should|
        should[:block].bind(self).call
      end
    rescue Test::Unit::AssertionFailedError => e
      error = Test::Unit::AssertionFailedError.new(["FAILED:", context.full_name, "should", "#{@current_should[:name]}:", e.message].flatten.join(' '))
      error.set_backtrace e.backtrace
      raise error
    ensure
      context.run_all_teardown_blocks(self)
    end
  end
end