free_mutant/spec/unit/mutant/runner_spec.rb

74 lines
2.4 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
RSpec.describe Mutant::Runner do
2014-10-23 07:37:53 -04:00
describe '.call' do
let(:reporter) { instance_double(Mutant::Reporter, delay: delay) }
let(:driver) { instance_double(Mutant::Parallel::Driver) }
let(:delay) { instance_double(Float) }
let(:env_result) { instance_double(Mutant::Result::Env) }
let(:actor_env) { instance_double(Mutant::Actor::Env) }
2016-01-24 16:16:43 -05:00
let(:kernel) { class_double(Kernel) }
2015-11-21 17:02:51 -05:00
let(:sleep) { instance_double(Method) }
let(:env) do
instance_double(
Mutant::Env,
actor_env: actor_env,
config: config,
mutations: []
)
end
2014-12-08 19:10:31 -05:00
let(:config) do
instance_double(
Mutant::Config,
2016-09-25 19:49:38 -04:00
jobs: 1,
kernel: kernel,
reporter: reporter
2014-12-08 19:10:31 -05:00
)
end
2014-12-08 19:10:31 -05:00
before do
allow(env).to receive(:method).with(:kill).and_return(parallel_config.processor)
2015-11-21 17:02:51 -05:00
allow(kernel).to receive(:method).with(:sleep).and_return(sleep)
2014-12-08 19:10:31 -05:00
end
2014-12-08 19:10:31 -05:00
let(:parallel_config) do
Mutant::Parallel::Config.new(
env: actor_env,
jobs: 1,
processor: ->(_object) { fail },
sink: Mutant::Runner::Sink.new(env),
source: Mutant::Parallel::Source::Array.new(env.mutations)
2014-12-08 19:10:31 -05:00
)
end
2014-12-08 19:10:31 -05:00
before do
expect(reporter).to receive(:start).with(env).ordered
expect(Mutant::Parallel).to receive(:async).with(parallel_config).and_return(driver).ordered
end
2014-12-08 19:10:31 -05:00
subject { described_class.call(env) }
2014-12-08 19:10:31 -05:00
context 'when report iterations are done' do
let(:status_a) { instance_double(Mutant::Parallel::Status, done: false) }
let(:status_b) { instance_double(Mutant::Parallel::Status, done: true, payload: env_result) }
2014-10-23 07:37:53 -04:00
before do
2014-12-08 19:10:31 -05:00
expect(driver).to receive(:status).and_return(status_a).ordered
expect(reporter).to receive(:progress).with(status_a).ordered
2015-11-21 17:02:51 -05:00
expect(sleep).to receive(:call).with(reporter.delay).ordered
2014-12-08 19:10:31 -05:00
expect(driver).to receive(:status).and_return(status_b).ordered
expect(reporter).to receive(:progress).with(status_b).ordered
expect(driver).to receive(:stop).ordered
2014-12-08 19:10:31 -05:00
expect(reporter).to receive(:report).with(env_result).ordered
end
2014-10-23 07:37:53 -04:00
it 'returns env result' do
2014-12-08 19:10:31 -05:00
should be(env_result)
2014-10-23 07:37:53 -04:00
end
end
end
end