From 68da0456ead0713a06c8b8fed3a8516c67c9f4c3 Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Tue, 4 Dec 2018 14:28:49 +0000 Subject: [PATCH] Change fail fast computation to reduce scope * All state to compute #stop? is available on the result already, there is no need to peek into the structure from the outside. --- lib/mutant/result.rb | 8 +++++ lib/mutant/runner/sink.rb | 2 +- spec/unit/mutant/result/env_spec.rb | 55 ++++++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/lib/mutant/result.rb b/lib/mutant/result.rb index 8fb15c4e..b3e449fd 100644 --- a/lib/mutant/result.rb +++ b/lib/mutant/result.rb @@ -108,6 +108,14 @@ module Mutant env.subjects.length end + # Test if processing needs to stop + # + # @return [Boolean] + # + def stop? + env.config.fail_fast && !subject_results.all?(&:success?) + end + end # Env # Test result diff --git a/lib/mutant/runner/sink.rb b/lib/mutant/runner/sink.rb index dd717722..041c00df 100644 --- a/lib/mutant/runner/sink.rb +++ b/lib/mutant/runner/sink.rb @@ -29,7 +29,7 @@ module Mutant # # @return [Boolean] def stop? - env.config.fail_fast && !status.subject_results.all?(&:success?) + status.stop? end # Handle mutation finish diff --git a/spec/unit/mutant/result/env_spec.rb b/spec/unit/mutant/result/env_spec.rb index 75cc994f..97104ee5 100644 --- a/spec/unit/mutant/result/env_spec.rb +++ b/spec/unit/mutant/result/env_spec.rb @@ -5,13 +5,16 @@ RSpec.describe Mutant::Result::Env do described_class.new( runtime: instance_double(Float), env: env, - subject_results: [subject_result] + subject_results: subject_results ) end + let(:subject_results) { [subject_result] } + let(:env) do instance_double( Mutant::Env, + config: instance_double(Mutant::Config, fail_fast: fail_fast), subjects: [instance_double(Mutant::Subject)], mutations: [instance_double(Mutant::Mutation)] ) @@ -22,12 +25,14 @@ RSpec.describe Mutant::Result::Env do Mutant::Result::Subject, amount_mutation_results: results, amount_mutations_killed: killed, - success?: true + success?: subject_success? ) end - let(:results) { 1 } - let(:killed) { 0 } + let(:fail_fast) { false } + let(:killed) { 0 } + let(:results) { 1 } + let(:subject_success?) { true } describe '#success?' do subject { object.success? } @@ -81,4 +86,46 @@ RSpec.describe Mutant::Result::Env do it { should eql(1) } end + + describe '#stop?' do + subject { object.stop? } + + context 'without fail fast' do + context 'on empty subjects' do + let(:subject_results) { [] } + + it { should be(false) } + end + + context 'on failed subject' do + let(:subject_success?) { false } + + it { should be(false) } + end + + context 'on successful subject' do + it { should be(false) } + end + end + + context 'with fail fast' do + let(:fail_fast) { true } + + context 'on empty subjects' do + let(:subject_results) { [] } + + it { should be(false) } + end + + context 'on failed subject' do + let(:subject_success?) { false } + + it { should be(true) } + end + + context 'on successful subject' do + it { should be(false) } + end + end + end end