Merge pull request #504 from mbj/feature/sequence-reporter
Add sequence reporter
This commit is contained in:
commit
6d8f28e1cf
5 changed files with 58 additions and 16 deletions
|
@ -1,3 +1,3 @@
|
||||||
---
|
---
|
||||||
threshold: 18
|
threshold: 18
|
||||||
total_score: 1169
|
total_score: 1175
|
||||||
|
|
|
@ -168,6 +168,7 @@ require 'mutant/runner/sink'
|
||||||
require 'mutant/result'
|
require 'mutant/result'
|
||||||
require 'mutant/reporter'
|
require 'mutant/reporter'
|
||||||
require 'mutant/reporter/null'
|
require 'mutant/reporter/null'
|
||||||
|
require 'mutant/reporter/sequence'
|
||||||
require 'mutant/reporter/cli'
|
require 'mutant/reporter/cli'
|
||||||
require 'mutant/reporter/cli/printer'
|
require 'mutant/reporter/cli/printer'
|
||||||
require 'mutant/reporter/cli/printer/config'
|
require 'mutant/reporter/cli/printer/config'
|
||||||
|
|
22
lib/mutant/reporter/sequence.rb
Normal file
22
lib/mutant/reporter/sequence.rb
Normal 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
|
|
@ -2,21 +2,11 @@ RSpec.describe Mutant::Reporter::Null do
|
||||||
let(:object) { described_class.new }
|
let(:object) { described_class.new }
|
||||||
let(:value) { instance_double(Object) }
|
let(:value) { instance_double(Object) }
|
||||||
|
|
||||||
describe '#report' do
|
%i[progress report start warn].each do |name|
|
||||||
subject { object.report(value) }
|
describe "##{name}" do
|
||||||
|
subject { object.public_send(name, value) }
|
||||||
|
|
||||||
it_should_behave_like 'a command method'
|
it_should_behave_like 'a command method'
|
||||||
end
|
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'
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
29
spec/unit/mutant/reporter/sequence_spec.rb
Normal file
29
spec/unit/mutant/reporter/sequence_spec.rb
Normal 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
|
Loading…
Add table
Reference in a new issue