free_mutant/lib/mutant/reporter/cli.rb

95 lines
1.7 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)
ci = ENV.key?('CI')
tty = output.respond_to?(:tty?) && output.tty?
format =
if !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
#
# @api private
#
def start(env)
write(format.start(env))
self
end
# Report progress object
#
# @param [Runner::Collector] collector
#
# @return [self]
#
# @api private
#
def progress(collector)
write(format.progress(collector))
self
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)
write(format.report(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