def initialize(opts = { })
opts.stringify_keys!
config_file = opts.delete('config') { nil }
if config_file
begin
config_erb = ERB.new(IO.read(config_file)).result(binding)
rescue Exception => e
raise(YmlLoadError,"config file was found, but could not be parsed with ERB.\n#{$!.inspect}")
end
begin
config_yml = YAML::load(config_erb)
rescue StandardError => e
raise(YmlLoadError,"config file was found, but could not be parsed.\n#{$!.inspect}")
end
opts.merge!(config_yml.stringify_keys!)
end
@files = Array(opts.fetch('files') { nil })
raise "No files, nothing to do" if @files.empty?
@incomplete_files = @files.dup
@failed_files = []
@workers = []
@listeners = []
@event_listeners = Array(opts.fetch('listeners') { nil } )
@event_listeners.select{|l| l.is_a? String}.each do |l|
@event_listeners.delete_at(@event_listeners.index(l))
listener = eval(l)
@event_listeners << listener if listener.is_a?(Hydra::Listener::Abstract)
end
@string_runner_event_listeners = Array( opts.fetch( 'runner_listeners' ) { nil } )
@runner_log_file = opts.fetch('runner_log_file') { nil }
@verbose = opts.fetch('verbose') { false }
@autosort = opts.fetch('autosort') { true }
@sync = opts.fetch('sync') { nil }
@environment = opts.fetch('environment') { 'test' }
@options = opts.fetch('options') { '' }
if @autosort
sort_files_from_report
@event_listeners << Hydra::Listener::ReportGenerator.new(File.new(heuristic_file, 'w'))
end
worker_cfg = opts.fetch('workers') { [ { 'type' => 'local', 'runners' => 1} ] }
trace "Initialized"
trace " Files: (#{@files.inspect})"
trace " Workers: (#{worker_cfg.inspect})"
trace " Verbose: (#{@verbose.inspect})"
@event_listeners.each{|l| l.testing_begin(@files) }
boot_workers worker_cfg
process_messages
end