Sha256: 9ac67bc290054a4f27a3b9c4c43a054c9981b05f967c4fb4e182b1f7db17e7bb

Contents?: true

Size: 1.46 KB

Versions: 4

Compression:

Stored size: 1.46 KB

Contents

module StonesSpec
  class Runner
    include StonesSpec::WithTempfile
    
    def initialize(parser)
      @parser = parser
    end

    def run!(test_definition)
      subject = Subject.from(test_definition[:subject])
      source = test_definition[:source]
      check_head_position = test_definition[:check_head_position]
      show_initial_board = test_definition.fetch(:show_initial_board, true)

      begin
        [test_definition[:examples].map do |example_definition|
          run_example!(example_definition, check_head_position, show_initial_board, source, subject)
         end]
      rescue Gobstones::AbortedError => e
        test_definition[:expect_endless_while] ? [e.message, :passed] : [e.message, e.status]
      rescue Gobstones::Error => e
        [e.message, e.status]
      end
    end

    private

    def run_example!(example_definition, check_head_position, show_initial_board, source, subject)
      example = Example.new(subject, example_definition)

      data = example.execution_data source
      files = {
        source: Gobstones.source_code_extension,
        initial_board: Gobstones.board_extension,
        final_board: Gobstones.board_extension
      }.map_values { |name, extension| write_tempfile(data[name], extension) }

      execution = example.execute! files, @parser

      example.result files, execution, Postcondition.from(example, check_head_position, show_initial_board)
    ensure
      files.each_value(&:unlink)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
stones-spec-1.0.4 lib/runner.rb
stones-spec-1.0.3 lib/runner.rb
stones-spec-1.0.2 lib/runner.rb
stones-spec-1.0.1 lib/runner.rb