rcov 0.8.1.2.0 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/BLURB +2 -40
- data/LICENSE +2 -5
- data/Rakefile +32 -106
- data/THANKS +14 -0
- data/bin/rcov +277 -1090
- data/doc/readme_for_api.markdown +22 -0
- data/doc/readme_for_emacs.markdown +52 -0
- data/doc/readme_for_rake.markdown +51 -0
- data/doc/readme_for_vim.markdown +34 -0
- data/{rcov.el → editor-extensions/rcov.el} +0 -0
- data/{rcov.vim → editor-extensions/rcov.vim} +0 -0
- data/ext/rcovrt/1.8/callsite.c +216 -0
- data/ext/rcovrt/1.8/rcovrt.c +287 -0
- data/ext/rcovrt/1.9/callsite.c +234 -0
- data/ext/rcovrt/1.9/rcovrt.c +264 -0
- data/ext/rcovrt/extconf.rb +12 -2
- data/lib/rcov.rb +13 -968
- data/lib/rcov/call_site_analyzer.rb +225 -0
- data/lib/rcov/code_coverage_analyzer.rb +268 -0
- data/lib/rcov/coverage_info.rb +36 -0
- data/lib/rcov/differential_analyzer.rb +116 -0
- data/lib/rcov/file_statistics.rb +334 -0
- data/lib/rcov/formatters.rb +13 -0
- data/lib/rcov/formatters/base_formatter.rb +173 -0
- data/lib/rcov/formatters/failure_report.rb +15 -0
- data/lib/rcov/formatters/full_text_report.rb +48 -0
- data/lib/rcov/formatters/html_coverage.rb +274 -0
- data/lib/rcov/formatters/html_erb_template.rb +62 -0
- data/lib/rcov/formatters/text_coverage_diff.rb +193 -0
- data/lib/rcov/formatters/text_report.rb +32 -0
- data/lib/rcov/formatters/text_summary.rb +11 -0
- data/lib/rcov/lowlevel.rb +16 -17
- data/lib/rcov/rcovtask.rb +21 -22
- data/lib/rcov/templates/detail.html.erb +64 -0
- data/lib/rcov/templates/index.html.erb +93 -0
- data/lib/rcov/templates/jquery-1.3.2.min.js +19 -0
- data/lib/rcov/templates/jquery.tablesorter.min.js +15 -0
- data/lib/rcov/templates/print.css +12 -0
- data/lib/rcov/templates/rcov.js +42 -0
- data/lib/rcov/templates/screen.css +270 -0
- data/lib/rcov/version.rb +5 -8
- data/setup.rb +5 -2
- data/test/{sample_01.rb → assets/sample_01.rb} +0 -0
- data/test/{sample_02.rb → assets/sample_02.rb} +0 -0
- data/test/{sample_03.rb → assets/sample_03.rb} +0 -0
- data/test/{sample_04.rb → assets/sample_04.rb} +0 -0
- data/test/{sample_05-new.rb → assets/sample_05-new.rb} +0 -0
- data/test/{sample_05-old.rb → assets/sample_05-old.rb} +0 -0
- data/test/{sample_05.rb → assets/sample_05.rb} +0 -0
- data/test/{test_CallSiteAnalyzer.rb → call_site_analyzer_test.rb} +57 -81
- data/test/{test_CodeCoverageAnalyzer.rb → code_coverage_analyzer_test.rb} +71 -35
- data/test/{test_FileStatistics.rb → file_statistics_test.rb} +34 -36
- data/test/{test_functional.rb → functional_test.rb} +21 -35
- metadata +91 -69
- data/CHANGES +0 -177
- data/LEGAL +0 -36
- data/README.API +0 -42
- data/README.emacs +0 -64
- data/README.en +0 -130
- data/README.rake +0 -62
- data/README.rant +0 -68
- data/README.vim +0 -47
- data/Rantfile +0 -76
- data/ext/rcovrt/callsite.c +0 -242
- data/ext/rcovrt/rcovrt.c +0 -329
- data/lib/rcov/rant.rb +0 -87
- data/lib/rcov/report.rb +0 -1236
- data/mingw-rbconfig.rb +0 -174
data/lib/rcov/version.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
# rcov Copyright (c) 2004-2006 Mauricio Fernandez <mfp@acm.org>
|
2
2
|
#
|
3
|
-
# See
|
3
|
+
# See LICENSE for licensing information.
|
4
4
|
|
5
5
|
module Rcov
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
UPSTREAM_URL = "http://eigenclass.org/hiki/rcov"
|
11
|
-
|
6
|
+
VERSION = "0.9.3"
|
7
|
+
RELEASE_DATE = "2009-09-25"
|
8
|
+
RCOVRT_ABI = [2,0,0]
|
9
|
+
UPSTREAM_URL = "http://github.com/relevance/rcov"
|
12
10
|
end
|
13
|
-
# vi: set sw=2:
|
data/setup.rb
CHANGED
@@ -1255,7 +1255,7 @@ class Installer
|
|
1255
1255
|
alias setup_dir_lib noop
|
1256
1256
|
|
1257
1257
|
def setup_dir_ext(rel)
|
1258
|
-
make if extdir?(curr_srcdir())
|
1258
|
+
make if extdir?(curr_srcdir()) and File.exist?("#{curr_srcdir()}/Makefile")
|
1259
1259
|
end
|
1260
1260
|
|
1261
1261
|
alias setup_dir_data noop
|
@@ -1288,7 +1288,10 @@ class Installer
|
|
1288
1288
|
if /\Aruby/ =~ File.basename(old.cmd)
|
1289
1289
|
Shebang.new(config('rubypath'), old.args)
|
1290
1290
|
elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby'
|
1291
|
-
|
1291
|
+
puts "Skipping shebang rename"
|
1292
|
+
# We don't want this to happen anymore, it doesn't make sense
|
1293
|
+
# Shebang.new(config('rubypath'), old.args[1..-1])
|
1294
|
+
old
|
1292
1295
|
else
|
1293
1296
|
return old unless config('shebang') == 'all'
|
1294
1297
|
Shebang.new(config('rubypath'))
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,11 +1,8 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
1
2
|
|
3
|
+
class TestCallSiteAnalyzer < Test::Unit::TestCase
|
2
4
|
|
3
|
-
|
4
|
-
require 'rcov'
|
5
|
-
|
6
|
-
class Test_CallSiteAnalyzer < Test::Unit::TestCase
|
7
|
-
|
8
|
-
sample_file = File.join(File.dirname(__FILE__), "sample_03.rb")
|
5
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_03.rb")
|
9
6
|
load sample_file
|
10
7
|
|
11
8
|
def setup
|
@@ -14,40 +11,54 @@ class Test_CallSiteAnalyzer < Test::Unit::TestCase
|
|
14
11
|
end
|
15
12
|
|
16
13
|
def verify_callsites_equal(expected, actual)
|
17
|
-
callsites = expected.inject({}) do |s,(backtrace, count)|
|
14
|
+
callsites = expected.inject({}) do |s,(backtrace, count)|
|
18
15
|
unless $".any?{|x| %r{\brcovrt\b} =~ x}
|
19
16
|
backtrace = backtrace.map{|_, mid, file, line| [nil, mid, file, line] }
|
20
17
|
end
|
18
|
+
backtrace[0][2] = File.expand_path(backtrace[0][2])
|
21
19
|
s[Rcov::CallSiteAnalyzer::CallSite.new(backtrace)] = count
|
22
20
|
s
|
23
21
|
end
|
24
|
-
|
22
|
+
|
23
|
+
act_callsites = actual.inject({}) do |s, (key, value)|
|
24
|
+
#wow thats obtuse. In a callsite we have an array of arrays. We have to deep copy them because
|
25
|
+
# if we muck with the actual backtrace it messes things up for accumulation type tests.
|
26
|
+
# we have to muck with backtrace so that we can normalize file names (it's an issue between MRI and JRuby)
|
27
|
+
backtrace = key.backtrace.inject([]) {|y, val| y << val.inject([]) {|z, v2| z<< v2}}
|
28
|
+
backtrace[0][2] = File.expand_path(key.backtrace[0][2])
|
29
|
+
s[Rcov::CallSiteAnalyzer::CallSite.new(backtrace)] = value
|
30
|
+
s
|
31
|
+
end
|
32
|
+
assert_equal(callsites.to_s, act_callsites.to_s)
|
25
33
|
end
|
26
34
|
|
27
35
|
def verify_defsite_equal(expected, actual)
|
28
|
-
|
36
|
+
defsite = Rcov::CallSiteAnalyzer::DefSite.new(*expected)
|
37
|
+
defsite.file = File.expand_path defsite.file
|
38
|
+
actual.file = File.expand_path actual.file
|
39
|
+
assert_equal(defsite.to_s, actual.to_s)
|
29
40
|
end
|
30
41
|
|
31
42
|
def test_callsite_compute_raw_difference
|
32
|
-
src = [
|
43
|
+
src = [
|
33
44
|
{ ["Foo", "foo"] => {"bar" => 1},
|
34
|
-
["Foo", "bar"] => {"baz" => 10} },
|
35
|
-
{ ["Foo", "foo"] => ["foo.rb", 10] }
|
45
|
+
["Foo", "bar"] => {"baz" => 10} },
|
46
|
+
{ ["Foo", "foo"] => ["foo.rb", 10] }
|
36
47
|
]
|
37
|
-
dst = [
|
48
|
+
dst = [
|
38
49
|
{ ["Foo", "foo"] => {"bar" => 1, "fubar" => 10},
|
39
50
|
["Foo", "baz"] => {"baz" => 10} },
|
40
51
|
{ ["Foo", "foo"] => ["fooredef.rb", 10],
|
41
52
|
["Foo", "baz"] => ["foo.rb", 20]}
|
42
53
|
]
|
43
|
-
expected = [
|
54
|
+
expected = [
|
44
55
|
{ ["Foo", "foo"] => {"fubar" => 10},
|
45
56
|
["Foo", "baz"] => {"baz" => 10} },
|
46
57
|
{ ["Foo", "foo"] => ["fooredef.rb", 10],
|
47
|
-
["Foo", "baz"] => ["foo.rb", 20] }
|
58
|
+
["Foo", "baz"] => ["foo.rb", 20] }
|
48
59
|
]
|
49
|
-
|
50
|
-
assert_equal(expected,
|
60
|
+
|
61
|
+
assert_equal(expected,
|
51
62
|
@a.instance_eval{ compute_raw_data_difference(src, dst) } )
|
52
63
|
end
|
53
64
|
|
@@ -62,55 +73,40 @@ class Test_CallSiteAnalyzer < Test::Unit::TestCase
|
|
62
73
|
|
63
74
|
def test_basic_defsite_recording
|
64
75
|
@a.run_hooked{ @o.f1 }
|
65
|
-
verify_defsite_equal(["./test/sample_03.rb", 3],
|
66
|
-
|
67
|
-
verify_defsite_equal(["./test/sample_03.rb", 7],
|
68
|
-
@a.defsite("Rcov::Test::Temporary::Sample03", "f2"))
|
69
|
-
verify_defsite_equal(["./test/sample_03.rb", 7],
|
70
|
-
@a.defsite("Rcov::Test::Temporary::Sample03#f2"))
|
76
|
+
verify_defsite_equal(["./test/assets/sample_03.rb", 3], @a.defsite("Rcov::Test::Temporary::Sample03", "f1"))
|
77
|
+
verify_defsite_equal(["./test/assets/sample_03.rb", 7], @a.defsite("Rcov::Test::Temporary::Sample03", "f2"))
|
78
|
+
verify_defsite_equal(["./test/assets/sample_03.rb", 7], @a.defsite("Rcov::Test::Temporary::Sample03#f2"))
|
71
79
|
end
|
72
80
|
|
73
81
|
def test_basic_callsite_recording
|
74
82
|
@a.run_hooked{ @o.f1 }
|
75
83
|
assert(@a.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
76
84
|
assert_equal(%w[f1 f2], @a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
77
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/sample_03.rb", 4]] => 10},
|
78
|
-
|
79
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/sample_03.rb", 4]] => 10},
|
80
|
-
@a.callsites("Rcov::Test::Temporary::Sample03#f2"))
|
81
|
-
#verify_callsites_equal({["./test/sample_03.rb:4:in `f1'"] => 10},
|
82
|
-
# @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
83
|
-
#verify_callsites_equal({["./test/sample_03.rb:4:in `f1'"] => 10},
|
84
|
-
# @a.callsites("Rcov::Test::Temporary::Sample03#f2"))
|
85
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
86
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03#f2"))
|
85
87
|
end
|
86
88
|
|
87
89
|
def test_basic_callsite_recording_API
|
88
90
|
@a.run_hooked{ @o.f1 }
|
89
91
|
assert(@a.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
90
92
|
assert_equal(%w[f1 f2], @a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
91
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
92
|
-
|
93
|
-
@a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
94
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/sample_03.rb", 4]] => 10},
|
95
|
-
@a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
93
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
94
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
96
95
|
callsites = @a.callsites("Rcov::Test::Temporary::Sample03", "f2")
|
97
96
|
callsite = callsites.keys[0]
|
98
|
-
|
97
|
+
#expand path is used here to compensate for differences between JRuby and MRI
|
98
|
+
assert_equal(File.expand_path("./test/assets/sample_03.rb"), File.expand_path(callsite.file))
|
99
99
|
assert_equal(4, callsite.line)
|
100
100
|
assert_equal(:f1, callsite.calling_method)
|
101
101
|
end
|
102
|
-
|
103
|
-
|
102
|
+
|
103
|
+
|
104
104
|
def test_basic_callsite_recording_with_singleton_classes
|
105
105
|
@a.run_hooked{ @o.class.g1 }
|
106
106
|
assert(@a.analyzed_classes.include?("#<Class:Rcov::Test::Temporary::Sample03>"))
|
107
107
|
assert_equal(%w[g1 g2], @a.analyzed_methods("#<Class:Rcov::Test::Temporary::Sample03>"))
|
108
|
-
verify_callsites_equal({[[class << Rcov::Test::Temporary::Sample03; self end,
|
109
|
-
|
110
|
-
@a.callsites("Rcov::Test::Temporary::Sample03.g2"))
|
111
|
-
verify_callsites_equal({[[class << Rcov::Test::Temporary::Sample03; self end,
|
112
|
-
:g1, "./test/sample_03.rb", 15]] => 10},
|
113
|
-
@a.callsites("#<Class:Rcov::Test::Temporary::Sample03>","g2"))
|
108
|
+
verify_callsites_equal({[[class << Rcov::Test::Temporary::Sample03; self end, :g1, "./test/assets/sample_03.rb", 15]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03.g2"))
|
109
|
+
verify_callsites_equal({[[class << Rcov::Test::Temporary::Sample03; self end, :g1, "./test/assets/sample_03.rb", 15]] => 10}, @a.callsites("#<Class:Rcov::Test::Temporary::Sample03>","g2"))
|
114
110
|
end
|
115
111
|
|
116
112
|
|
@@ -118,24 +114,17 @@ class Test_CallSiteAnalyzer < Test::Unit::TestCase
|
|
118
114
|
@a.run_hooked{ @o.f1 }
|
119
115
|
assert(@a.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
120
116
|
assert_equal(%w[f1 f2], @a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
121
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
122
|
-
"./test/sample_03.rb", 4]] => 10},
|
123
|
-
@a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
117
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
124
118
|
|
125
119
|
@a.run_hooked{ @o.f1 }
|
126
120
|
assert(@a.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
127
121
|
assert_equal(%w[f1 f2], @a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
128
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
129
|
-
|
130
|
-
@a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
131
|
-
|
122
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 20}, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
123
|
+
|
132
124
|
@a.run_hooked{ @o.f3 }
|
133
125
|
assert_equal(%w[f1 f2 f3], @a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
134
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
135
|
-
|
136
|
-
[[Rcov::Test::Temporary::Sample03, :f3,
|
137
|
-
"./test/sample_03.rb", 11]]=>100 },
|
138
|
-
@a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
126
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 120,
|
127
|
+
[[Rcov::Test::Temporary::Sample03, :f3, "./test/assets/sample_03.rb", 11]] => 100 }, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
139
128
|
end
|
140
129
|
|
141
130
|
def test_reset
|
@@ -146,50 +135,37 @@ class Test_CallSiteAnalyzer < Test::Unit::TestCase
|
|
146
135
|
end
|
147
136
|
assert(@a.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
148
137
|
assert_equal(%w[f1 f2], @a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
149
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
150
|
-
"./test/sample_03.rb", 4]] => 10},
|
151
|
-
@a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
152
|
-
|
138
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, @a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
153
139
|
end
|
154
140
|
|
155
141
|
def test_nested_callsite_recording
|
156
142
|
a = Rcov::CallSiteAnalyzer.new
|
157
143
|
b = Rcov::CallSiteAnalyzer.new
|
158
|
-
a.run_hooked do
|
144
|
+
a.run_hooked do
|
159
145
|
b.run_hooked { @o.f1 }
|
160
146
|
assert(b.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
161
147
|
assert_equal(%w[f1 f2], b.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
162
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
163
|
-
"./test/sample_03.rb", 4]] => 10},
|
164
|
-
b.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
148
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, b.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
165
149
|
|
166
150
|
@o.f1
|
167
151
|
assert_equal(%w[f1 f2], b.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
168
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
169
|
-
|
170
|
-
b.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
171
|
-
|
152
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 10}, b.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
153
|
+
|
172
154
|
assert(a.analyzed_classes.include?("Rcov::Test::Temporary::Sample03"))
|
173
155
|
assert_equal(%w[f1 f2], a.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
174
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
175
|
-
"./test/sample_03.rb", 4]] => 20},
|
176
|
-
a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
156
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 20}, a.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
177
157
|
end
|
158
|
+
|
178
159
|
b.run_hooked{ @o.f3 }
|
179
160
|
assert_equal(%w[f1 f2 f3], b.analyzed_methods("Rcov::Test::Temporary::Sample03"))
|
180
|
-
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1,
|
181
|
-
|
182
|
-
[[Rcov::Test::Temporary::Sample03, :f3,
|
183
|
-
"./test/sample_03.rb", 11]]=>100 },
|
184
|
-
b.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
161
|
+
verify_callsites_equal({[[Rcov::Test::Temporary::Sample03, :f1, "./test/assets/sample_03.rb", 4]] => 110,
|
162
|
+
[[Rcov::Test::Temporary::Sample03, :f3, "./test/assets/sample_03.rb", 11]]=>100 }, b.callsites("Rcov::Test::Temporary::Sample03", "f2"))
|
185
163
|
end
|
186
164
|
|
187
165
|
def test_expand_name
|
188
166
|
assert_equal(["Foo", "foo"], @a.instance_eval{ expand_name("Foo#foo") })
|
189
167
|
assert_equal(["Foo", "foo"], @a.instance_eval{ expand_name("Foo", "foo") })
|
190
|
-
assert_equal(["#<Class:Foo>", "foo"],
|
191
|
-
|
192
|
-
assert_equal(["#<Class:Foo>", "foo"],
|
193
|
-
@a.instance_eval{ expand_name("#<Class:Foo>", "foo") })
|
168
|
+
assert_equal(["#<Class:Foo>", "foo"], @a.instance_eval{ expand_name("Foo.foo") })
|
169
|
+
assert_equal(["#<Class:Foo>", "foo"], @a.instance_eval{ expand_name("#<Class:Foo>", "foo") })
|
194
170
|
end
|
195
171
|
end
|
@@ -1,9 +1,7 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
1
2
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
class Test_CodeCoverageAnalyzer < Test::Unit::TestCase
|
6
|
-
LINES = <<-EOF.to_a
|
3
|
+
class TestCodeCoverageAnalyzer < Test::Unit::TestCase
|
4
|
+
LINES = <<-EOF.split "\n"
|
7
5
|
puts 1
|
8
6
|
if foo
|
9
7
|
bar
|
@@ -26,7 +24,7 @@ EOF
|
|
26
24
|
def test_refine_coverage_info
|
27
25
|
analyzer = Rcov::CodeCoverageAnalyzer.new
|
28
26
|
cover = [1, 1, nil, nil, 0, 5, 5, 5, 0]
|
29
|
-
line_info, marked_info,
|
27
|
+
line_info, marked_info,
|
30
28
|
count_info = analyzer.instance_eval{ refine_coverage_info(LINES, cover) }
|
31
29
|
assert_equal(LINES, line_info)
|
32
30
|
assert_equal([true] * 2 + [false] * 3 + [true] * 3 + [false], marked_info)
|
@@ -39,17 +37,19 @@ EOF
|
|
39
37
|
end
|
40
38
|
|
41
39
|
def test_raw_coverage_info
|
42
|
-
sample_file = File.join(File.dirname(__FILE__), "sample_01.rb")
|
40
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_01.rb")
|
43
41
|
lines = File.readlines(sample_file)
|
44
42
|
analyzer = Rcov::CodeCoverageAnalyzer.new
|
45
43
|
analyzer.run_hooked{ load sample_file }
|
46
|
-
|
44
|
+
|
47
45
|
assert_equal(lines, SCRIPT_LINES__[sample_file][0, lines.size])
|
48
46
|
assert(analyzer.analyzed_files.include?(sample_file))
|
49
47
|
line_info, cov_info, count_info = analyzer.data(sample_file)
|
50
48
|
assert_equal(lines, line_info)
|
51
49
|
assert_equal([true, true, false, false, true, false, true], cov_info)
|
52
|
-
assert_equal([1, 2, 0, 0, 1, 0, 11], count_info)
|
50
|
+
assert_equal([1, 2, 0, 0, 1, 0, 11], count_info) unless RUBY_PLATFORM =~ /java/
|
51
|
+
# JRUBY reports an if x==blah as hitting this type of line once, JRUBY also optimizes this stuff so you'd have to run with --debug to get "extra" information. MRI hits it twice.
|
52
|
+
assert_equal([1, 3, 0, 0, 1, 0, 33], count_info) if RUBY_PLATFORM =~ /java/
|
53
53
|
analyzer.reset
|
54
54
|
assert_equal(nil, analyzer.data(sample_file))
|
55
55
|
assert_equal([], analyzer.analyzed_files)
|
@@ -60,10 +60,10 @@ EOF
|
|
60
60
|
lines = ["puts a", "foo", "bar"] * 3
|
61
61
|
coverage = [true] * 3 + [false] * 6
|
62
62
|
counts = [1] * 3 + [0] * 6
|
63
|
-
nlines, ncoverage, ncounts = analyzer.instance_eval do
|
63
|
+
nlines, ncoverage, ncounts = analyzer.instance_eval do
|
64
64
|
script_lines_workaround(lines, coverage, counts)
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
assert_equal(["puts a", "foo", "bar"], nlines)
|
68
68
|
assert_equal([true, true, true], ncoverage)
|
69
69
|
assert_equal([1, 1, 1], ncounts)
|
@@ -74,7 +74,7 @@ EOF
|
|
74
74
|
lines = ["puts a", "foo", "bar"] * 2 + ["puts a", "foo", "baz"]
|
75
75
|
coverage = [true] * 9
|
76
76
|
counts = [1] * 9
|
77
|
-
nlines, ncoverage, ncounts = analyzer.instance_eval do
|
77
|
+
nlines, ncoverage, ncounts = analyzer.instance_eval do
|
78
78
|
script_lines_workaround(lines, coverage, counts)
|
79
79
|
end
|
80
80
|
assert_equal(lines, nlines)
|
@@ -82,55 +82,85 @@ EOF
|
|
82
82
|
assert_equal(counts, ncounts)
|
83
83
|
end
|
84
84
|
|
85
|
+
def test_if_elsif_reports_correctly
|
86
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_06.rb")
|
87
|
+
lines = File.readlines(sample_file)
|
88
|
+
analyzer = Rcov::CodeCoverageAnalyzer.new
|
89
|
+
analyzer.run_hooked{ load sample_file }
|
90
|
+
assert_equal(lines, SCRIPT_LINES__[sample_file][0, lines.size])
|
91
|
+
assert(analyzer.analyzed_files.include?(sample_file))
|
92
|
+
line_info, cov_info, count_info = analyzer.data(sample_file)
|
93
|
+
assert_equal(lines, line_info)
|
94
|
+
assert_equal([true, true, false, true, true, false, false, false], cov_info) unless RUBY_PLATFORM == "java"
|
95
|
+
end
|
96
|
+
|
85
97
|
def test_differential_coverage_data
|
86
|
-
sample_file = File.join(File.dirname(__FILE__), "sample_01.rb")
|
98
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_01.rb")
|
87
99
|
lines = File.readlines(sample_file)
|
88
100
|
analyzer = Rcov::CodeCoverageAnalyzer.new
|
89
101
|
analyzer.run_hooked{ load sample_file }
|
90
102
|
line_info, cov_info, count_info = analyzer.data(sample_file)
|
91
|
-
assert_equal([1, 2, 0, 0, 1, 0, 11], count_info)
|
92
|
-
|
103
|
+
assert_equal([1, 2, 0, 0, 1, 0, 11], count_info) if RUBY_VERSION =~ /1.9/
|
104
|
+
|
93
105
|
analyzer.reset
|
94
|
-
|
95
|
-
|
106
|
+
#set_trace_func proc { |event, file, line, id, binding, classname| printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname if (file =~ /sample_02.rb/) }
|
107
|
+
|
108
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_02.rb")
|
96
109
|
analyzer.run_hooked{ load sample_file }
|
97
110
|
line_info, cov_info, count_info = analyzer.data(sample_file)
|
98
|
-
|
99
|
-
|
111
|
+
if RUBY_PLATFORM == "java"
|
112
|
+
assert_equal([8, 3, 0, 0, 0], count_info)
|
113
|
+
else
|
114
|
+
assert_equal([8, 1, 0, 0, 0], count_info) unless RUBY_VERSION =~ /1.9/
|
115
|
+
assert_equal([4, 1, 0, 0, 4], count_info) if RUBY_VERSION =~ /1.9/
|
116
|
+
end
|
117
|
+
|
100
118
|
analyzer.reset
|
101
119
|
assert_equal([], analyzer.analyzed_files)
|
102
120
|
analyzer.run_hooked{ Rcov::Test::Temporary::Sample02.foo(1, 1) }
|
103
121
|
line_info, cov_info, count_info = analyzer.data(sample_file)
|
104
|
-
|
105
|
-
|
122
|
+
if RUBY_PLATFORM == "java"
|
123
|
+
assert_equal([0, 1, 3, 1, 0], count_info) unless RUBY_VERSION =~ /1.9/
|
124
|
+
else
|
125
|
+
assert_equal([0, 1, 1, 1, 0], count_info) unless RUBY_VERSION =~ /1.9/
|
126
|
+
assert_equal([0, 2, 1, 0, 0], count_info) if RUBY_VERSION =~ /1.9/
|
127
|
+
end
|
128
|
+
analyzer.run_hooked do
|
106
129
|
10.times{ Rcov::Test::Temporary::Sample02.foo(1, 1) }
|
107
130
|
end
|
108
131
|
line_info, cov_info, count_info = analyzer.data(sample_file)
|
109
|
-
assert_equal([0, 11,
|
132
|
+
assert_equal([0, 11, 33, 11, 0], count_info) if RUBY_PLATFORM == "java"
|
133
|
+
assert_equal([0, 11, 11, 11, 0], count_info) unless RUBY_PLATFORM == "java"
|
110
134
|
10.times{ analyzer.run_hooked{ Rcov::Test::Temporary::Sample02.foo(1, 1) } }
|
111
135
|
line_info, cov_info, count_info = analyzer.data(sample_file)
|
112
|
-
assert_equal([0, 21,
|
136
|
+
assert_equal([0, 21, 63, 21, 0], count_info) if RUBY_PLATFORM == "java"
|
137
|
+
assert_equal([0, 21, 21, 21, 0], count_info) unless RUBY_PLATFORM == "java"
|
113
138
|
|
114
139
|
count_info2 = nil
|
115
140
|
10.times do |i|
|
116
|
-
analyzer.run_hooked do
|
141
|
+
analyzer.run_hooked do
|
117
142
|
Rcov::Test::Temporary::Sample02.foo(1, 1)
|
118
143
|
line_info, cov_info, count_info = analyzer.data(sample_file) if i == 3
|
119
144
|
line_info2, cov_info2, count_info2 = analyzer.data(sample_file)
|
120
145
|
end
|
121
146
|
end
|
122
|
-
|
123
|
-
|
147
|
+
if RUBY_PLATFORM == "java"
|
148
|
+
assert_equal([0, 25, 75, 25, 0], count_info)
|
149
|
+
assert_equal([0, 31, 93, 31, 0], count_info2)
|
150
|
+
else
|
151
|
+
assert_equal([0, 25, 25, 25, 0], count_info)
|
152
|
+
assert_equal([0, 31, 31, 31, 0], count_info2)
|
153
|
+
end
|
124
154
|
end
|
125
155
|
|
126
156
|
def test_nested_analyzer_blocks
|
127
157
|
a1 = Rcov::CodeCoverageAnalyzer.new
|
128
158
|
a2 = Rcov::CodeCoverageAnalyzer.new
|
129
159
|
|
130
|
-
sample_file = File.join(File.dirname(__FILE__), "sample_02.rb")
|
160
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_02.rb")
|
131
161
|
load sample_file
|
132
|
-
|
133
|
-
a1.run_hooked do
|
162
|
+
|
163
|
+
a1.run_hooked do
|
134
164
|
100.times{ Rcov::Test::Temporary::Sample02.foo(1, 1) }
|
135
165
|
a2.run_hooked do
|
136
166
|
10.times{ Rcov::Test::Temporary::Sample02.foo(1, 1) }
|
@@ -153,16 +183,21 @@ EOF
|
|
153
183
|
|
154
184
|
_, _, counts1 = a1.data(sample_file)
|
155
185
|
_, _, counts2 = a2.data(sample_file)
|
156
|
-
|
157
|
-
|
186
|
+
if RUBY_PLATFORM == "java"
|
187
|
+
assert_equal([0, 221, 663, 221, 0], counts1)
|
188
|
+
assert_equal([0, 121, 363, 121, 0], counts2)
|
189
|
+
else
|
190
|
+
assert_equal([0, 221, 221, 221, 0], counts1)
|
191
|
+
assert_equal([0, 121, 121, 121, 0], counts2)
|
192
|
+
end
|
158
193
|
end
|
159
194
|
|
160
195
|
def test_reset
|
161
196
|
a1 = Rcov::CodeCoverageAnalyzer.new
|
162
197
|
|
163
|
-
sample_file = File.join(File.dirname(__FILE__), "sample_02.rb")
|
198
|
+
sample_file = File.join(File.dirname(__FILE__), "assets/sample_02.rb")
|
164
199
|
load sample_file
|
165
|
-
|
200
|
+
|
166
201
|
a1.run_hooked do
|
167
202
|
100.times do |i|
|
168
203
|
Rcov::Test::Temporary::Sample02.foo(1, 1)
|
@@ -170,14 +205,15 @@ EOF
|
|
170
205
|
end
|
171
206
|
end
|
172
207
|
|
173
|
-
assert_equal([0, 50, 50, 50, 0], a1.data(sample_file)[2])
|
208
|
+
assert_equal([0, 50, 50, 50, 0], a1.data(sample_file)[2]) unless RUBY_PLATFORM == "java"
|
209
|
+
assert_equal([0, 50, 150, 50, 0], a1.data(sample_file)[2]) if RUBY_PLATFORM == "java"
|
174
210
|
end
|
175
211
|
|
176
212
|
def test_compute_raw_difference
|
177
213
|
first = {"a" => [1,1,1,1,1]}
|
178
214
|
last = {"a" => [2,1,5,2,1], "b" => [1,2,3,4,5]}
|
179
215
|
a = Rcov::CodeCoverageAnalyzer.new
|
180
|
-
assert_equal({"a" => [1,0,4,1,0], "b" => [1,2,3,4,5]},
|
216
|
+
assert_equal({"a" => [1,0,4,1,0], "b" => [1,2,3,4,5]},
|
181
217
|
a.instance_eval{ compute_raw_data_difference(first, last)} )
|
182
218
|
end
|
183
219
|
end
|