Files
codeocean/lib/assessor.rb
Sebastian Serth b80d372c53 Prevent errors with unavailable linter translations
Not all testing frameworks provide a translation for Linter (or linter support at all). For these, we don't want to call the non-existing method but rather return the same messages as before.
2022-12-23 13:05:39 +01:00

38 lines
1.0 KiB
Ruby

# frozen_string_literal: true
class Assessor
MAXIMUM_SCORE = 1
def assess(output)
test_outcome = @testing_framework_adapter.test_outcome(output)
test_outcome.merge(score: calculate_score(test_outcome))
rescue StandardError
{score: 0}
end
def calculate_score(test_outcome)
score = 0.0
if test_outcome[:passed].to_d != BigDecimal('0.0') && test_outcome[:count].to_d != BigDecimal('0.0')
score = (test_outcome[:passed].to_f / test_outcome[:count])
# prevent negative scores
score = [0.0, score].max
end
score
end
private :calculate_score
def initialize(options = {})
if options[:execution_environment].testing_framework?
@testing_framework_adapter = options[:execution_environment].testing_framework.constantize.new
else
raise Error.new('No testing framework adapter set!')
end
end
def translate_linter(result, locale)
@testing_framework_adapter.try(:translate_linter, result, locale) || result
end
class Error < RuntimeError; end
end