Sha256: 51e722cbbddb6b6e6b86502adb4037582aad7628588eb3edcc2e1a92948009cd

Contents?: true

Size: 1.26 KB

Versions: 4

Compression:

Stored size: 1.26 KB

Contents

require 'ostruct'

module StonesSpec
  class Example < OpenStruct
    include Mumukit::WithCommandLine

    def initialize(subject, attributes)
      super attributes
      @title = attributes[:title]
      @subject = subject
      @precondition = Precondition.from_example(self)
    end

    def execution_data(source)
      { source: @subject.test_program(source, @precondition.arguments),
        initial_board: @precondition.initial_board_gbb }
    end

    def execute!(files)
      result, status = run_command "#{Gobstones.run(files[:source], files[:initial_board], files[:final_board])} 2>&1"
      { result: result, status: status }
    end

    def result(files, execution, postcondition)
      if execution[:status] == :aborted
        raise Gobstones::AbortedError, execution[:result]
      end

      if execution[:status] == :failed
        error_message = Gobstones.parse_error_message execution[:result]
        Gobstones.ensure_no_syntax_error! error_message
      end

      postcondition.validate(files[:initial_board].open.read, files[:final_board].open.read, execution[:result], execution[:status])
    end

    def title
      @title || default_title
    end

    private

    def default_title
      @subject.default_title @precondition.arguments
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
mumuki-xgobstones-runner-2.1.0 lib/stones_spec/example.rb
mumuki-xgobstones-runner-2.0.0 lib/stones_spec/example.rb
mumuki-gobstones-runner-1.0.1 lib/stones_spec/example.rb
mumuki-gobstones-runner-1.0.0 lib/stones_spec/example.rb