
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.
38 lines
1.0 KiB
Ruby
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
|