free_mutant/spec/unit/mutant/result/class_methods_spec.rb
2018-09-12 13:15:43 +00:00

51 lines
1.1 KiB
Ruby

# frozen_string_literal: true
# The effect of this private module is done at boot time.
# Hence there is no way to kill the mutations at runtime
# so we have to directly hook into the private moduel via
# reflection to redo a runtime observable interaction with
# it.
#
# Until mutant gets boot time mutation support there is no
# way to to avoid this.
RSpec.describe 'Mutant::Result::ClassMethods' do
let(:infected_class) do
Class.new do
include Adamantium::Flat, Concord::Public.new(:collection)
extend Mutant::Result.const_get(:ClassMethods)
sum :length, :collection
end
end
describe '#sum' do
let(:object) { infected_class.new(collection) }
def apply
object.length
end
subject { apply }
before do
# memoization behavior
expect(collection).to receive(:map)
.once
.and_call_original
apply
end
context 'empty collection' do
let(:collection) { [] }
it { should be(0) }
end
context 'non-emtpy collection' do
let(:collection) { [[1], [2, 3]] }
it { should be(3) }
end
end
end