mutant 0.6.7 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Changelog.md +10 -0
 - data/README.md +1 -1
 - data/config/flay.yml +1 -1
 - data/config/reek.yml +11 -40
 - data/config/rubocop.yml +1 -1
 - data/lib/mutant.rb +10 -2
 - data/lib/mutant/actor.rb +64 -0
 - data/lib/mutant/actor/actor.rb +50 -0
 - data/lib/mutant/actor/env.rb +35 -0
 - data/lib/mutant/actor/mailbox.rb +53 -0
 - data/lib/mutant/actor/receiver.rb +48 -0
 - data/lib/mutant/actor/sender.rb +27 -0
 - data/lib/mutant/ast/types.rb +1 -1
 - data/lib/mutant/cli.rb +2 -0
 - data/lib/mutant/config.rb +2 -1
 - data/lib/mutant/env.rb +6 -2
 - data/lib/mutant/expression/methods.rb +1 -1
 - data/lib/mutant/integration.rb +11 -1
 - data/lib/mutant/isolation.rb +1 -2
 - data/lib/mutant/meta/example.rb +1 -1
 - data/lib/mutant/mutation.rb +47 -21
 - data/lib/mutant/mutator/node.rb +1 -1
 - data/lib/mutant/mutator/node/literal/symbol.rb +1 -1
 - data/lib/mutant/mutator/node/send.rb +4 -3
 - data/lib/mutant/reporter/cli.rb +2 -0
 - data/lib/mutant/reporter/cli/format.rb +23 -36
 - data/lib/mutant/reporter/cli/printer.rb +66 -27
 - data/lib/mutant/result.rb +45 -58
 - data/lib/mutant/runner.rb +47 -154
 - data/lib/mutant/runner/master.rb +174 -0
 - data/lib/mutant/runner/scheduler.rb +141 -0
 - data/lib/mutant/runner/worker.rb +93 -0
 - data/lib/mutant/subject/method/instance.rb +1 -15
 - data/lib/mutant/test.rb +2 -15
 - data/lib/mutant/version.rb +1 -1
 - data/meta/send.rb +16 -0
 - data/mutant-rspec.gemspec +1 -1
 - data/mutant.gemspec +1 -1
 - data/spec/integration/mutant/rspec_spec.rb +0 -6
 - data/spec/spec_helper.rb +9 -1
 - data/spec/support/fake_actor.rb +93 -0
 - data/spec/support/shared_context.rb +135 -0
 - data/spec/unit/mutant/actor/actor_spec.rb +35 -0
 - data/spec/unit/mutant/actor/binding_spec.rb +32 -0
 - data/spec/unit/mutant/actor/env_spec.rb +49 -0
 - data/spec/unit/mutant/actor/message_spec.rb +23 -0
 - data/spec/unit/mutant/actor/receiver_spec.rb +60 -0
 - data/spec/unit/mutant/actor/sender_spec.rb +22 -0
 - data/spec/unit/mutant/cli_spec.rb +17 -4
 - data/spec/unit/mutant/env_spec.rb +2 -2
 - data/spec/unit/mutant/mailbox_spec.rb +33 -0
 - data/spec/unit/mutant/mutation_spec.rb +52 -18
 - data/spec/unit/mutant/mutator/registry_spec.rb +4 -4
 - data/spec/unit/mutant/reporter/cli_spec.rb +131 -249
 - data/spec/unit/mutant/result/env_spec.rb +55 -0
 - data/spec/unit/mutant/result/subject_spec.rb +43 -0
 - data/spec/unit/mutant/runner/master_spec.rb +199 -0
 - data/spec/unit/mutant/runner/scheduler_spec.rb +161 -0
 - data/spec/unit/mutant/runner/worker_spec.rb +73 -0
 - data/spec/unit/mutant/runner_spec.rb +60 -118
 - data/spec/unit/mutant/subject/method/instance_spec.rb +18 -31
 - data/spec/unit/mutant/warning_filter_spec.rb +1 -1
 - metadata +39 -14
 - data/lib/mutant/runner/collector.rb +0 -133
 - data/lib/mutant/warning_expectation.rb +0 -47
 - data/spec/unit/mutant/runner/collector_spec.rb +0 -198
 - data/spec/unit/mutant/test_spec.rb +0 -23
 - data/spec/unit/mutant/warning_expectation_spec.rb +0 -80
 - data/test_app/Gemfile.rspec2 +0 -6
 
| 
         @@ -4,9 +4,58 @@ RSpec.describe Mutant::Mutation do 
     | 
|
| 
       4 
4 
     | 
    
         
             
                SYMBOL = 'test'.freeze
         
     | 
| 
       5 
5 
     | 
    
         
             
              end
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
              let(:object) 
     | 
| 
       8 
     | 
    
         
            -
              let(: 
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
              let(:object)  { TestMutation.new(mutation_subject, Mutant::AST::Nodes::N_NIL) }
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:context) { double('Context')                                             }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              let(:mutation_subject) do
         
     | 
| 
      
 11 
     | 
    
         
            +
                double(
         
     | 
| 
      
 12 
     | 
    
         
            +
                  'Subject',
         
     | 
| 
      
 13 
     | 
    
         
            +
                  identification: 'subject',
         
     | 
| 
      
 14 
     | 
    
         
            +
                  context: context,
         
     | 
| 
      
 15 
     | 
    
         
            +
                  source: 'original',
         
     | 
| 
      
 16 
     | 
    
         
            +
                  tests:  tests
         
     | 
| 
      
 17 
     | 
    
         
            +
                )
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              let(:test_a) { double('Test A') }
         
     | 
| 
      
 21 
     | 
    
         
            +
              let(:test_b) { double('Test B') }
         
     | 
| 
      
 22 
     | 
    
         
            +
              let(:tests)  { [test_a, test_b] }
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              describe '#kill' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                let(:isolation)    { Mutant::Isolation::None                                                 }
         
     | 
| 
      
 26 
     | 
    
         
            +
                let(:integration)  { double('Integration')                                                   }
         
     | 
| 
      
 27 
     | 
    
         
            +
                let(:object)       { Mutant::Mutation::Evil.new(mutation_subject, Mutant::AST::Nodes::N_NIL) }
         
     | 
| 
      
 28 
     | 
    
         
            +
                let(:wrapped_node) { double('Wrapped Node')                                                  }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                subject { object.kill(isolation, integration) }
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                before do
         
     | 
| 
      
 33 
     | 
    
         
            +
                  allow(Time).to receive(:now).and_return(Time.at(0))
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                context 'when isolation does not raise error' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  let(:test_result)  { double('Test Result A', passed: false)                                  }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 40 
     | 
    
         
            +
                    expect(mutation_subject).to receive(:public?).and_return(true).ordered
         
     | 
| 
      
 41 
     | 
    
         
            +
                    expect(mutation_subject).to receive(:prepare).and_return(mutation_subject).ordered
         
     | 
| 
      
 42 
     | 
    
         
            +
                    expect(context).to receive(:root).with(s(:nil)).and_return(wrapped_node).ordered
         
     | 
| 
      
 43 
     | 
    
         
            +
                    expect(Mutant::Loader::Eval).to receive(:call).with(wrapped_node, mutation_subject).and_return(nil).ordered
         
     | 
