class StonesSpec::Runner

Public Class Methods

new(parser) click to toggle source
# File lib/runner.rb, line 5
def initialize(parser)
  @parser = parser
end

Public Instance Methods

run!(test_definition) click to toggle source
# File lib/runner.rb, line 9
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 Instance Methods

run_example!(example_definition, check_head_position, show_initial_board, source, subject) click to toggle source
# File lib/runner.rb, line 28
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