class Daigaku::TestResult
Constants
- CODE_ERROR_MESSAGE
Attributes
example_count[R]
examples[R]
failure_count[R]
Public Class Methods
new(result_json)
click to toggle source
# File lib/daigaku/test_result.rb, line 9 def initialize(result_json) @result = begin JSON.parse(result_json, symbolize_names: true) rescue => error syntax_error_json(error) end @example_count = @result.dig(:summary, :example_count) @failure_count = @result.dig(:summary, :failure_count) error_count = @result.dig(:summary, :errors_outside_of_examples_count) || 0 if error_count > 0 @failure_count = error_count details = error_details(@result) @result = error_json(details) end @examples = @result[:examples].map do |example| description = example[:full_description] status = example[:status] exception = example[:exception] message = exception ? exception[:message] : nil TestExample.new(description: description, status: status, message: message) end end
Public Instance Methods
passed?()
click to toggle source
# File lib/daigaku/test_result.rb, line 36 def passed? @examples.reduce(true) do |passed, example| passed && example.passed? end end
summary()
click to toggle source
# File lib/daigaku/test_result.rb, line 42 def summary if passed? "Your code passed all tests. #{Daigaku::Congratulator.message}" else build_failed_summary end end
summary_lines()
click to toggle source
# File lib/daigaku/test_result.rb, line 50 def summary_lines summary.lines.map(&:strip) end
Private Instance Methods
build_failed_summary()
click to toggle source
# File lib/daigaku/test_result.rb, line 56 def build_failed_summary message = examples.map do |example| "#{example.description}\n#{example.status}: #{example.message}".strip end message.join("\n" * 3) end
error_details(result)
click to toggle source
# File lib/daigaku/test_result.rb, line 69 def error_details(result) result[:messages] .first .split('\n') .each_with_index .select { |line, index| index > 0 && line.matches?(/temp_.+\.rb/) } .first.to_s end
error_json(details)
click to toggle source
# File lib/daigaku/test_result.rb, line 78 def error_json(details) { summary: {}, examples: [ { status: TestExample::FAILED, exception: { message: "#{CODE_ERROR_MESSAGE}\n\n#{details}" } } ] } end
failure_details(error)
click to toggle source
# File lib/daigaku/test_result.rb, line 90 def failure_details(error) line = error.backtrace.first error_message = remove_colorization(error.message) "#{error.class} in #{line}:\n#{error_message}" end
remove_colorization(text)
click to toggle source
# File lib/daigaku/test_result.rb, line 96 def remove_colorization(text) text.gsub(/\x1b\[[0-9]*m/i, '') end
syntax_error_json(error)
click to toggle source
# File lib/daigaku/test_result.rb, line 64 def syntax_error_json(error) details = failure_details(error) error_json(details) end