| 
      
 44 
     | 
    
         
            +
                    expect(integration).to receive(:call).with(tests).and_return(test_result).ordered
         
     | 
| 
      
 45 
     | 
    
         
            +
                    expect(test_result).to receive(:update).with(tests: tests).and_return(test_result).ordered
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  it { should eql(test_result) }
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                context 'when isolation does raise error' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 53 
     | 
    
         
            +
                    expect(isolation).to receive(:call).and_raise(Mutant::Isolation::Error, 'test-error')
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  it { should eql(Mutant::Result::Test.new(tests: tests, output: 'test-error', passed: false, runtime: 0.0)) }
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
       10 
59 
     | 
    
         | 
| 
       11 
60 
     | 
    
         
             
              describe '#code' do
         
     | 
| 
       12 
61 
     | 
    
         
             
                subject { object.code }
         
     | 
| 
         @@ -24,21 +73,6 @@ RSpec.describe Mutant::Mutation do 
     | 
|
| 
       24 
73 
     | 
    
         
             
                it_should_behave_like 'an idempotent method'
         
     | 
| 
       25 
74 
     | 
    
         
             
              end
         
     | 
| 
       26 
75 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
              describe '#insert' do
         
     | 
| 
       28 
     | 
    
         
            -
                subject { object.insert }
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                let(:wrapped_node) { double('Wrapped Node') }
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                before do
         
     | 
| 
       33 
     | 
    
         
            -
                  expect(mutation_subject).to receive(:public?).ordered.and_return(true)
         
     | 
| 
       34 
     | 
    
         
            -
                  expect(mutation_subject).to receive(:prepare).ordered
         
     | 
| 
       35 
     | 
    
         
            -
                  expect(context).to receive(:root).ordered.with(s(:nil)).and_return(wrapped_node)
         
     | 
| 
       36 
     | 
    
         
            -
                  expect(Mutant::Loader::Eval).to receive(:call).ordered.with(wrapped_node, mutation_subject).and_return(nil)
         
     | 
| 
       37 
     | 
    
         
            -
                end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                it_should_behave_like 'a command method'
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
76 
     | 
    
         
             
              describe '#source' do
         
     | 
| 
       43 
77 
     | 
    
         
             
                subject { object.source }
         
     | 
| 
       44 
78 
     | 
    
         | 
| 
         @@ -2,7 +2,7 @@ RSpec.describe Mutant::Mutator::Registry do 
     | 
|
| 
       2 
2 
     | 
    
         
             
              describe '#lookup' do
         
     | 
| 
       3 
3 
     | 
    
         
             
                subject { Mutant::Mutator::REGISTRY.lookup(node) }
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
                context 'on  
     | 
| 
      
 5 
     | 
    
         
            +
                context 'on registered node' do
         
     | 
| 
       6 
6 
     | 
    
         
             
                  let(:node) { s(:true) }
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                  it { should eql(Mutant::Mutator::Node::Literal::Boolean) }
         
     | 
| 
         @@ -12,7 +12,7 @@ RSpec.describe Mutant::Mutator::Registry do 
     | 
|
| 
       12 
12 
     | 
    
         
             
                  let(:node) { s(:unknown) }
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                  it 'raises error' do
         
     | 
