def validate
left = mutations_left
if left == 0 then
@reporter.no_mutations(method_name)
return
end
@reporter.method_loaded(klass_name, method_name, left)
until left == 0 do
@reporter.remaining_mutations left
reset_tree
begin
process current_tree
timeout(@@timeout, Heckle::Timeout) { run_tests }
rescue SyntaxError => e
@reporter.warning "Mutation caused a syntax error:\n\n#{e.message}}"
rescue Heckle::Timeout
@reporter.warning "Your tests timed out. Heckle may have caused an infinite loop."
rescue Interrupt
@reporter.warning 'Mutation canceled, hit ^C again to exit'
sleep 2
end
left = mutations_left
end
reset
unless @failures.empty?
@reporter.no_failures
@failures.each do |failure|
original = Ruby2Ruby.new.process(@original_tree.deep_clone)
@reporter.failure(original, failure)
end
false
else
@reporter.no_surviving_mutants
true
end
end