Sha256: 45c06393daecd2eb7722c3ef0d5df8450939651f5922b479b9b84ff5982cc6ea

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

module Spec
  module Runner
    class Specification
    
      def initialize(name, &block)
        @name = name
        @block = block
        @mocks = []
      end

      def run(reporter=nil, setup_block=nil, teardown_block=nil, dry_run=false, execution_context=nil)
        reporter.spec_started(@name)
        if dry_run
          reporter.spec_finished(@name)
        else
          execution_context = ::Spec::Runner::ExecutionContext.new(self) unless execution_context
          errors = []
          begin
            execution_context.instance_exec(&setup_block) unless setup_block.nil?
            setup_ok = true
            execution_context.instance_exec(&@block)
            spec_ok = true
          rescue => e
            errors << e
          end

          begin
            execution_context.instance_exec(&teardown_block) unless teardown_block.nil?
            teardown_ok = true
            @mocks.each do |mock|
              mock.__verify
            end
          rescue => e
            errors << e
          end

          reporter.spec_finished(@name, errors.first, failure_location(setup_ok, spec_ok, teardown_ok)) unless reporter.nil?
        end
      end

      def add_mock(mock)
        @mocks << mock
      end
      
      def matches_matcher?(matcher)
        matcher.matches? @name 
      end
            
      private
      
      def failure_location(setup_ok, spec_ok, teardown_ok)
        return 'setup' unless setup_ok
        return @name unless spec_ok
        return 'teardown' unless teardown_ok
      end
    
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rspec-0.5.14 lib/spec/runner/specification.rb
rspec-0.5.15 lib/spec/runner/specification.rb