lib/cucumber/core/test/mapper.rb



require 'cucumber/initializer'
module Cucumber
  module Core
    module Test
      class Mapper
        include Cucumber.initializer(:mappings, :runner)

        def test_case(test_case, &descend)
          mapper = CaseMapper.new(mappings)
          descend.call(mapper)
          test_case.with_steps(mapper.test_steps).describe_to(runner)
          self
        end

        def done
          runner.done
          self
        end

        class CaseMapper
          include Cucumber.initializer(:mappings)

          attr_reader :test_steps

          def initialize(*)
            super
            @test_steps = []
          end

          def test_step(test_step)
            mapper = StepMapper.new(test_step)
            test_step.describe_to(mappings, mapper)
            test_steps << mapper.mapped_test_step
          end

        end

        class StepMapper
          include Cucumber.initializer(:test_step)

          attr_reader :mapped_test_step

          def initialize(*)
            super
            @mapped_test_step = test_step
          end

          def map(&block)
            @mapped_test_step = test_step.map(&block)
          end
        end

      end
    end
  end
end