Merge pull request #504 from mbj/feature/sequence-reporter

Add sequence reporter
This commit is contained in:
Dan Kubb 2016-01-11 12:14:56 -08:00
commit 6d8f28e1cf
5 changed files with 58 additions and 16 deletions

View file

@ -1,3 +1,3 @@
---
threshold: 18
total_score: 1169
total_score: 1175

View file

@ -168,6 +168,7 @@ require 'mutant/runner/sink'
require 'mutant/result'
require 'mutant/reporter'
require 'mutant/reporter/null'
require 'mutant/reporter/sequence'
require 'mutant/reporter/cli'
require 'mutant/reporter/cli/printer'
require 'mutant/reporter/cli/printer/config'

View file

@ -0,0 +1,22 @@
module Mutant
class Reporter
class Sequence < self
include Concord.new(:reporters)
%i[warn progress report start].each do |name|
define_method(name) do |value|
reporters.each do |reporter|
reporter.public_send(name, value)
end
self
end
end
def delay
reporters.map(&:delay).min
end
end # Sequence
end # Reporter
end # Mutant

View file

@ -2,21 +2,11 @@ RSpec.describe Mutant::Reporter::Null do
let(:object) { described_class.new }
let(:value) { instance_double(Object) }
describe '#report' do
subject { object.report(value) }
%i[progress report start warn].each do |name|
describe "##{name}" do
subject { object.public_send(name, value) }
it_should_behave_like 'a command method'
end
describe '#warn' do
subject { object.warn(value) }
it_should_behave_like 'a command method'
end
describe '#progress' do
subject { object.progress(value) }
it_should_behave_like 'a command method'
it_should_behave_like 'a command method'
end
end
end

View file

@ -0,0 +1,29 @@
RSpec.describe Mutant::Reporter::Sequence do
let(:object) { described_class.new([reporter_a, reporter_b]) }
let(:value) { instance_double(Object) }
let(:reporter_a) { instance_double(Mutant::Reporter, delay: 1.0) }
let(:reporter_b) { instance_double(Mutant::Reporter, delay: 2.0) }
%i[report progress warn start].each do |name|
describe "##{name}" do
subject { object.public_send(name, value) }
before do
[reporter_a, reporter_b].each do |receiver|
expect(receiver).to receive(name)
.ordered
.with(value)
.and_return(receiver)
end
end
it_should_behave_like 'a command method'
end
end
describe '#delay' do
it 'returns the lowest value' do
expect(object.delay).to eql(1.0)
end
end
end