class DotMatrixReporter < BaseReporter

def initialize
  super
  self.dots = 0
  self.line_buffer = []
  self.log_messages = []
end

defm write(msg)
  if self.dots > 50
    self.writer.writeln(msg)
    self.dots = 0
  else
    self.writer.write(msg)
  end
end

defm on_spec_pass(meta, stats)
  self.dots += 1
  self.write('.')
end

defm on_spec_failure(meta, err, stats)
  self.dots += 1
  self.write(self.to_red("x"))

  name = meta.get_sentence()
  context = meta.get_context()
  add(self.line_buffer, self.to_red("#{context} ##{name}"))
  add(self.line_buffer, self.to_red("    #{err.get_message()}"))

  self.print_stacktrace(err)

  add(self.line_buffer, '')
end

defm on_spec_error(meta, err, stats)
  self.on_spec_failure(meta, err, stats)
end

defm write_epilogue_separator
  self.flush_log_buffer()

  self.writer.writeln('')
  for line in self.line_buffer
    self.writer.writeln(line)
  end

  self.writer.writeln("")
end

defm write_stacktrace_line(line)
  add(self.line_buffer, "       #{line}")
end

end