free_mutant/spec/unit/mutant/mutator/emit_new_spec.rb
Markus Schirp 459d028de1 Add a working mutation tester for mutant
* Expand attr_reader :name, to def name; @name; end
  As attr_reader defined methods do not have a valid source location.
* Expose more internal state to allow the generation of nice match
  identifications. Needs to be cleaned up.
2012-08-20 17:53:41 +02:00

51 lines
1.1 KiB
Ruby

require 'spec_helper'
describe Mutant::Mutator, '#emit_new' do
subject { object.send(:emit_new) { node } }
class Block
def arguments; @arguments; end
def called?
defined?(@arguments)
end
def call(*arguments)
@arguments = arguments
end
end
let(:object) { class_under_test.new(wrapped_node, block) }
let(:block) { Block.new }
let(:wrapped_node) { '"foo"'.to_ast }
let(:class_under_test) do
Class.new(described_class) do
def dispatch
#noop
end
end
end
context 'when new AST is generated' do
let(:node) { '"bar"'.to_ast }
it 'should call block' do
subject
block.should be_called
end
it 'should call block with node' do
subject
block.arguments.should eql([node])
end
end
context 'when new AST could not be generated' do
let(:node) { '"foo"'.to_ast }
it 'should raise error' do
expect { subject }.to raise_error(RuntimeError, 'New AST could not be generated after 3 attempts')
end
end
end