| 
       15 
     | 
    
         
            -
                    expect { subject }.to raise_error(described_class::RegistryError,  
     | 
| 
      
 15 
     | 
    
         
            +
                    expect { subject }.to raise_error(described_class::RegistryError, 'No mutator to handle: :unknown')
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
         @@ -24,7 +24,7 @@ RSpec.describe Mutant::Mutator::Registry do 
     | 
|
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                subject { object.register(type, mutator) }
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                context 'when  
     | 
| 
      
 27 
     | 
    
         
            +
                context 'when registering an invalid node type' do
         
     | 
| 
       28 
28 
     | 
    
         
             
                  let(:type) { :invalid }
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  it 'raises error' do
         
     | 
| 
         @@ -32,7 +32,7 @@ RSpec.describe Mutant::Mutator::Registry do 
     | 
|
| 
       32 
32 
     | 
    
         
             
                  end
         
     | 
| 
       33 
33 
     | 
    
         
             
                end
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
                context 'when  
     | 
| 
      
 35 
     | 
    
         
            +
                context 'when registering a valid node type' do
         
     | 
| 
       36 
36 
     | 
    
         
             
                  let(:type) { :true }
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                  it 'allows to lookup mutator' do
         
     | 
| 
         @@ -1,4 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            RSpec.describe Mutant::Reporter::CLI do
         
     | 
| 
      
 2 
     | 
    
         
            +
              setup_shared_context
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
       2 
4 
     | 
    
         
             
              let(:object) { described_class.new(output, format) }
         
     | 
| 
       3 
5 
     | 
    
         
             
              let(:output) { StringIO.new }
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
         @@ -31,110 +33,6 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       31 
33 
     | 
    
         
             
                allow(Time).to receive(:now).and_return(Time.now)
         
     | 
| 
       32 
34 
     | 
    
         
             
              end
         
     | 
| 
       33 
35 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
              let(:result) do
         
     | 
| 
       35 
     | 
    
         
            -
                Mutant::Result::Env.new(
         
     | 
| 
       36 
     | 
    
         
            -
                  env:             env,
         
     | 
| 
       37 
     | 
    
         
            -
                  runtime:         1.1,
         
     | 
| 
       38 
     | 
    
         
            -
                  subject_results: subject_results
         
     | 
| 
       39 
     | 
    
         
            -
                )
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              let(:env) do
         
     | 
| 
       43 
     | 
    
         
            -
                double(
         
     | 
| 
       44 
     | 
    
         
            -
                  'Env',
         
     | 
| 
       45 
     | 
    
         
            -
                  class: Mutant::Env,
         
     | 
| 
       46 
     | 
    
         
            -
                  matchable_scopes: matchable_scopes,
         
     | 
| 
       47 
     | 
    
         
            -
                  config: config,
         
     | 
| 
       48 
     | 
    
         
            -
                  subjects: subjects,
         
     | 
| 
       49 
     | 
    
         
            -
                  mutations: subjects.flat_map(&:mutations)
         
     | 
| 
       50 
     | 
    
         
            -
                )
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              let(:config)           { Mutant::Config::DEFAULT.update(jobs: 1) }
         
     | 
| 
       54 
     | 
    
         
            -
              let(:mutation_class)   { Mutant::Mutation::Evil                       }
         
     | 
| 
       55 
     | 
    
         
            -
              let(:matchable_scopes) { double('Matchable Scopes', length: 10)       }
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
              before do
         
     | 
| 
       58 
     | 
    
         
            -
                allow(mutation_a).to receive(:subject).and_return(_subject)
         
     | 
| 
       59 
     | 
    
         
            -
                allow(mutation_b).to receive(:subject).and_return(_subject)
         
     | 
| 
       60 
     | 
    
         
            -
              end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
              let(:mutation_a) do
         
     | 
| 
       63 
     | 
    
         
            -
                double(
         
     | 
| 
       64 
     | 
    
         
            -
                  'Mutation',
         
     | 
| 
       65 
     | 
    
         
            -
                  identification:  'mutation_id-a',
         
     | 
| 
       66 
     | 
    
         
            -
                  class:           mutation_class,
         
     | 
| 
       67 
     | 
    
         
            -
                  original_source: 'true',
         
     | 
| 
       68 
     | 
    
         
            -
                  source:          mutation_source
         
     | 
| 
       69 
     | 
    
         
            -
                )
         
     | 
| 
       70 
     | 
    
         
            -
              end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
              let(:mutation_b) do
         
     | 
| 
       73 
     | 
    
         
            -
                double(
         
     | 
| 
       74 
     | 
    
         
            -
                  'Mutation',
         
     | 
| 
       75 
     | 
    
         
            -
                  identification:  'mutation_id-b',
         
     | 
| 
       76 
     | 
    
         
            -
                  class:           mutation_class,
         
     | 
| 
       77 
     | 
    
         
            -
                  original_source: 'true',
         
     | 
| 
       78 
     | 
    
         
            -
                  source:          mutation_source
         
     | 
| 
       79 
     | 
    
         
            -
                )
         
     | 
| 
       80 
     | 
    
         
            -
              end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
              let(:mutation_source) { 'false' }
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
              let(:_subject) do
         
     | 
| 
       85 
     | 
    
         
            -
                double(
         
     | 
| 
       86 
     | 
    
         
            -
                  'Subject',
         
     | 
| 
       87 
     | 
    
         
            -
                  class:          Mutant::Subject,
         
     | 
| 
       88 
     | 
    
         
            -
                  node:           s(:true),
         
     | 
| 
       89 
     | 
    
         
            -
                  identification: 'subject_id',
         
     | 
| 
       90 
     | 
    
         
            -
                  mutations:      subject_mutations,
         
     | 
| 
       91 
     | 
    
         
            -
                  tests: [
         
     | 
| 
       92 
     | 
    
         
            -
                    double('Test', identification: 'test_id')
         
     | 
| 
       93 
     | 
    
         
            -
                  ]
         
     | 
| 
       94 
     | 
    
         
            -
                )
         
     | 
| 
       95 
     | 
    
         
            -
              end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
              let(:subject_mutations) { [mutation_a] }
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
              let(:test_results) do
         
     | 
| 
       100 
     | 
    
         
            -
                [
         
     | 
| 
       101 
     | 
    
         
            -
                  double(
         
     | 
| 
       102 
     | 
    
         
            -
                    'Test Result',
         
     | 
| 
       103 
     | 
    
         
            -
                    class: Mutant::Result::Test,
         
     | 
| 
       104 
     | 
    
         
            -
                    test: _subject.tests.first,
         
     | 
| 
       105 
     | 
    
         
            -
                    runtime: 1.0,
         
     | 
| 
       106 
     | 
    
         
            -
                    output: 'test-output',
         
     | 
| 
       107 
     | 
    
         
            -
                    success?: mutation_result_success
         
     | 
| 
       108 
     | 
    
         
            -
                  )
         
     | 
| 
       109 
     | 
    
         
            -
                ]
         
     | 
| 
       110 
     | 
    
         
            -
              end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
              let(:mutation_a_result) do
         
     | 
| 
       113 
     | 
    
         
            -
                double(
         
     | 
| 
       114 
     | 
    
         
            -
                  'Mutation Result',
         
     | 
| 
       115 
     | 
    
         
            -
                  class: Mutant::Result::Mutation,
         
     | 
| 
       116 
     | 
    
         
            -
                  mutation: mutation_a,
         
     | 
| 
       117 
     | 
    
         
            -
                  killtime: 0.5,
         
     | 
| 
       118 
     | 
    
         
            -
                  runtime:  1.0,
         
     | 
| 
       119 
     | 
    
         
            -
                  index:    0,
         
     | 
| 
       120 
     | 
    
         
            -
                  success?: mutation_result_success,
         
     | 
| 
       121 
     | 
    
         
            -
                  test_results: test_results,
         
     | 
| 
       122 
     | 
    
         
            -
                  failed_test_results: mutation_result_success ? [] : test_results
         
     | 
| 
       123 
     | 
    
         
            -
                )
         
     | 
| 
       124 
     | 
    
         
            -
              end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
              let(:subject_results) do
         
     | 
| 
       127 
     | 
    
         
            -
                [
         
     | 
| 
       128 
     | 
    
         
            -
                  Mutant::Result::Subject.new(
         
     | 
| 
       129 
     | 
    
         
            -
                    subject: _subject,
         
     | 
| 
       130 
     | 
    
         
            -
                    runtime: 1.0,
         
     | 
| 
       131 
     | 
    
         
            -
                    mutation_results: [mutation_a_result]
         
     | 
| 
       132 
     | 
    
         
            -
                  )
         
     | 
| 
       133 
     | 
    
         
            -
                ]
         
     | 
| 
       134 
     | 
    
         
            -
              end
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
              let(:subjects) { [_subject] }
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
36 
     | 
    
         
             
              describe '.build' do
         
     | 
| 
       139 
37 
     | 
    
         
             
                subject { described_class.build(output) }
         
     | 
| 
       140 
38 
     | 
    
         | 
| 
         @@ -210,47 +108,35 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       210 
108 
     | 
    
         
             
              end
         
     | 
| 
       211 
109 
     | 
    
         | 
| 
       212 
110 
     | 
    
         
             
              describe '#progress' do
         
     | 
| 
       213 
     | 
    
         
            -
                subject { object.progress( 
     | 
| 
       214 
     | 
    
         
            -
             
     | 
| 
       215 
     | 
    
         
            -
                let(:collector) do
         
     | 
| 
       216 
     | 
    
         
            -
                  Mutant::Runner::Collector.new(env)
         
     | 
| 
       217 
     | 
    
         
            -
                end
         
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
       219 
     | 
    
         
            -
                let(:mutation_result_success) { true }
         
     | 
| 
      
 111 
     | 
    
         
            +
                subject { object.progress(status) }
         
     | 
| 
       220 
112 
     | 
    
         | 
| 
       221 
113 
     | 
    
         
             
                context 'on progressive format' do
         
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
114 
     | 
    
         
             
                  let(:format) { progressive_format }
         
     | 
| 
       224 
115 
     | 
    
         | 
| 
       225 
     | 
    
         
            -
                  context 'with empty  
     | 
| 
      
 116 
     | 
    
         
            +
                  context 'with empty scheduler' do
         
     | 
| 
      
 117 
     | 
    
         
            +
                    update(:env_result) { { subject_results: [] } }
         
     | 
| 
       226 
118 
     | 
    
         | 
| 
       227 
119 
     | 
    
         
             
                    it_reports ''
         
     | 
| 
       228 
120 
     | 
    
         
             
                  end
         
     | 
| 
       229 
121 
     | 
    
         | 
| 
       230 
122 
     | 
    
         
             
                  context 'with last mutation present' do
         
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
       232 
     | 
    
         
            -
                    before do
         
     | 
| 
       233 
     | 
    
         
            -
                      collector.start(mutation_a)
         
     | 
| 
       234 
     | 
    
         
            -
                      collector.finish(mutation_a_result)
         
     | 
| 
       235 
     | 
    
         
            -
                    end
         
     | 
| 
      
 123 
     | 
    
         
            +
                    update(:env_result) { { subject_results: [subject_a_result] } }
         
     | 
| 
       236 
124 
     | 
    
         | 
| 
       237 
125 
     | 
    
         
             
                    context 'when mutation is successful' do
         
     | 
| 
       238 
     | 
    
         
            -
                      it_reports ' 
     | 
| 
      
 126 
     | 
    
         
            +
                      it_reports '..'
         
     | 
| 
       239 
127 
     | 
    
         
             
                    end
         
     | 
| 
       240 
128 
     | 
    
         | 
| 
       241 
129 
     | 
    
         
             
                    context 'when mutation is NOT successful' do
         
     | 
| 
       242 
     | 
    
         
            -
                       
     | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
                      it_reports 'F'
         
     | 
| 
      
 130 
     | 
    
         
            +
                      update(:mutation_a_test_result) { { passed: true } }
         
     | 
| 
      
 131 
     | 
    
         
            +
                      it_reports 'F.'
         
     | 
| 
       245 
132 
     | 
    
         
             
                    end
         
     | 
| 
       246 
133 
     | 
    
         
             
                  end
         
     | 
| 
       247 
134 
     | 
    
         
             
                end
         
     | 
| 
       248 
135 
     | 
    
         | 
| 
       249 
136 
     | 
    
         
             
                context 'on framed format' do
         
     | 
| 
      
 137 
     | 
    
         
            +
                  context 'with empty scheduler' do
         
     | 
| 
      
 138 
     | 
    
         
            +
                    update(:env_result) { { subject_results: [] } }
         
     | 
| 
       250 
139 
     | 
    
         | 
| 
       251 
     | 
    
         
            -
                  let(:mutation_result_success) { true }
         
     | 
| 
       252 
     | 
    
         
            -
             
     | 
| 
       253 
     | 
    
         
            -
                  context 'with empty collector' do
         
     | 
| 
       254 
140 
     | 
    
         
             
                    it_reports <<-REPORT
         
     | 
| 
       255 
141 
     | 
    
         
             
                      Mutant configuration:
         
     | 
| 
       256 
142 
     | 
    
         
             
                      Matcher:            #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
         
     | 
| 
         @@ -261,24 +147,21 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       261 
147 
     | 
    
         
             
                      Requires:           []
         
     | 
| 
       262 
148 
     | 
    
         
             
                      Available Subjects: 1
         
     | 
| 
       263 
149 
     | 
    
         
             
                      Subjects:           1
         
     | 
| 
       264 
     | 
    
         
            -
                      Mutations:           
     | 
| 
      
 150 
     | 
    
         
            +
                      Mutations:          2
         
     | 
| 
       265 
151 
     | 
    
         
             
                      Kills:              0
         
     | 
| 
       266 
152 
     | 
    
         
             
                      Alive:              0
         
     | 
| 
       267 
     | 
    
         
            -
                      Runtime:             
     | 
| 
      
 153 
     | 
    
         
            +
                      Runtime:            4.00s
         
     | 
| 
       268 
154 
     | 
    
         
             
                      Killtime:           0.00s
         
     | 
| 
       269 
     | 
    
         
            -
                      Overhead:            
     | 
| 
      
 155 
     | 
    
         
            +
                      Overhead:           Inf%
         
     | 
| 
       270 
156 
     | 
    
         
             
                      Coverage:           0.00%
         
     | 
| 
       271 
157 
     | 
    
         
             
                      Expected:           100.00%
         
     | 
| 
       272 
158 
     | 
    
         
             
                      Active subjects:    0
         
     | 
| 
       273 
159 
     | 
    
         
             
                    REPORT
         
     | 
| 
       274 
160 
     | 
    
         
             
                  end
         
     | 
| 
       275 
161 
     | 
    
         | 
| 
       276 
     | 
    
         
            -
                  context 'with  
     | 
| 
       277 
     | 
    
         
            -
                    before do
         
     | 
| 
       278 
     | 
    
         
            -
                      collector.start(mutation_a)
         
     | 
| 
       279 
     | 
    
         
            -
                    end
         
     | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
      
 162 
     | 
    
         
            +
                  context 'with scheduler active on one subject' do
         
     | 
| 
       281 
163 
     | 
    
         
             
                    context 'without progress' do
         
     | 
| 
      
 164 
     | 
    
         
            +
                      update(:status) { { active_jobs: [].to_set } }
         
     | 
| 
       282 
165 
     | 
    
         | 
| 
       283 
166 
     | 
    
         
             
                      it_reports(<<-REPORT)
         
     | 
| 
       284 
167 
     | 
    
         
             
                        Mutant configuration:
         
     | 
| 
         @@ -290,32 +173,23 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       290 
173 
     | 
    
         
             
                        Requires:           []
         
     | 
| 
       291 
174 
     | 
    
         
             
                        Available Subjects: 1
         
     | 
| 
       292 
175 
     | 
    
         
             
                        Subjects:           1
         
     | 
| 
       293 
     | 
    
         
            -
                        Mutations:           
     | 
| 
       294 
     | 
    
         
            -
                        Kills:               
     | 
| 
      
 176 
     | 
    
         
            +
                        Mutations:          2
         
     | 
| 
      
 177 
     | 
    
         
            +
                        Kills:              2
         
     | 
| 
       295 
178 
     | 
    
         
             
                        Alive:              0
         
     | 
| 
       296 
     | 
    
         
            -
                        Runtime:             
     | 
| 
       297 
     | 
    
         
            -
                        Killtime:            
     | 
| 
       298 
     | 
    
         
            -
                        Overhead:            
     | 
| 
       299 
     | 
    
         
            -
                        Coverage:            
     | 
| 
      
 179 
     | 
    
         
            +
                        Runtime:            4.00s
         
     | 
| 
      
 180 
     | 
    
         
            +
                        Killtime:           2.00s
         
     | 
| 
      
 181 
     | 
    
         
            +
                        Overhead:           100.00%
         
     | 
| 
      
 182 
     | 
    
         
            +
                        Coverage:           100.00%
         
     | 
| 
       300 
183 
     | 
    
         
             
                        Expected:           100.00%
         
     | 
| 
       301 
     | 
    
         
            -
                        Active subjects:     
     | 
| 
       302 
     | 
    
         
            -
                        subject_id mutations: 1
         
     | 
| 
       303 
     | 
    
         
            -
                        - test_id
         
     | 
| 
       304 
     | 
    
         
            -
                        (00/01)   0% - killtime: 0.00s runtime: 0.00s overhead: 0.00s
         
     | 
| 
      
 184 
     | 
    
         
            +
                        Active subjects:    0
         
     | 
| 
       305 
185 
     | 
    
         
             
                      REPORT
         
     | 
| 
       306 
186 
     | 
    
         
             
                    end
         
     | 
| 
       307 
187 
     | 
    
         | 
| 
       308 
188 
     | 
    
         
             
                    context 'with progress' do
         
     | 
| 
       309 
     | 
    
         
            -
             
     | 
| 
       310 
     | 
    
         
            -
                      let(:subject_mutations) { [mutation_a, mutation_b] }
         
     | 
| 
       311 
     | 
    
         
            -
             
     | 
| 
       312 
     | 
    
         
            -
                      before do
         
     | 
| 
       313 
     | 
    
         
            -
                        collector.start(mutation_b)
         
     | 
| 
       314 
     | 
    
         
            -
                        collector.finish(mutation_a_result)
         
     | 
| 
       315 
     | 
    
         
            -
                      end
         
     | 
| 
      
 189 
     | 
    
         
            +
                      update(:status) { { active_jobs: [job_a].to_set } }
         
     | 
| 
       316 
190 
     | 
    
         | 
| 
       317 
191 
     | 
    
         
             
                      context 'on failure' do
         
     | 
| 
       318 
     | 
    
         
            -
                         
     | 
| 
      
 192 
     | 
    
         
            +
                        update(:mutation_a_test_result) { { passed: true } }
         
     | 
| 
       319 
193 
     | 
    
         | 
| 
       320 
194 
     | 
    
         
             
                        it_reports(<<-REPORT)
         
     | 
| 
       321 
195 
     | 
    
         
             
                          Mutant configuration:
         
     | 
| 
         @@ -328,18 +202,20 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       328 
202 
     | 
    
         
             
                          Available Subjects: 1
         
     | 
| 
       329 
203 
     | 
    
         
             
                          Subjects:           1
         
     | 
| 
       330 
204 
     | 
    
         
             
                          Mutations:          2
         
     | 
| 
       331 
     | 
    
         
            -
                          Kills:               
     | 
| 
      
 205 
     | 
    
         
            +
                          Kills:              1
         
     | 
| 
       332 
206 
     | 
    
         
             
                          Alive:              1
         
     | 
| 
       333 
     | 
    
         
            -
                          Runtime:             
     | 
| 
       334 
     | 
    
         
            -
                          Killtime:            
     | 
| 
       335 
     | 
    
         
            -
                          Overhead:            
     | 
| 
       336 
     | 
    
         
            -
                          Coverage:            
     | 
| 
      
 207 
     | 
    
         
            +
                          Runtime:            4.00s
         
     | 
| 
      
 208 
     | 
    
         
            +
                          Killtime:           2.00s
         
     | 
| 
      
 209 
     | 
    
         
            +
                          Overhead:           100.00%
         
     | 
| 
      
 210 
     | 
    
         
            +
                          Coverage:           50.00%
         
     | 
| 
       337 
211 
     | 
    
         
             
                          Expected:           100.00%
         
     | 
| 
       338 
212 
     | 
    
         
             
                          Active subjects:    1
         
     | 
| 
       339 
     | 
    
         
            -
                           
     | 
| 
       340 
     | 
    
         
            -
                          -  
     | 
| 
       341 
     | 
    
         
            -
                          F
         
     | 
| 
       342 
     | 
    
         
            -
                          ( 
     | 
| 
      
 213 
     | 
    
         
            +
                          subject-a mutations: 2
         
     | 
| 
      
 214 
     | 
    
         
            +
                          - test-a
         
     | 
| 
      
 215 
     | 
    
         
            +
                          F.
         
     | 
| 
      
 216 
     | 
    
         
            +
                          (01/02)  50% - killtime: 2.00s runtime: 2.00s overhead: 0.00s
         
     | 
| 
      
 217 
     | 
    
         
            +
                          Active Jobs:
         
     | 
| 
      
 218 
     | 
    
         
            +
                          0: evil:subject-a:d27d2
         
     | 
| 
       343 
219 
     | 
    
         
             
                        REPORT
         
     | 
| 
       344 
220 
     | 
    
         
             
                      end
         
     | 
| 
       345 
221 
     | 
    
         | 
| 
         @@ -355,18 +231,20 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       355 
231 
     | 
    
         
             
                          Available Subjects: 1
         
     | 
| 
       356 
232 
     | 
    
         
             
                          Subjects:           1
         
     | 
| 
       357 
233 
     | 
    
         
             
                          Mutations:          2
         
     | 
| 
       358 
     | 
    
         
            -
                          Kills:               
     | 
| 
      
 234 
     | 
    
         
            +
                          Kills:              2
         
     | 
| 
       359 
235 
     | 
    
         
             
                          Alive:              0
         
     | 
| 
       360 
     | 
    
         
            -
                          Runtime:             
     | 
| 
       361 
     | 
    
         
            -
                          Killtime:            
     | 
| 
       362 
     | 
    
         
            -
                          Overhead:            
     | 
| 
      
 236 
     | 
    
         
            +
                          Runtime:            4.00s
         
     | 
| 
      
 237 
     | 
    
         
            +
                          Killtime:           2.00s
         
     | 
| 
      
 238 
     | 
    
         
            +
                          Overhead:           100.00%
         
     | 
| 
       363 
239 
     | 
    
         
             
                          Coverage:           100.00%
         
     | 
| 
       364 
240 
     | 
    
         
             
                          Expected:           100.00%
         
     | 
| 
       365 
241 
     | 
    
         
             
                          Active subjects:    1
         
     | 
| 
       366 
     | 
    
         
            -
                           
     | 
| 
       367 
     | 
    
         
            -
                          -  
     | 
| 
       368 
     | 
    
         
            -
                           
     | 
| 
       369 
     | 
    
         
            -
                          ( 
     | 
| 
      
 242 
     | 
    
         
            +
                          subject-a mutations: 2
         
     | 
| 
      
 243 
     | 
    
         
            +
                          - test-a
         
     | 
| 
      
 244 
     | 
    
         
            +
                          ..
         
     | 
| 
      
 245 
     | 
    
         
            +
                          (02/02) 100% - killtime: 2.00s runtime: 2.00s overhead: 0.00s
         
     | 
| 
      
 246 
     | 
    
         
            +
                          Active Jobs:
         
     | 
| 
      
 247 
     | 
    
         
            +
                          0: evil:subject-a:d27d2
         
     | 
| 
       370 
248 
     | 
    
         
             
                        REPORT
         
     | 
| 
       371 
249 
     | 
    
         
             
                      end
         
     | 
| 
       372 
250 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -374,11 +252,9 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       374 
252 
     | 
    
         
             
                end
         
     | 
| 
       375 
253 
     | 
    
         | 
| 
       376 
254 
     | 
    
         
             
                describe '#report' do
         
     | 
| 
       377 
     | 
    
         
            -
                  subject { object.report( 
     | 
| 
      
 255 
     | 
    
         
            +
                  subject { object.report(status.env_result) }
         
     | 
| 
       378 
256 
     | 
    
         | 
| 
       379 
257 
     | 
    
         
             
                  context 'with full coverage' do
         
     | 
| 
       380 
     | 
    
         
            -
                    let(:mutation_result_success) { true }
         
     | 
| 
       381 
     | 
    
         
            -
             
     | 
| 
       382 
258 
     | 
    
         
             
                    it_reports(<<-REPORT)
         
     | 
| 
       383 
259 
     | 
    
         
             
                      Mutant configuration:
         
     | 
| 
       384 
260 
     | 
    
         
             
                      Matcher:            #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
         
     | 
| 
         @@ -389,26 +265,26 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       389 
265 
     | 
    
         
             
                      Requires:           []
         
     | 
| 
       390 
266 
     | 
    
         
             
                      Available Subjects: 1
         
     | 
| 
       391 
267 
     | 
    
         
             
                      Subjects:           1
         
     | 
| 
       392 
     | 
    
         
            -
                      Mutations:           
     | 
| 
       393 
     | 
    
         
            -
                      Kills:               
     | 
| 
      
 268 
     | 
    
         
            +
                      Mutations:          2
         
     | 
| 
      
 269 
     | 
    
         
            +
                      Kills:              2
         
     | 
| 
       394 
270 
     | 
    
         
             
                      Alive:              0
         
     | 
| 
       395 
     | 
    
         
            -
                      Runtime:             
     | 
| 
       396 
     | 
    
         
            -
                      Killtime:            
     | 
| 
       397 
     | 
    
         
            -
                      Overhead:            
     | 
| 
      
 271 
     | 
    
         
            +
                      Runtime:            4.00s
         
     | 
| 
      
 272 
     | 
    
         
            +
                      Killtime:           2.00s
         
     | 
| 
      
 273 
     | 
    
         
            +
                      Overhead:           100.00%
         
     | 
| 
       398 
274 
     | 
    
         
             
                      Coverage:           100.00%
         
     | 
| 
       399 
275 
     | 
    
         
             
                      Expected:           100.00%
         
     | 
| 
       400 
276 
     | 
    
         
             
                    REPORT
         
     | 
| 
       401 
277 
     | 
    
         
             
                  end
         
     | 
| 
       402 
278 
     | 
    
         | 
| 
       403 
279 
     | 
    
         
             
                  context 'and partial coverage' do
         
     | 
| 
       404 
     | 
    
         
            -
                     
     | 
| 
      
 280 
     | 
    
         
            +
                    update(:mutation_a_test_result) { { passed: true } }
         
     | 
| 
       405 
281 
     | 
    
         | 
| 
       406 
282 
     | 
    
         
             
                    context 'on evil mutation' do
         
     | 
| 
       407 
283 
     | 
    
         
             
                      context 'with a diff' do
         
     | 
| 
       408 
284 
     | 
    
         
             
                        it_reports(<<-REPORT)
         
     | 
| 
       409 
     | 
    
         
            -
                           
     | 
| 
       410 
     | 
    
         
            -
                          -  
     | 
| 
       411 
     | 
    
         
            -
                           
     | 
| 
      
 285 
     | 
    
         
            +
                          subject-a
         
     | 
| 
      
 286 
     | 
    
         
            +
                          - test-a
         
     | 
| 
      
 287 
     | 
    
         
            +
                          evil:subject-a:d27d2
         
     | 
| 
       412 
288 
     | 
    
         
             
                          @@ -1,2 +1,2 @@
         
     | 
| 
       413 
289 
     | 
    
         
             
                          -true
         
     | 
| 
       414 
290 
     | 
    
         
             
                          +false
         
     | 
| 
         @@ -422,29 +298,29 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       422 
298 
     | 
    
         
             
                          Requires:           []
         
     | 
| 
       423 
299 
     | 
    
         
             
                          Available Subjects: 1
         
     | 
| 
       424 
300 
     | 
    
         
             
                          Subjects:           1
         
     | 
| 
       425 
     | 
    
         
            -
                          Mutations:           
     | 
| 
       426 
     | 
    
         
            -
                          Kills:               
     | 
| 
      
 301 
     | 
    
         
            +
                          Mutations:          2
         
     | 
| 
      
 302 
     | 
    
         
            +
                          Kills:              1
         
     | 
| 
       427 
303 
     | 
    
         
             
                          Alive:              1
         
     | 
| 
       428 
     | 
    
         
            -
                          Runtime:             
     | 
| 
       429 
     | 
    
         
            -
                          Killtime:            
     | 
| 
       430 
     | 
    
         
            -
                          Overhead:            
     | 
| 
       431 
     | 
    
         
            -
                          Coverage:            
     | 
| 
      
 304 
     | 
    
         
            +
                          Runtime:            4.00s
         
     | 
| 
      
 305 
     | 
    
         
            +
                          Killtime:           2.00s
         
     | 
| 
      
 306 
     | 
    
         
            +
                          Overhead:           100.00%
         
     | 
| 
      
 307 
     | 
    
         
            +
                          Coverage:           50.00%
         
     | 
| 
       432 
308 
     | 
    
         
             
                          Expected:           100.00%
         
     | 
| 
       433 
309 
     | 
    
         
             
                        REPORT
         
     | 
| 
       434 
310 
     | 
    
         
             
                      end
         
     | 
| 
       435 
311 
     | 
    
         | 
| 
       436 
312 
     | 
    
         
             
                      context 'without a diff' do
         
     | 
| 
       437 
     | 
    
         
            -
                        let(: 
     | 
| 
      
 313 
     | 
    
         
            +
                        let(:mutation_a_node) { s(:true) }
         
     | 
| 
       438 
314 
     | 
    
         | 
| 
       439 
315 
     | 
    
         
             
                        it_reports(<<-REPORT)
         
     | 
| 
       440 
     | 
    
         
            -
                           
     | 
| 
       441 
     | 
    
         
            -
                          -  
     | 
| 
       442 
     | 
    
         
            -
                           
     | 
| 
      
 316 
     | 
    
         
            +
                          subject-a
         
     | 
| 
      
 317 
     | 
    
         
            +
                          - test-a
         
     | 
| 
      
 318 
     | 
    
         
            +
                          evil:subject-a:d5318
         
     | 
| 
       443 
319 
     | 
    
         
             
                          Original source:
         
     | 
| 
       444 
320 
     | 
    
         
             
                          true
         
     | 
| 
       445 
321 
     | 
    
         
             
                          Mutated Source:
         
     | 
| 
       446 
322 
     | 
    
         
             
                          true
         
     | 
| 
       447 
     | 
    
         
            -
                          BUG: Mutation NOT resulted in exactly one diff. Please report a reproduction!
         
     | 
| 
      
 323 
     | 
    
         
            +
                          BUG: Mutation NOT resulted in exactly one diff hunk. Please report a reproduction!
         
     | 
| 
       448 
324 
     | 
    
         
             
                          -----------------------
         
     | 
| 
       449 
325 
     | 
    
         
             
                          Mutant configuration:
         
     | 
| 
       450 
326 
     | 
    
         
             
                          Matcher:            #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
         
     | 
| 
         @@ -455,26 +331,29 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       455 
331 
     | 
    
         
             
                          Requires:           []
         
     | 
| 
       456 
332 
     | 
    
         
             
                          Available Subjects: 1
         
     | 
| 
       457 
333 
     | 
    
         
             
                          Subjects:           1
         
     | 
| 
       458 
     | 
    
         
            -
                          Mutations:           
     | 
| 
       459 
     | 
    
         
            -
                          Kills:               
     | 
| 
      
 334 
     | 
    
         
            +
                          Mutations:          2
         
     | 
| 
      
 335 
     | 
    
         
            +
                          Kills:              1
         
     | 
| 
       460 
336 
     | 
    
         
             
                          Alive:              1
         
     | 
| 
       461 
     | 
    
         
            -
                          Runtime:             
     | 
| 
       462 
     | 
    
         
            -
                          Killtime:            
     | 
| 
       463 
     | 
    
         
            -
                          Overhead:            
     | 
| 
       464 
     | 
    
         
            -
                          Coverage:            
     | 
| 
      
 337 
     | 
    
         
            +
                          Runtime:            4.00s
         
     | 
| 
      
 338 
     | 
    
         
            +
                          Killtime:           2.00s
         
     | 
| 
      
 339 
     | 
    
         
            +
                          Overhead:           100.00%
         
     | 
| 
      
 340 
     | 
    
         
            +
                          Coverage:           50.00%
         
     | 
| 
       465 
341 
     | 
    
         
             
                          Expected:           100.00%
         
     | 
| 
       466 
342 
     | 
    
         
             
                        REPORT
         
     | 
| 
       467 
343 
     | 
    
         
             
                      end
         
     | 
| 
       468 
344 
     | 
    
         
             
                    end
         
     | 
| 
       469 
345 
     | 
    
         | 
| 
       470 
346 
     | 
    
         
             
                    context 'on neutral mutation' do
         
     | 
| 
       471 
     | 
    
         
            -
                       
     | 
| 
       472 
     | 
    
         
            -
             
     | 
| 
      
 347 
     | 
    
         
            +
                      update(:mutation_a_test_result) { { passed: false } }
         
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
                      let(:mutation_a) do
         
     | 
| 
      
 350 
     | 
    
         
            +
                        Mutant::Mutation::Neutral.new(subject_a, s(:true))
         
     | 
| 
      
 351 
     | 
    
         
            +
                      end
         
     | 
| 
       473 
352 
     | 
    
         | 
| 
       474 
353 
     | 
    
         
             
                      it_reports(<<-REPORT)
         
     | 
| 
       475 
     | 
    
         
            -
                         
     | 
| 
       476 
     | 
    
         
            -
                        -  
     | 
| 
       477 
     | 
    
         
            -
                         
     | 
| 
      
 354 
     | 
    
         
            +
                        subject-a
         
     | 
| 
      
 355 
     | 
    
         
            +
                        - test-a
         
     | 
| 
      
 356 
     | 
    
         
            +
                        neutral:subject-a:d5318
         
     | 
| 
       478 
357 
     | 
    
         
             
                        --- Neutral failure ---
         
     | 
| 
       479 
358 
     | 
    
         
             
                        Original code was inserted unmutated. And the test did NOT PASS.
         
     | 
| 
       480 
359 
     | 
    
         
             
                        Your tests do not pass initially or you found a bug in mutant / unparser.
         
     | 
| 
         @@ -482,10 +361,25 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       482 
361 
     | 
    
         
             
                        (true)
         
     | 
| 
       483 
362 
     | 
    
         
             
                        Unparsed Source:
         
     | 
| 
       484 
363 
     | 
    
         
             
                        true
         
     | 
| 
       485 
     | 
    
         
            -
                        Test  
     | 
| 
       486 
     | 
    
         
            -
                        -  
     | 
| 
      
 364 
     | 
    
         
            +
                        Test Result:
         
     | 
| 
      
 365 
     | 
    
         
            +
                        - 1 @ runtime: 1.0
         
     | 
| 
      
 366 
     | 
    
         
            +
                          - test-a
         
     | 
| 
       487 
367 
     | 
    
         
             
                        Test Output:
         
     | 
| 
       488 
     | 
    
         
            -
                        test 
     | 
| 
      
 368 
     | 
    
         
            +
                        mutation a test result output
         
     | 
| 
      
 369 
     | 
    
         
            +
                        -----------------------
         
     | 
| 
      
 370 
     | 
    
         
            +
                        neutral:subject-a:d5318
         
     | 
| 
      
 371 
     | 
    
         
            +
                        --- Neutral failure ---
         
     | 
| 
      
 372 
     | 
    
         
            +
                        Original code was inserted unmutated. And the test did NOT PASS.
         
     | 
| 
      
 373 
     | 
    
         
            +
                        Your tests do not pass initially or you found a bug in mutant / unparser.
         
     | 
| 
      
 374 
     | 
    
         
            +
                        Subject AST:
         
     | 
| 
      
 375 
     | 
    
         
            +
                        (true)
         
     | 
| 
      
 376 
     | 
    
         
            +
                        Unparsed Source:
         
     | 
| 
      
 377 
     | 
    
         
            +
                        true
         
     | 
| 
      
 378 
     | 
    
         
            +
                        Test Result:
         
     | 
| 
      
 379 
     | 
    
         
            +
                        - 1 @ runtime: 1.0
         
     | 
| 
      
 380 
     | 
    
         
            +
                          - test-a
         
     | 
| 
      
 381 
     | 
    
         
            +
                        Test Output:
         
     | 
| 
      
 382 
     | 
    
         
            +
                        mutation b test result output
         
     | 
| 
       489 
383 
     | 
    
         
             
                        -----------------------
         
     | 
| 
       490 
384 
     | 
    
         
             
                        Mutant configuration:
         
     | 
| 
       491 
385 
     | 
    
         
             
                        Matcher:            #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
         
     | 
| 
         @@ -496,31 +390,46 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       496 
390 
     | 
    
         
             
                        Requires:           []
         
     | 
| 
       497 
391 
     | 
    
         
             
                        Available Subjects: 1
         
     | 
| 
       498 
392 
     | 
    
         
             
                        Subjects:           1
         
     | 
| 
       499 
     | 
    
         
            -
                        Mutations:           
     | 
| 
      
 393 
     | 
    
         
            +
                        Mutations:          2
         
     | 
| 
       500 
394 
     | 
    
         
             
                        Kills:              0
         
     | 
| 
       501 
     | 
    
         
            -
                        Alive:               
     | 
| 
       502 
     | 
    
         
            -
                        Runtime:             
     | 
| 
       503 
     | 
    
         
            -
                        Killtime:            
     | 
| 
       504 
     | 
    
         
            -
                        Overhead:            
     | 
| 
      
 395 
     | 
    
         
            +
                        Alive:              2
         
     | 
| 
      
 396 
     | 
    
         
            +
                        Runtime:            4.00s
         
     | 
| 
      
 397 
     | 
    
         
            +
                        Killtime:           2.00s
         
     | 
| 
      
 398 
     | 
    
         
            +
                        Overhead:           100.00%
         
     | 
| 
       505 
399 
     | 
    
         
             
                        Coverage:           0.00%
         
     | 
| 
       506 
400 
     | 
    
         
             
                        Expected:           100.00%
         
     | 
| 
       507 
401 
     | 
    
         
             
                      REPORT
         
     | 
| 
       508 
402 
     | 
    
         
             
                    end
         
     | 
| 
       509 
403 
     | 
    
         | 
| 
       510 
404 
     | 
    
         
             
                    context 'on noop mutation' do
         
     | 
| 
       511 
     | 
    
         
            -
                       
     | 
| 
      
 405 
     | 
    
         
            +
                      update(:mutation_a_test_result) { { passed: false } }
         
     | 
| 
      
 406 
     | 
    
         
            +
             
     | 
| 
      
 407 
     | 
    
         
            +
                      let(:mutation_a) do
         
     | 
| 
      
 408 
     | 
    
         
            +
                        Mutant::Mutation::Noop.new(subject_a, s(:true))
         
     | 
| 
      
 409 
     | 
    
         
            +
                      end
         
     | 
| 
       512 
410 
     | 
    
         | 
| 
       513 
411 
     | 
    
         
             
                      it_reports(<<-REPORT)
         
     | 
| 
       514 
     | 
    
         
            -
                         
     | 
| 
       515 
     | 
    
         
            -
                        -  
     | 
| 
       516 
     | 
    
         
            -
                         
     | 
| 
      
 412 
     | 
    
         
            +
                        subject-a
         
     | 
| 
      
 413 
     | 
    
         
            +
                        - test-a
         
     | 
| 
      
 414 
     | 
    
         
            +
                        noop:subject-a:d5318
         
     | 
| 
       517 
415 
     | 
    
         
             
                        ---- Noop failure -----
         
     | 
| 
       518 
416 
     | 
    
         
             
                        No code was inserted. And the test did NOT PASS.
         
     | 
| 
       519 
417 
     | 
    
         
             
                        This is typically a problem of your specs not passing unmutated.
         
     | 
| 
       520 
     | 
    
         
            -
                        Test  
     | 
| 
       521 
     | 
    
         
            -
                        -  
     | 
| 
      
 418 
     | 
    
         
            +
                        Test Result:
         
     | 
| 
      
 419 
     | 
    
         
            +
                        - 1 @ runtime: 1.0
         
     | 
| 
      
 420 
     | 
    
         
            +
                          - test-a
         
     | 
| 
       522 
421 
     | 
    
         
             
                        Test Output:
         
     | 
| 
       523 
     | 
    
         
            -
                        test 
     | 
| 
      
 422 
     | 
    
         
            +
                        mutation a test result output
         
     | 
| 
      
 423 
     | 
    
         
            +
                        -----------------------
         
     | 
| 
      
 424 
     | 
    
         
            +
                        noop:subject-a:d5318
         
     | 
| 
      
 425 
     | 
    
         
            +
                        ---- Noop failure -----
         
     | 
| 
      
 426 
     | 
    
         
            +
                        No code was inserted. And the test did NOT PASS.
         
     | 
| 
      
 427 
     | 
    
         
            +
                        This is typically a problem of your specs not passing unmutated.
         
     | 
| 
      
 428 
     | 
    
         
            +
                        Test Result:
         
     | 
| 
      
 429 
     | 
    
         
            +
                        - 1 @ runtime: 1.0
         
     | 
| 
      
 430 
     | 
    
         
            +
                          - test-a
         
     | 
| 
      
 431 
     | 
    
         
            +
                        Test Output:
         
     | 
| 
      
 432 
     | 
    
         
            +
                        mutation b test result output
         
     | 
| 
       524 
433 
     | 
    
         
             
                        -----------------------
         
     | 
| 
       525 
434 
     | 
    
         
             
                        Mutant configuration:
         
     | 
| 
       526 
435 
     | 
    
         
             
                        Matcher:            #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
         
     | 
| 
         @@ -531,44 +440,17 @@ RSpec.describe Mutant::Reporter::CLI do 
     | 
|
| 
       531 
440 
     | 
    
         
             
                        Requires:           []
         
     | 
| 
       532 
441 
     | 
    
         
             
                        Available Subjects: 1
         
     | 
| 
       533 
442 
     | 
    
         
             
                        Subjects:           1
         
     | 
| 
       534 
     | 
    
         
            -
                        Mutations:           
     | 
| 
      
 443 
     | 
    
         
            +
                        Mutations:          2
         
     | 
| 
       535 
444 
     | 
    
         
             
                        Kills:              0
         
     | 
| 
       536 
     | 
    
         
            -
                        Alive:               
     | 
| 
       537 
     | 
    
         
            -
                        Runtime:             
     | 
| 
       538 
     | 
    
         
            -
                        Killtime:            
     | 
| 
       539 
     | 
    
         
            -
                        Overhead:            
     | 
| 
      
 445 
     | 
    
         
            +
                        Alive:              2
         
     | 
| 
      
 446 
     | 
    
         
            +
                        Runtime:            4.00s
         
     | 
| 
      
 447 
     | 
    
         
            +
                        Killtime:           2.00s
         
     | 
| 
      
 448 
     | 
    
         
            +
                        Overhead:           100.00%
         
     | 
| 
       540 
449 
     | 
    
         
             
                        Coverage:           0.00%
         
     | 
| 
       541 
450 
     | 
    
         
             
                        Expected:           100.00%
         
     | 
| 
       542 
451 
     | 
    
         
             
                      REPORT
         
     | 
| 
       543 
452 
     | 
    
         
             
                    end
         
     | 
| 
       544 
453 
     | 
    
         
             
                  end
         
     | 
| 
       545 
     | 
    
         
            -
             
     | 
| 
       546 
     | 
    
         
            -
                  context 'without subjects' do
         
     | 
| 
       547 
     | 
    
         
            -
                    let(:subjects)        { [] }
         
     | 
| 
       548 
     | 
    
         
            -
                    let(:subject_results) { [] }
         
     | 
| 
       549 
     | 
    
         
            -
             
     | 
| 
       550 
     | 
    
         
            -
                    let(:config) { Mutant::Config::DEFAULT.update(jobs: 1, includes: %w[include-dir], requires: %w[require-name]) }
         
     | 
| 
       551 
     | 
    
         
            -
             
     | 
| 
       552 
     | 
    
         
            -
                    it_reports(<<-REPORT)
         
     | 
| 
       553 
     | 
    
         
            -
                      Mutant configuration:
         
     | 
| 
       554 
     | 
    
         
            -
                      Matcher:            #<Mutant::Matcher::Config match_expressions=[] subject_ignores=[] subject_selects=[]>
         
     | 
| 
       555 
     | 
    
         
            -
                      Integration:        null
         
     | 
| 
       556 
     | 
    
         
            -
                      Expect Coverage:    100.00%
         
     | 
| 
       557 
     | 
    
         
            -
                      Jobs:               1
         
     | 
| 
       558 
     | 
    
         
            -
                      Includes:           ["include-dir"]
         
     | 
| 
       559 
     | 
    
         
            -
                      Requires:           ["require-name"]
         
     | 
| 
       560 
     | 
    
         
            -
                      Available Subjects: 0
         
     | 
| 
       561 
     | 
    
         
            -
                      Subjects:           0
         
     | 
| 
       562 
     | 
    
         
            -
                      Mutations:          0
         
     | 
| 
       563 
     | 
    
         
            -
                      Kills:              0
         
     | 
| 
       564 
     | 
    
         
            -
                      Alive:              0
         
     | 
| 
       565 
     | 
    
         
            -
                      Runtime:            1.10s
         
     | 
| 
       566 
     | 
    
         
            -
                      Killtime:           0.00s
         
     | 
| 
       567 
     | 
    
         
            -
                      Overhead:           Inf%
         
     | 
| 
       568 
     | 
    
         
            -
                      Coverage:           0.00%
         
     | 
| 
       569 
     | 
    
         
            -
                      Expected:           100.00%
         
     | 
| 
       570 
     | 
    
         
            -
                    REPORT
         
     | 
| 
       571 
     | 
    
         
            -
                  end
         
     | 
| 
       572 
454 
     | 
    
         
             
                end
         
     | 
| 
       573 
455 
     | 
    
         
             
              end
         
     | 
| 
       574 
456 
     | 
    
         
             
            end
         
     |