Sha256: b0a4c6aef761895916c14c1db1c933c3e70b4f90985ce5355c512327fd2b1b67

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

require 'ostruct'

module StonesSpec
  class Example < OpenStruct
    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, parser)
      parser.run(files[:source], files[:initial_board], files[:final_board])
    end

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

      if execution[:status] == :syntax_error
        raise Gobstones::SyntaxError, execution[:result]
      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

1 entries across 1 versions & 1 rubygems

Version Path
stones-spec-1.0.3 lib/example.rb