44 lines
1.1 KiB
Ruby
44 lines
1.1 KiB
Ruby
shared_examples_for 'a mutator' do
|
|
subject { object.each(node) { |item| yields << item } }
|
|
|
|
let(:yields) { [] }
|
|
let(:object) { described_class }
|
|
|
|
unless instance_methods.map(&:to_s).include?('node')
|
|
let(:node) { source.to_ast }
|
|
end
|
|
|
|
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
|
|
|
|
shared_examples_for 'a noop mutator' do
|
|
let(:mutations) { [] }
|
|
|
|
it_should_behave_like 'a mutator'
|
|
end
|