class Mumukit::Metatest::InteractiveChecker

Public Class Methods

new(request, strip_mode: :left_and_right) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 4
def initialize(request, strip_mode: :left_and_right)
  @request = request
  @strip_mode = strip_mode
end

Public Instance Methods

check_last_query_equals(_result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 9
def check_last_query_equals(_result, goal)
  expected = goal[:value]
  actual = query
  fail_t :check_last_query_equals, expected: expected, actual: actual unless expected == actual
end
check_last_query_fails(result, _goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 21
def check_last_query_fails(result, _goal)
  actual = query
  fail_t :check_last_query_fails, actual: actual unless result[:query][:status].failed?
end
check_last_query_matches(_result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 15
def check_last_query_matches(_result, goal)
  regexp = goal[:regexp]
  actual = query
  fail_t :check_last_query_matches, regexp: regexp.inspect, actual: actual unless query.match?(regexp)
end
check_last_query_output_includes(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 44
def check_last_query_output_includes(result, goal)
  compare_last_query_by(:check_last_query_output_includes, result, goal) { |expected, actual| actual.include? expected }
end
check_last_query_output_like(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 48
def check_last_query_output_like(result, goal)
  compare_last_query_by(:check_last_query_output_like, result, goal) { |expected, actual| normalize(expected) == normalize(actual) }
end
check_last_query_outputs(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 40
def check_last_query_outputs(result, goal)
  compare_last_query_by(:check_last_query_outputs, result, goal) { |expected, actual| expected == actual }
end
check_last_query_passes(result, _goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 58
def check_last_query_passes(result, _goal)
  actual = query
  fail_t :check_last_query_passes, actual: actual unless result[:query][:status].passed?
end
check_queries_equal(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 26
def check_queries_equal(result, goal)
  matches = goal[:values].map do |value|
    queries.find { |query| query == value }
  end.compact
  fail_queries_t :check_queries_equal, queries, matches, goal[:values]
end
check_queries_match(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 33
def check_queries_match(result, goal)
  matches = goal[:regexps].map do |regexp|
    queries.find { |query| query.match? regexp }
  end.compact
  fail_queries_t :check_queries_match, queries, matches, goal[:regexps]
end
check_query_fails(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 67
def check_query_fails(result, goal)
  fail_t :check_query_fails, query: goal[:query] unless result[:status].failed?
end
check_query_outputs(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 71
def check_query_outputs(result, goal)
  expected = goal[:output]
  actual = result[:goal]
  fail_t :check_query_outputs, query: goal[:query], expected: expected, actual: actual unless expected == actual
end
check_query_passes(result, goal) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 63
def check_query_passes(result, goal)
  fail_t :check_query_passes, query: goal[:query] unless result[:status].passed?
end
compare_last_query_by(sym, result, goal, &condition) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 52
def compare_last_query_by(sym, result, goal, &condition)
  expected = goal[:output]
  actual = result[:query][:result]
  fail_t sym, expected: expected, actual: actual unless condition.call expected, actual
end
fail_t(sym, **kwargs) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 81
def fail_t(sym, **kwargs)
  fail I18n.t(locale(sym), **kwargs)
end
locale(sym) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 85
def locale(sym)
  'mumukit.interactive.' + sym.to_s
end
normalize(a_string) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 89
def normalize(a_string)
  a_string.delete(" \t\r\n").downcase
end
render_success_output(_value) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 77
def render_success_output(_value)
  I18n.t locale(:goal_passed)
end

Private Instance Methods

fail_queries_t(key, queries, matches, expectations) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 99
def fail_queries_t(key, queries, matches, expectations)
  fail_t key, all: join_queries(queries), matches: join_queries(matches) unless matches.size == expectations.size
end
join_queries(queries) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 95
def join_queries(queries)
  queries.map { |it| "`#{it}`" }.join(", ").presence || '**∅**'
end
queries() click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 122
def queries
  @queries ||= [query] + cookie
end
query() click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 103
def query
  strip @request.query.to_s
end
strip(string) click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 111
def strip(string)
  case strip_mode
  when :strict then string
  when :right_only then string.rstrip
  when :right_and_internal then string.rstrip.squeeze(' ')
  when :left_and_right then string.strip
  when :left_right_and_internal then string.strip.squeeze(' ')
  else raise "Unsupported strip mode #{@strip_mode}"
  end
end
strip_mode() click to toggle source
# File lib/mumukit/metatest/interactive_checker.rb, line 126
def strip_mode
  @request.dig(:settings, :interactive_strip_mode) || @strip_mode
end