class TestDiff::CoverageRunner
runs each spec and saves it to storage
Public Class Methods
new(batch_queue, pre_load, continue)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 11 def initialize(batch_queue, pre_load, continue) @pre_load = pre_load @batch_queue = batch_queue @storage = Storage.new @continue = continue @execution_times = ExecutionTimes.new @execution_times.clear end
run(batch_queue, pre_load, continue)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 7 def self.run(batch_queue, pre_load, continue) new(batch_queue, pre_load, continue).run end
Public Instance Methods
run()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 20 def run require 'coverage.so' ENV['TEST_DIFF_COVERAGE'] = 'yes' require_boot require_rspec require_pre_load pre_run_checks run_batch end
Private Instance Methods
pre_run_checks()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 58 def pre_run_checks raise 'please disable simplecov while using test_diff. Check README.md for examples' if defined?(SimpleCov) end
require_boot()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 34 def require_boot if File.exist?('config/boot.rb') puts 'Loading config/boot.rb' require File.expand_path('config/boot.rb') elsif File.exist?('Gemfile') puts 'Bundler setup' ENV['BUNDLE_GEMFILE'] ||= File.expand_path('Gemfile') require 'bundler/setup' end end
require_pre_load()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 45 def require_pre_load return unless @pre_load ::Coverage.start puts "pre_loading #{@pre_load}" $LOAD_PATH << "#{Dir.getwd}/spec" require File.expand_path(@pre_load) end
require_rspec()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 53 def require_rspec puts 'Loading rspec/core' require 'rspec/core' end
run_batch()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 62 def run_batch TimingTracker.run(@batch_queue) { start } puts 'Test done, compacting db' @storage.compact if @storage.respond_to?(:compact) end
run_test(main_spec_file)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 86 def run_test(main_spec_file) s = Time.now result = run_tests(main_spec_file) if result save_execution_time(main_spec_file, Time.now - s) save_coverage_data(main_spec_file) else $stderr.puts(@last_output.string) Coverage.result # disable coverage exit!(false) unless @continue end end
run_tests(main_spec_file)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 99 def run_tests(main_spec_file) @last_output = StringIO.new ::RSpec::Core::Runner.run([main_spec_file], @last_output, @last_output).zero? end
save_coverage_data(main_spec_file)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 104 def save_coverage_data(main_spec_file) @storage.set(main_spec_file, CoverageData.get) @storage.flush if @storage.respond_to?(:flush) end
save_execution_time(main_spec_file, execution_time)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 109 def save_execution_time(main_spec_file, execution_time) @execution_times.add(main_spec_file, execution_time) end
start()
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 68 def start until @batch_queue.empty? pid = start_process_fork(@batch_queue.pop(true)) _pid, status = Process.waitpid2(pid) raise 'Test Failed' unless status.success? end end
start_process_fork(main_spec_file)
click to toggle source
# File lib/test_diff/coverage_runner.rb, line 76 def start_process_fork(main_spec_file) Process.fork do puts "running #{main_spec_file}" ActiveRecord::Base.connection.reconnect! if defined?(ActiveRecord::Base) Time.zone_default = (Time.zone = 'UTC') if Time.respond_to?(:zone_default) && Time.zone_default.nil? ::Coverage.start run_test(main_spec_file) end end