diff --git a/config/flay.yml b/config/flay.yml index ded1bf5e..d026cd13 100644 --- a/config/flay.yml +++ b/config/flay.yml @@ -1,3 +1,3 @@ --- threshold: 18 -total_score: 1169 +total_score: 1175 diff --git a/lib/mutant.rb b/lib/mutant.rb index ebbbd895..2e7c8b50 100644 --- a/lib/mutant.rb +++ b/lib/mutant.rb @@ -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' diff --git a/lib/mutant/reporter/sequence.rb b/lib/mutant/reporter/sequence.rb new file mode 100644 index 00000000..154eae55 --- /dev/null +++ b/lib/mutant/reporter/sequence.rb @@ -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 diff --git a/spec/unit/mutant/reporter/null_spec.rb b/spec/unit/mutant/reporter/null_spec.rb index aacdd12c..59d2ca62 100644 --- a/spec/unit/mutant/reporter/null_spec.rb +++ b/spec/unit/mutant/reporter/null_spec.rb @@ -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 diff --git a/spec/unit/mutant/reporter/sequence_spec.rb b/spec/unit/mutant/reporter/sequence_spec.rb new file mode 100644 index 00000000..c5c98b46 --- /dev/null +++ b/spec/unit/mutant/reporter/sequence_spec.rb @@ -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