jam-cloud/web/.simplecov

57 lines
1.7 KiB
Plaintext
Raw Normal View History

if ENV['COVERAGE'] == "1"
require 'simplecov-rcov'
class SimpleCov::Formatter::MergedFormatter
def format(result)
SimpleCov::Formatter::HTMLFormatter.new.format(result)
SimpleCov::Formatter::RcovFormatter.new.format(result)
end
end
SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
SimpleCov.start :rails do
# remove the :root_filter so that we can see coverage of external dependencies (i.e., jam_ruby)
filters.clear
# ignore Ruby itself (...not to be confused with jam_ruby)
add_filter "/lib/ruby/"
# ignore Rails subfolders which don't contain app code
%w{config coverage db doc features log script spec test tmp}.each do |dir|
add_filter "#{dir}/"
end
# ignore all gem code except our jam gems
add_filter {|src| src.filename =~ /ruby.*\/gems\// unless src.filename =~ /\/gems\/jam/ }
# categorize JamRuby in the coverage report:
add_group 'Jam Ruby', 'jam_ruby'
end
all_files = Dir['**/*.rb']
base_result = {}
all_files.each do |file|
absolute = File::expand_path(file)
lines = File.readlines(absolute, :encoding => 'UTF-8')
base_result[absolute] = lines.map do |l|
l.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
l.encode!('UTF-8', 'UTF-16')
l.strip!
l.empty? || l =~ /^end$/ || l[0] == '#' ? nil : 0
end
end
SimpleCov.at_exit do
coverage_result = Coverage.result
covered_files = coverage_result.keys
covered_files.each do |covered_file|
base_result.delete(covered_file)
end
merged = SimpleCov::Result.new(coverage_result).original_result.merge_resultset(base_result)
result = SimpleCov::Result.new(merged)
result.format!
end
end