rcov 0.8.0.2 → 0.8.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/BLURB +1 -3
- data/CHANGES +17 -0
- data/Rakefile +1 -1
- data/THANKS +23 -1
- data/bin/rcov +33 -4
- data/lib/rcov.rb +12 -0
- data/lib/rcov/report.rb +52 -11
- data/lib/rcov/version.rb +3 -3
- data/test/test_functional.rb +3 -3
- metadata +16 -16
data/BLURB
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
|
2
2
|
Source code, additional information, screenshots... available at
|
3
|
-
http://eigenclass.org/hiki
|
4
|
-
Release information:
|
5
|
-
http://eigenclass.org/hiki.rb?rcov-0.8.0
|
3
|
+
http://eigenclass.org/hiki/rcov
|
6
4
|
|
7
5
|
If you're on win32, you can also find a pre-built rcovrt.so (which makes
|
8
6
|
code coverage analysis >100 times faster) in the above-mentioned pages.
|
data/CHANGES
CHANGED
@@ -1,6 +1,23 @@
|
|
1
1
|
|
2
2
|
User-visible changes.
|
3
3
|
|
4
|
+
Since 0.8.0 (2007-02-28)
|
5
|
+
========================
|
6
|
+
Features
|
7
|
+
--------
|
8
|
+
* you can use an existent data file to generate coverage reports without
|
9
|
+
having to execute your code again
|
10
|
+
* --spec-only: only consider cover code executed inside a spec
|
11
|
+
(tested with RSpec 1.0.5, 1.0.8)
|
12
|
+
* --charset can be used to specify the charset in the Content-Type declaration
|
13
|
+
|
14
|
+
Bugfixes
|
15
|
+
--------
|
16
|
+
* workaround for bugs in Safari, IE (self-closing anchors break colorization)
|
17
|
+
* workaround for bugs in REXML shipped with 1.8.6-p110
|
18
|
+
* rethrow exceptions generated by traced scripts
|
19
|
+
* compatibility with Ruby < 1.8.5
|
20
|
+
|
4
21
|
Since 0.7.0 (2006-08-04)
|
5
22
|
========================
|
6
23
|
Features
|
data/Rakefile
CHANGED
data/THANKS
CHANGED
@@ -63,6 +63,28 @@ rubikitch:
|
|
63
63
|
* testing, refactoring...
|
64
64
|
* many other things, see darcs changes
|
65
65
|
|
66
|
-
|
67
66
|
Zed A. Shaw:
|
68
67
|
* reported and fixed segfault triggered by rspec
|
68
|
+
|
69
|
+
Lee Marlow:
|
70
|
+
* patch allowing to run rcov against a data file with no input code
|
71
|
+
|
72
|
+
Kurt Stephens:
|
73
|
+
* patch to rethrow any exceptions generated by the traced scripts after
|
74
|
+
report generation; notably SystemExit, allowing to use the exit code from
|
75
|
+
test runners under rake.
|
76
|
+
|
77
|
+
Brian Candler:
|
78
|
+
* found compatibility issues with the REXML lib included in ruby-1.8.6-p110
|
79
|
+
and provided a workaround
|
80
|
+
|
81
|
+
Mat Schaffer:
|
82
|
+
* reported missing line colorization on Safari and probably other browsers,
|
83
|
+
owing to self-closing <a> not being handled properly despite being valid
|
84
|
+
XHTML 1.0.
|
85
|
+
|
86
|
+
Sam Granieri:
|
87
|
+
* tested workaround for REXML bug
|
88
|
+
|
89
|
+
Kosmas Schütz, Daniel Berger, François Beausoleil, Bil Kleb:
|
90
|
+
* provided information about the ruby-1.8.6-p11[01] REXML problems
|
data/bin/rcov
CHANGED
@@ -45,6 +45,7 @@ options.include = []
|
|
45
45
|
options.html = true
|
46
46
|
options.comments_run_by_default = false
|
47
47
|
options.test_unit_only = false
|
48
|
+
options.spec_only = false
|
48
49
|
options.sort = :name
|
49
50
|
options.sort_reverse = false
|
50
51
|
options.output_threshold = 101
|
@@ -59,6 +60,7 @@ options.report_cov_bug_for = nil
|
|
59
60
|
options.aggregate_file = nil
|
60
61
|
options.gcc_output = false
|
61
62
|
options.show_validator_links = true
|
63
|
+
options.charset = nil
|
62
64
|
|
63
65
|
EXTRA_HELP = <<-EOF
|
64
66
|
|
@@ -99,9 +101,13 @@ EOF
|
|
99
101
|
options.comments_run_by_default = comments_run_p
|
100
102
|
end
|
101
103
|
opts.on("--test-unit-only",
|
102
|
-
"Only trace code executed
|
104
|
+
"Only trace code executed inside TestCases.") do
|
103
105
|
options.test_unit_only = true
|
104
106
|
end
|
107
|
+
opts.on("--spec-only",
|
108
|
+
"Only trace code executed inside RSpec specs.") do
|
109
|
+
options.spec_only = true
|
110
|
+
end
|
105
111
|
opts.on("-n", "--no-color", "Create colorblind-safe output.") do
|
106
112
|
options.color = false
|
107
113
|
end
|
@@ -230,6 +236,10 @@ EOF
|
|
230
236
|
end
|
231
237
|
options.output_threshold = threshold
|
232
238
|
end
|
239
|
+
opts.on("--charset CHARSET",
|
240
|
+
"Charset used in Content-Type declaration of HTML reports.") do |c|
|
241
|
+
options.charset = c
|
242
|
+
end
|
233
243
|
opts.on("--[no-]validator-links", "Add link to W3C's validation services.",
|
234
244
|
"(default: true)") do |show_validator_links|
|
235
245
|
options.show_validator_links = show_validator_links
|
@@ -300,7 +310,7 @@ rescue OptionParser::InvalidOption, OptionParser::InvalidArgument,
|
|
300
310
|
exit(-1)
|
301
311
|
end
|
302
312
|
options.destdir ||= "coverage"
|
303
|
-
unless ARGV[0]
|
313
|
+
unless ARGV[0] or options.aggregate_file && File.file?(options.aggregate_file)
|
304
314
|
puts opts
|
305
315
|
exit
|
306
316
|
end
|
@@ -365,7 +375,8 @@ make_formatter = lambda do |klass|
|
|
365
375
|
:diff_cmd => options.diff_cmd,
|
366
376
|
:comments_run_by_default => options.comments_run_by_default,
|
367
377
|
:gcc_output => options.gcc_output,
|
368
|
-
:validator_links => options.show_validator_links
|
378
|
+
:validator_links => options.show_validator_links,
|
379
|
+
:charset => options.charset
|
369
380
|
)
|
370
381
|
end
|
371
382
|
|
@@ -398,6 +409,11 @@ end
|
|
398
409
|
$rcov_code_coverage_analyzer ||= Rcov::CodeCoverageAnalyzer.new
|
399
410
|
|
400
411
|
# must be registered before test/unit puts its own
|
412
|
+
|
413
|
+
|
414
|
+
# The exception to rethrow after reporting has been handled.
|
415
|
+
$__rcov_exit_exception = nil
|
416
|
+
|
401
417
|
END {
|
402
418
|
$rcov_code_coverage_analyzer.remove_hook
|
403
419
|
$rcov_callsite_analyzer.remove_hook if $rcov_callsite_analyzer
|
@@ -468,6 +484,8 @@ You can solve this by doing one or more of the following:
|
|
468
484
|
documentation or README.rake in the source distribution).
|
469
485
|
EOF
|
470
486
|
end
|
487
|
+
|
488
|
+
raise $__rcov_exit_exception if $__rcov_exit_exception
|
471
489
|
}
|
472
490
|
|
473
491
|
if options.test_unit_only
|
@@ -501,11 +519,20 @@ if options.test_unit_only
|
|
501
519
|
end
|
502
520
|
end
|
503
521
|
end
|
522
|
+
elsif options.spec_only
|
523
|
+
require 'spec'
|
524
|
+
class Spec::DSL::Example
|
525
|
+
oldrun = instance_method(:run)
|
526
|
+
define_method(:run) do |*args|
|
527
|
+
$rcov_code_coverage_analyzer.run_hooked { oldrun.bind(self).call(*args) }
|
528
|
+
end
|
529
|
+
end
|
504
530
|
else
|
505
531
|
$rcov_code_coverage_analyzer.install_hook
|
506
532
|
end
|
507
533
|
|
508
534
|
#{{{ Load scripts
|
535
|
+
begin
|
509
536
|
pending_scripts = ARGV.clone
|
510
537
|
ARGV.replace extra_args
|
511
538
|
until pending_scripts.empty?
|
@@ -515,7 +542,9 @@ until pending_scripts.empty?
|
|
515
542
|
end
|
516
543
|
load prog
|
517
544
|
end
|
518
|
-
|
545
|
+
rescue Object => err
|
546
|
+
$__rcov_exit_exception = err
|
547
|
+
end
|
519
548
|
|
520
549
|
# xx-0.1.0-1 follows
|
521
550
|
__END__
|
data/lib/rcov.rb
CHANGED
@@ -590,6 +590,18 @@ class CodeCoverageAnalyzer < DifferentialAnalyzer
|
|
590
590
|
refine_coverage_info(@script_lines__[filename], raw_data[filename])
|
591
591
|
end
|
592
592
|
|
593
|
+
# Data for the first file matching the given regexp.
|
594
|
+
# See #data.
|
595
|
+
def data_matching(filename_re)
|
596
|
+
raw_data = raw_data_relative
|
597
|
+
update_script_lines__
|
598
|
+
|
599
|
+
match = raw_data.keys.sort.grep(filename_re).first
|
600
|
+
return nil unless match
|
601
|
+
|
602
|
+
refine_coverage_info(@script_lines__[match], raw_data[match])
|
603
|
+
end
|
604
|
+
|
593
605
|
# Execute the code in the given block, monitoring it in order to gather
|
594
606
|
# information about which code was executed.
|
595
607
|
def run_hooked; super end
|
data/lib/rcov/report.rb
CHANGED
@@ -4,6 +4,28 @@
|
|
4
4
|
require 'pathname'
|
5
5
|
module Rcov
|
6
6
|
|
7
|
+
# Try to fix bug in the REXML shipped with Ruby 1.8.6
|
8
|
+
# This affects Mac OSX 10.5.1 users and motivates endless bug reports.
|
9
|
+
if RUBY_VERSION == "1.8.6" && defined? REXML
|
10
|
+
class REXML::Document
|
11
|
+
def write( output=$stdout, indent=-1, trans=false, ie_hack=false )
|
12
|
+
if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output)
|
13
|
+
output = Output.new( output, xml_decl.encoding )
|
14
|
+
end
|
15
|
+
formatter = if indent > -1
|
16
|
+
if trans
|
17
|
+
REXML::Formatters::Transitive.new( indent, ie_hack )
|
18
|
+
else
|
19
|
+
REXML::Formatters::Pretty.new( indent, ie_hack )
|
20
|
+
end
|
21
|
+
else
|
22
|
+
REXML::Formatters::Default.new( ie_hack )
|
23
|
+
end
|
24
|
+
formatter.write( self, output )
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
7
29
|
class Formatter # :nodoc:
|
8
30
|
require 'pathname'
|
9
31
|
ignore_files = [
|
@@ -226,7 +248,17 @@ class FullTextReport < Formatter # :nodoc:
|
|
226
248
|
puts "=" * 80
|
227
249
|
puts filename
|
228
250
|
puts "=" * 80
|
229
|
-
SCRIPT_LINES__[filename]
|
251
|
+
lines = SCRIPT_LINES__[filename]
|
252
|
+
unless lines
|
253
|
+
# try to get the source code from the global code coverage
|
254
|
+
# analyzer
|
255
|
+
re = /#{Regexp.escape(filename)}\z/
|
256
|
+
if $rcov_code_coverage_analyzer and
|
257
|
+
(data = $rcov_code_coverage_analyzer.data_matching(re))
|
258
|
+
lines = data[0]
|
259
|
+
end
|
260
|
+
end
|
261
|
+
(lines || []).each_with_index do |line, i|
|
230
262
|
case @textmode
|
231
263
|
when :counts
|
232
264
|
puts "%-70s| %6d" % [line.chomp[0,70], fileinfo.counts[i]]
|
@@ -616,7 +648,7 @@ EOS
|
|
616
648
|
|
617
649
|
DEFAULT_OPTS = {:color => false, :fsr => 30, :destdir => "coverage",
|
618
650
|
:callsites => false, :cross_references => false,
|
619
|
-
:validator_links => true
|
651
|
+
:validator_links => true, :charset => nil
|
620
652
|
}
|
621
653
|
def initialize(opts = {})
|
622
654
|
options = DEFAULT_OPTS.clone.update(opts)
|
@@ -628,6 +660,7 @@ EOS
|
|
628
660
|
@do_cross_references = options[:cross_references]
|
629
661
|
@span_class_index = 0
|
630
662
|
@show_validator_links = options[:validator_links]
|
663
|
+
@charset = options[:charset]
|
631
664
|
end
|
632
665
|
|
633
666
|
def execute
|
@@ -699,7 +732,7 @@ EOS
|
|
699
732
|
[f.code_coverage, "coverage_code"]].each do |value, css_class|
|
700
733
|
value *= 100
|
701
734
|
td_ {
|
702
|
-
table_(:cellpadding => 0, :cellspacing => 0, :align => "right") {
|
735
|
+
table_(:cellpadding => "0", :cellspacing => "0", :align => "right") {
|
703
736
|
tr_ {
|
704
737
|
td_ {
|
705
738
|
tt_(:class => css_class) { "%3.1f%%" % value }
|
@@ -707,11 +740,11 @@ EOS
|
|
707
740
|
}
|
708
741
|
ivalue = value.round
|
709
742
|
td_ {
|
710
|
-
table_(:class => "percent_graph", :cellpadding => 0,
|
711
|
-
:cellspacing => 0, :width => 100) {
|
743
|
+
table_(:class => "percent_graph", :cellpadding => "0",
|
744
|
+
:cellspacing => "0", :width => "100") {
|
712
745
|
tr_ {
|
713
|
-
td_(:class => "covered", :width => ivalue)
|
714
|
-
td_(:class => "uncovered", :width => (100-ivalue))
|
746
|
+
td_(:class => "covered", :width => ivalue.to_s)
|
747
|
+
td_(:class => "uncovered", :width => (100-ivalue).to_s)
|
715
748
|
}
|
716
749
|
}
|
717
750
|
}
|
@@ -740,6 +773,10 @@ EOS
|
|
740
773
|
title = default_title
|
741
774
|
output = xhtml_ { html_ {
|
742
775
|
head_ {
|
776
|
+
if @charset
|
777
|
+
meta_("http-equiv".to_sym => "Content-Type",
|
778
|
+
:content => "text/html;charset=#{@charset}")
|
779
|
+
end
|
743
780
|
title_{ title }
|
744
781
|
style_(:type => "text/css") { t_{ "body { background-color: #{default_color}; }" } }
|
745
782
|
style_(:type => "text/css") { CSS_PROLOG }
|
@@ -763,7 +800,7 @@ EOS
|
|
763
800
|
p_ {
|
764
801
|
a_(:href => "http://validator.w3.org/check/referer") {
|
765
802
|
img_(:src => "http://www.w3.org/Icons/valid-xhtml11",
|
766
|
-
:alt => "Valid XHTML 1.1!", :height => 31, :width => 88)
|
803
|
+
:alt => "Valid XHTML 1.1!", :height => "31", :width => "88")
|
767
804
|
}
|
768
805
|
a_(:href => "http://jigsaw.w3.org/css-validator/check/referer") {
|
769
806
|
img_(:style => "border:0;width:88px;height:31px",
|
@@ -801,7 +838,7 @@ EOS
|
|
801
838
|
end_of_span = "</span>"
|
802
839
|
end
|
803
840
|
end
|
804
|
-
result += %[<a name="line#{i+1}"
|
841
|
+
result += %[<a name="line#{i+1}"></a>] + (format_line % (i+1)) +
|
805
842
|
" " + create_cross_refs(file.name, i+1, CGI.escapeHTML(line)) + "\n"
|
806
843
|
last = spanclass
|
807
844
|
end
|
@@ -877,6 +914,10 @@ EOS
|
|
877
914
|
do_ctable = output_color_table?
|
878
915
|
output = xhtml_ { html_ {
|
879
916
|
head_ {
|
917
|
+
if @charset
|
918
|
+
meta_("http-equiv".to_sym => "Content-Type",
|
919
|
+
:content => "text/html;charset=#{@charset}")
|
920
|
+
end
|
880
921
|
title_{ title }
|
881
922
|
style_(:type => "text/css") { t_{ "body { background-color: #{default_color}; }" } }
|
882
923
|
style_(:type => "text/css") { CSS_PROLOG }
|
@@ -910,7 +951,7 @@ EOS
|
|
910
951
|
p_ {
|
911
952
|
a_(:href => "http://validator.w3.org/check/referer") {
|
912
953
|
img_(:src => "http://www.w3.org/Icons/valid-xhtml10",
|
913
|
-
:alt => "Valid XHTML 1.0!", :height => 31, :width => 88)
|
954
|
+
:alt => "Valid XHTML 1.0!", :height => "31", :width => "88")
|
914
955
|
}
|
915
956
|
a_(:href => "http://jigsaw.w3.org/css-validator/check/referer") {
|
916
957
|
img_(:style => "border:0;width:88px;height:31px",
|
@@ -1080,8 +1121,8 @@ class RubyAnnotation < Formatter # :nodoc:
|
|
1080
1121
|
return linetext unless @callsite_analyzer && @do_callsites
|
1081
1122
|
ref_blocks = []
|
1082
1123
|
_get_defsites(ref_blocks, filename, lineno, linetext, ">>") do |ref|
|
1083
|
-
ref.file.sub!(%r!^./!, '')
|
1084
1124
|
if ref.file
|
1125
|
+
ref.file.sub!(%r!^./!, '')
|
1085
1126
|
where = "at #{mangle_filename(ref.file)}:#{ref.line}"
|
1086
1127
|
else
|
1087
1128
|
where = "(C extension/core)"
|
data/lib/rcov/version.rb
CHANGED
@@ -4,10 +4,10 @@
|
|
4
4
|
|
5
5
|
module Rcov
|
6
6
|
|
7
|
-
VERSION = "0.8.
|
8
|
-
RELEASE_DATE = "2007-
|
7
|
+
VERSION = "0.8.1"
|
8
|
+
RELEASE_DATE = "2007-11-19"
|
9
9
|
RCOVRT_ABI = [2,0,0]
|
10
|
-
UPSTREAM_URL = "http://eigenclass.org/hiki
|
10
|
+
UPSTREAM_URL = "http://eigenclass.org/hiki/rcov"
|
11
11
|
|
12
12
|
end
|
13
13
|
# vi: set sw=2:
|
data/test/test_functional.rb
CHANGED
@@ -26,12 +26,12 @@ $rcov --no-html --gcc --include-file=sample --exclude=rcov sample_05.rb > expect
|
|
26
26
|
class TestFunctional < Test::Unit::TestCase
|
27
27
|
@@dir = Pathname(__FILE__).expand_path.dirname
|
28
28
|
|
29
|
-
def
|
30
|
-
str.sub(/Generated on.+$/, '')
|
29
|
+
def strip_variable_sections(str)
|
30
|
+
str.sub(/Generated on.+$/, '').sub(/Generated using the.+$/, '')
|
31
31
|
end
|
32
32
|
|
33
33
|
def cmp(file)
|
34
|
-
content = lambda{|dir|
|
34
|
+
content = lambda{|dir| strip_variable_sections(File.read(@@dir+dir+file))}
|
35
35
|
assert_equal(content["expected_coverage"], content["actual_coverage"])
|
36
36
|
end
|
37
37
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.1
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rcov
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.8.0
|
7
|
-
date: 2007-
|
6
|
+
version: 0.8.1.0
|
7
|
+
date: 2007-11-19 00:00:00 +01:00
|
8
8
|
summary: Code coverage analysis tool for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,11 +31,11 @@ authors:
|
|
31
31
|
files:
|
32
32
|
- bin/rcov
|
33
33
|
- lib/rcov.rb
|
34
|
-
- lib/rcov/rcovtask.rb
|
35
|
-
- lib/rcov/version.rb
|
36
34
|
- lib/rcov/lowlevel.rb
|
35
|
+
- lib/rcov/version.rb
|
37
36
|
- lib/rcov/rant.rb
|
38
37
|
- lib/rcov/report.rb
|
38
|
+
- lib/rcov/rcovtask.rb
|
39
39
|
- ext/rcovrt/extconf.rb
|
40
40
|
- ext/rcovrt/rcovrt.c
|
41
41
|
- ext/rcovrt/callsite.c
|
@@ -43,25 +43,25 @@ files:
|
|
43
43
|
- LICENSE
|
44
44
|
- Rakefile
|
45
45
|
- Rantfile
|
46
|
-
- README.en
|
47
46
|
- README.rake
|
48
|
-
- README.API
|
49
|
-
- README.vim
|
50
47
|
- README.rant
|
51
48
|
- README.emacs
|
49
|
+
- README.en
|
50
|
+
- README.vim
|
51
|
+
- README.API
|
52
52
|
- THANKS
|
53
|
-
- test/
|
54
|
-
- test/
|
53
|
+
- test/test_functional.rb
|
54
|
+
- test/test_FileStatistics.rb
|
55
55
|
- test/sample_03.rb
|
56
|
-
- test/
|
56
|
+
- test/sample_05-new.rb
|
57
57
|
- test/test_CodeCoverageAnalyzer.rb
|
58
|
-
- test/
|
58
|
+
- test/sample_04.rb
|
59
|
+
- test/sample_02.rb
|
60
|
+
- test/sample_05-old.rb
|
61
|
+
- test/sample_01.rb
|
59
62
|
- test/turn_off_rcovrt.rb
|
60
63
|
- test/test_CallSiteAnalyzer.rb
|
61
64
|
- test/sample_05.rb
|
62
|
-
- test/test_functional.rb
|
63
|
-
- test/sample_05-new.rb
|
64
|
-
- test/sample_05-old.rb
|
65
65
|
- mingw-rbconfig.rb
|
66
66
|
- rcov.vim
|
67
67
|
- rcov.el
|
@@ -69,10 +69,10 @@ files:
|
|
69
69
|
- BLURB
|
70
70
|
- CHANGES
|
71
71
|
test_files:
|
72
|
-
- test/
|
72
|
+
- test/test_functional.rb
|
73
73
|
- test/test_FileStatistics.rb
|
74
|
+
- test/test_CodeCoverageAnalyzer.rb
|
74
75
|
- test/test_CallSiteAnalyzer.rb
|
75
|
-
- test/test_functional.rb
|
76
76
|
rdoc_options:
|
77
77
|
- --main
|
78
78
|
- README.API
|