From: Simon Strandgaard Date: 2004-02-09T09:04:17+09:00 Subject: Re: code that has been reached On Wed, 04 Feb 2004 00:46:20 +0900, nobu.nokad wrote: > At Wed, 4 Feb 2004 00:30:04 +0900, > Simon Strandgaard wrote: >> If I do "cat report.txt" then my terminal just scrolls for 10 seconds, >> which is much larger than what my terminal history can remember. >> If I pipe it into "less" then the coloring disappears. How do you view >> ANSI files? > > less -r Thanks.. I have done some improvements to the original 'coverage.rb', so that HTML is now generated. For an example have a look at: http://neoneye.dk/parser.rb.coverage.html As you may notice comments/arrays appears as if they are not executed! How can I fix this? -- Simon Strandgaard module PrettyCoverage class HTML def initialize @files = {} end def execute puts "execute" @files.each{|file, line_marked| create_file(file, line_marked) } create_file_index end def mk_filename(name) name+".coverage.html" end def create_file_index output_filename = "index.html" rows = [] @files.each{|file, line_marked| filename = mk_filename(file) rows << "#{file}" } result = rows.join("\n") body = "#{result}
" title = "coverage" css = <#{title} #{body} EOHTML File.open(output_filename, "w+") do |f| f.puts html end end def add_file(file, line_marked) percent = calc_coverage(line_marked) printf("file=#{file} coverage=%02.1f%\n", percent) @files[file] = line_marked end def calc_coverage(line_marked) marked = line_marked.transpose[1] n = marked.inject(0) {|r, i| (i) ? (r+1) : r } percent = n.to_f * 100 / marked.size end def format_overview(file, line_marked) percent = "%02.1f" % calc_coverage(line_marked) html = <
filename#{file}
coverage#{percent}
EOHTML html end def format_lines(line_marked) result = "" last = nil end_of_div = "" format_line = "%#{line_marked.size.to_s.size}d" line_no = 1 line_marked.each {|(line, marked)| if marked != last result += end_of_div case marked when true result += "
" end_of_div = "
" when false end_of_div = "" end end result += (format_line % line_no) + " " + line + "\n" last = marked line_no += 1 } result += end_of_div "
#{result}
" end def create_file(file, line_marked) output_filename = mk_filename(file) puts "outputting #{output_filename.inspect}" body = format_overview(file, line_marked) + format_lines(line_marked) title = file + " - coverage" css = <#{title} #{body} EOHTML File.open(output_filename, "w+") do |f| f.puts html end end end end SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__ module COVERAGE__ COVER = {} def self.trace_func(event, file, line, id, binding, klass) case event when 'c-call', 'c-return', 'class' return end COVER[file] ||= [] COVER[file][line] ||= 0 COVER[file][line] += 1 end END { set_trace_func(nil) printer = PrettyCoverage::HTML.new COVER.each do |file, lines| next if SCRIPT_LINES__.has_key?(file) == false lines = SCRIPT_LINES__[file] covers = COVER[file] line_status = [] 0.upto(lines.size - 1) do |c| line = lines[c].chomp marked = false if covers[c + 1] marked = true elsif /^\s*(?:begin\s*(?:#.*)?|ensure\s*(?:#.*)?|else\s*(?:#.*)?)$/ =~ line and covers[c + 1 + 1] covers[c + 1] = covers[c + 1 + 1] marked = true elsif /^\s*(?:end|})\s*$/ =~ line && covers[c + 1 - 1] covers[c + 1] = covers[c + 1 - 1] marked = true end line_status << [line, marked] end printer.add_file(file, line_status) end printer.execute } set_trace_func(COVERAGE__.method(:trace_func).to_proc) end