lib/reporters/fivemat_reporter.riml
class FivematReporter < BaseReporter
def initialize
super
self.indents = 0
self.log_buffer = []
self.current_index = 0
self.error_buffer = []
end
defm writeln(msg)
line = "#{self.indent_to_str()}#{msg}"
self.writer.writeln(line)
end
defm write(msg)
line = "#{self.indent_to_str()}#{msg}"
self.writer.write(line)
end
defm write_errorln(msg)
add(self.error_buffer, self.indent_to_str() . msg)
end
defm has_error_lines
return len(self.error_buffer) > 0
end
defm flush_error_buffer
if self.has_error_lines()
for line in self.error_buffer
self.writeln(line)
end
self.error_buffer = []
end
end
defm on_start(stats)
end
defm on_context_start(context, stats)
self.current_index = 0
self.write("#{context} ")
end
defm on_context_end(context, stats)
self.writeln('')
self.flush_error_buffer()
end
defm on_spec_pass(meta, stats)
duration_msg = self.get_duration_msg(meta)
self.write('.')
self.flush_log_buffer()
end
defm show_error(type, meta, err, stats)
char = type[0]
self.write(self.to_red(char))
self.indent(1)
self.write_errorln("#{self.current_index}) #{type}: #{meta.get_sentence()}")
self.indent(1)
self.write_errorln(" ". self.to_red(err.get_message()))
self.indent(1)
self.print_stacktrace(err)
self.flush_log_buffer()
self.unindent(3)
self.write_errorln('')
end
defm on_spec_failure(meta, err, stats)
self.current_index += 1
self.show_error('Failure', meta, err, stats)
end
defm on_spec_error(meta, err, stats)
self.current_index += 1
self.show_error('Error', meta, err, stats)
end
defm indent_to_str
return repeat(" ", self.indents)
end
defm indent(size)
self.indents += size
end
defm unindent(size)
self.indents -= size
end
defm write_epilogue_separator
self.writer.writeln('')
super
end
defm write_log_line(line)
self.write_errorln(" log: #{line}")
end
defm write_stacktrace_line(line)
self.write_errorln(" " . line)
end
defm flush_log_buffer
if self.has_logs()
self.write_errorln('')
for line in self.log_buffer
self.write_log_line(line)
end
self.log_buffer = []
end
end
end