class GobstonesPrecompileHook

Constants

DEFAULT_TIMEOUT

Attributes

batch[RW]

Public Instance Methods

add_missing_headers!(request) click to toggle source
# File lib/precompile_hook.rb, line 38
def add_missing_headers!(request)
  request.test.gsub! /(.*(initial_board|final_board): \|.*\n)(?!.*GBB\/1\.0.*)/, "\\1    GBB/1.0\\3\n"
end
command_line(filename) click to toggle source
# File lib/precompile_hook.rb, line 13
def command_line(filename)
  "gobstones-cli --batch #{filename} #{locale_argument} #{timeout_argument}"
end
compile(request) click to toggle source
Calls superclass method
# File lib/precompile_hook.rb, line 29
def compile(request)
  add_missing_headers! request
  @locale = request[:locale]
  file = super request

  struct request.to_h.merge precompiled_batch: @batch,
                            precompiled_result: run!(file)
end
compile_file_content(request) click to toggle source
# File lib/precompile_hook.rb, line 42
def compile_file_content(request)
  @batch = Gobstones::BatchParser.parse(request)
  @batch.to_json
end
locale_argument() click to toggle source
# File lib/precompile_hook.rb, line 17
def locale_argument
  "--language #{@locale}" if @locale
end
post_process_file(_file, result, status) click to toggle source
# File lib/precompile_hook.rb, line 47
def post_process_file(_file, result, status)
  if status.passed?
    result = result.parse_as_json
    status = :aborted if is_timeout? result and !expects_timeout?
  end

  [result, status]
end
tempfile_extension() click to toggle source
# File lib/precompile_hook.rb, line 9
def tempfile_extension
  '.json'
end
timeout() click to toggle source
# File lib/precompile_hook.rb, line 25
def timeout
  (ENV['MUMUKI_GOBSTONES_TIMEOUT'] || DEFAULT_TIMEOUT).to_i * 1000
end
timeout_argument() click to toggle source
# File lib/precompile_hook.rb, line 21
def timeout_argument
  "--timeout " + timeout.to_s
end

Private Instance Methods

expects_timeout?() click to toggle source
# File lib/precompile_hook.rb, line 58
def expects_timeout?
  @batch.options[:expect_endless_while] || @batch.examples.any? { |it| it[:postconditions][:error] == 'timeout' }
end
is_timeout?(result) click to toggle source
# File lib/precompile_hook.rb, line 62
def is_timeout?(result)
  result[0]&.dig(:result, :finalBoardError, :reason, :code) === 'timeout'
end