require 'autotest' Autotest.add_hook :initialize do |at| at.clear_mappings at.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m at.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m at.add_mapping(%r%^examples/.*_example.rb$%) { |filename, _| filename } at.add_mapping(%r%^lib/(.*)\.rb$%) { |filename, m| ["examples/lib/#{m[1]}_example.rb"] } at.add_mapping(%r%^examples/(example_helper|shared/.*)\.rb$%) { at.files_matching %r%^examples/.*_example\.rb$% } end class MicronautCommandError < StandardError; end class Autotest::Micronaut < Autotest #remove_method :consolidate_failures, :make_test_cmd #remove_method :make_test_cmd def consolidate_failures(failed) filters = new_hash_of_arrays failed.each do |spec, trace| if trace =~ /\n(\.\/)?(.*example\.rb):[\d]+:\Z?/ filters[$2] << spec end end return filters end def make_test_cmd(files_to_test) return '' if files_to_test.size == 0 "bin/micronaut #{files_to_test.keys.sort.join(' ')}" end end