free_mutant/spec/unit/mutant/result/subject_spec.rb
2015-12-21 00:28:27 +00:00

109 lines
2.3 KiB
Ruby

RSpec.describe Mutant::Result::Subject do
let(:object) do
described_class.new(
subject: mutation_subject,
mutation_results: mutation_results,
tests: []
)
end
let(:mutation_subject) do
instance_double(
Mutant::Subject,
mutations: mutation_results.map { instance_double(Mutant::Mutation) }
)
end
shared_context 'full coverage' do
let(:mutation_results) do
[
instance_double(Mutant::Result::Mutation, success?: true)
]
end
end
shared_context 'partial coverage' do
let(:mutation_results) do
[
instance_double(Mutant::Result::Mutation, success?: false),
instance_double(Mutant::Result::Mutation, success?: true)
]
end
end
shared_context 'no coverage' do
let(:mutation_results) do
[
instance_double(Mutant::Result::Mutation, success?: false)
]
end
end
shared_context 'no results' do
let(:mutation_results) { [] }
end
describe '#coverage' do
subject { object.coverage }
{
'full coverage' => 1r,
'partial coverage' => 0.5r,
'no coverage' => 0r,
'no results' => 1r
}.each do |name, expected|
context(name) do
include_context(name)
it { should eql(expected) }
end
end
end
describe '#amount_mutations' do
subject { object.amount_mutations }
{
'full coverage' => 1,
'partial coverage' => 2,
'no coverage' => 1,
'no results' => 0
}.each do |name, expected|
context(name) do
include_context(name)
it { should be(expected) }
end
end
end
describe '#amount_mutations_alive' do
subject { object.amount_mutations_alive }
{
'full coverage' => 0,
'partial coverage' => 1,
'no coverage' => 1,
'no results' => 0
}.each do |name, expected|
context(name) do
include_context(name)
it { should be(expected) }
end
end
end
describe '#success?' do
subject { object.success? }
{
'full coverage' => true,
'partial coverage' => false,
'no coverage' => false,
'no results' => true
}.each do |name, expected|
context(name) do
include_context(name)
it { should be(expected) }
end
end
end
end