Sha256: f4f33104a987c439a348669c0263e2d9c08c6b03eba7a6485579978018ffab10

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 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)
        return reporter.spec_finished(@name) if dry_run
        execution_context = execution_context || ::Spec::Runner::ExecutionContext.new(self)
        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

      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

1 entries across 1 versions & 1 rubygems

Version Path
rspec-0.6.4 lib/spec/runner/specification.rb