110 lines
2.2 KiB
Ruby
110 lines
2.2 KiB
Ruby
module Mutant
|
|
class Reporter
|
|
# Reporter that reports in human readable format
|
|
class CLI < self
|
|
include Concord.new(:output, :format)
|
|
|
|
# Build reporter
|
|
#
|
|
# @param [IO] output
|
|
#
|
|
# @return [Reporter::CLI]
|
|
#
|
|
# @api private
|
|
#
|
|
def self.build(output)
|
|
tty = output.respond_to?(:tty?) && output.tty?
|
|
format = if !Mutant.ci? && tty && Tput::INSTANCE.available
|
|
Format::Framed.new(tty: tty, tput: Tput::INSTANCE)
|
|
else
|
|
Format::Progressive.new(tty: tty)
|
|
end
|
|
new(output, format)
|
|
end
|
|
|
|
# Report start
|
|
#
|
|
# @param [Env] env
|
|
#
|
|
# @return [self]
|
|
#
|
|
# @api private
|
|
#
|
|
def start(env)
|
|
write(format.start(env))
|
|
self
|
|
end
|
|
|
|
# Report progress object
|
|
#
|
|
# @param [Parallel::Status] status
|
|
#
|
|
# @return [self]
|
|
#
|
|
# @api private
|
|
#
|
|
def progress(status)
|
|
write(format.progress(status))
|
|
self
|
|
end
|
|
|
|
# Return report delay in seconds
|
|
#
|
|
# TODO: Move this to a callback registration
|
|
#
|
|
# Reporters other than CLI that might exist in future
|
|
# may only need the final report. So providing a noop callback
|
|
# registration makes more sense for these.
|
|
# As only CLI reporters exist currently I do not really care right now.
|
|
#
|
|
# @return [Float]
|
|
#
|
|
# @api private
|
|
#
|
|
def delay
|
|
format.delay
|
|
end
|
|
|
|
# Report warning
|
|
#
|
|
# @param [String] message
|
|
#
|
|
# @return [self]
|
|
#
|
|
# @api private
|
|
#
|
|
def warn(message)
|
|
output.puts(message)
|
|
self
|
|
end
|
|
|
|
# Report env
|
|
#
|
|
# @param [Result::Env] env
|
|
#
|
|
# @return [self]
|
|
#
|
|
# @api private
|
|
#
|
|
def report(env)
|
|
Printer::EnvResult.run(output, env)
|
|
self
|
|
end
|
|
|
|
private
|
|
|
|
# Write output frame
|
|
#
|
|
# @param [String] frame
|
|
#
|
|
# @return [undefined]
|
|
#
|
|
# @api private
|
|
#
|
|
def write(frame)
|
|
output.write(frame)
|
|
end
|
|
|
|
end # CLI
|
|
end # Reporter
|
|
end # Mutant
|