free_mutant/spec/shared/mutator_behavior.rb

42 lines
1 KiB
Ruby
Raw Normal View History

2012-08-01 08:58:24 -04:00
shared_examples_for 'a mutator' do
subject { object.each(node) { |item| yields << item } }
let(:yields) { [] }
let(:object) { described_class }
let(:node) { source.to_ast }
it_should_behave_like 'a command method'
context 'with no block' do
subject { object.each(node) }
it { should be_instance_of(to_enum.class) }
let(:expected_mutations) do
mutations.map do |mutation|
if mutation.respond_to?(:to_ast)
mutation.to_ast.to_sexp
else
mutation
end
end.to_set
end
it 'generates the expected mutations' do
subject = self.subject.map(&:to_sexp).to_set
unless subject == expected_mutations
message = "Missing mutations: %s\nUnexpected mutations: %s" %
[expected_mutations - subject, subject - expected_mutations ].map(&:to_a).map(&:inspect)
fail message
end
end
end
end
2012-08-01 08:58:24 -04:00
shared_examples_for 'a noop mutator' do
let(:mutations) { [] }
2012-08-01 08:58:24 -04:00
it_should_behave_like 'a mutator'
end