test 0.2.1 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- metadata +36 -112
- data/.gemspec +0 -152
- data/.gitignore +0 -7
- data/.ruby +0 -46
- data/.test +0 -11
- data/.yardopts +0 -7
- data/Assembly +0 -46
- data/COPYING.rdoc +0 -31
- data/HISTORY.md +0 -29
- data/LICENSE.txt +0 -25
- data/MANIFEST +0 -37
- data/PROFILE +0 -31
- data/README.md +0 -110
- data/VERSION +0 -1
- data/bin/ruby-test +0 -4
- data/lib/test.rb +0 -3
- data/lib/test/autorun.rb +0 -18
- data/lib/test/cli.rb +0 -110
- data/lib/test/code_snippet.rb +0 -93
- data/lib/test/config.rb +0 -72
- data/lib/test/core_ext.rb +0 -9
- data/lib/test/core_ext/assertion.rb +0 -30
- data/lib/test/core_ext/exception.rb +0 -8
- data/lib/test/core_ext/string.rb +0 -30
- data/lib/test/rake.rb +0 -124
- data/lib/test/recorder.rb +0 -53
- data/lib/test/reporters/abstract.rb +0 -268
- data/lib/test/reporters/abstract_hash.rb +0 -224
- data/lib/test/reporters/dotprogress.rb +0 -89
- data/lib/test/reporters/html.rb +0 -155
- data/lib/test/reporters/outline.rb +0 -211
- data/lib/test/reporters/progress.rb +0 -197
- data/lib/test/reporters/summary.rb +0 -145
- data/lib/test/reporters/tap.rb +0 -61
- data/lib/test/reporters/tapj.rb +0 -53
- data/lib/test/reporters/tapy.rb +0 -53
- data/lib/test/reporters/test.rb +0 -51
- data/lib/test/runner.rb +0 -342
- data/site/assets/images/test_pattern.jpg +0 -0
- data/site/index.html +0 -77
- data/spec/01_test.md +0 -29
- data/spec/02_case.md +0 -34
- data/spec/applique/ruby-test.rb +0 -2
- data/test/basic_case.rb +0 -11
- data/try/raw_example.rb +0 -41
- data/work/NOTES.md +0 -17
@@ -1,224 +0,0 @@
|
|
1
|
-
require 'test/reporters/abstract'
|
2
|
-
|
3
|
-
module Test::Reporters
|
4
|
-
|
5
|
-
# Hash Abstract is a base class for the TAP-Y
|
6
|
-
# and TAP-J reporters.
|
7
|
-
#
|
8
|
-
class AbstractHash < Abstract
|
9
|
-
|
10
|
-
#
|
11
|
-
def begin_suite(suite)
|
12
|
-
require 'yaml'
|
13
|
-
|
14
|
-
@start_time = Time.now
|
15
|
-
@case_level = 0
|
16
|
-
@test_index = 0
|
17
|
-
|
18
|
-
now = Time.now.strftime('%Y-%m-%d %H:%M:%S')
|
19
|
-
|
20
|
-
h = {
|
21
|
-
'type' => 'suite',
|
22
|
-
'start' => now,
|
23
|
-
'count' => total_count(suite)
|
24
|
-
}
|
25
|
-
|
26
|
-
return h
|
27
|
-
end
|
28
|
-
|
29
|
-
#
|
30
|
-
def begin_case(test_case)
|
31
|
-
h = {}
|
32
|
-
h['type' ] = 'case'
|
33
|
-
h['level'] = @case_level
|
34
|
-
|
35
|
-
merge_subtype h, test_case
|
36
|
-
merge_setup h, test_case
|
37
|
-
merge_description h, test_case
|
38
|
-
|
39
|
-
@case_level += 1
|
40
|
-
|
41
|
-
return h
|
42
|
-
end
|
43
|
-
|
44
|
-
#
|
45
|
-
def begin_test(test)
|
46
|
-
@test_index += 1
|
47
|
-
end
|
48
|
-
|
49
|
-
#
|
50
|
-
def pass(test) #, backtrace=nil)
|
51
|
-
h = {}
|
52
|
-
h['type' ] = 'test'
|
53
|
-
h['status'] = 'pass'
|
54
|
-
|
55
|
-
merge_subtype h, test
|
56
|
-
merge_setup h, test
|
57
|
-
merge_description h, test
|
58
|
-
#merge_comparison h, test, exception
|
59
|
-
#merge_coverage h, test
|
60
|
-
merge_source h, test
|
61
|
-
merge_time h
|
62
|
-
|
63
|
-
return h
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
def fail(test, exception)
|
68
|
-
h = {}
|
69
|
-
h['type' ] = 'test'
|
70
|
-
h['status'] = 'fail'
|
71
|
-
|
72
|
-
merge_subtype h, test
|
73
|
-
merge_setup h, test
|
74
|
-
merge_description h, test
|
75
|
-
#merge_comparison h, test, exception
|
76
|
-
#merge_coverage h, test
|
77
|
-
merge_source h, test
|
78
|
-
merge_exception h, test, exception
|
79
|
-
merge_time h
|
80
|
-
|
81
|
-
return h
|
82
|
-
end
|
83
|
-
|
84
|
-
#
|
85
|
-
def error(test, exception)
|
86
|
-
h = {}
|
87
|
-
h['type' ] = 'test'
|
88
|
-
h['status'] = 'error'
|
89
|
-
|
90
|
-
merge_subtype h, test
|
91
|
-
merge_setup h, test
|
92
|
-
merge_description h, test
|
93
|
-
#merge_comparison h, test, exception
|
94
|
-
#merge_coverage h, test
|
95
|
-
merge_source h, test
|
96
|
-
merge_exception h, test, exception, true
|
97
|
-
merge_time h
|
98
|
-
|
99
|
-
return h
|
100
|
-
end
|
101
|
-
|
102
|
-
#
|
103
|
-
def todo(test, exception)
|
104
|
-
h = {}
|
105
|
-
h['type' ] = 'test'
|
106
|
-
h['status'] = 'todo'
|
107
|
-
|
108
|
-
merge_subtype h, test
|
109
|
-
merge_setup h, test
|
110
|
-
merge_description h, test
|
111
|
-
#merge_comparison h, test, exception
|
112
|
-
#merge_coverage h, test
|
113
|
-
merge_source h, test
|
114
|
-
merge_exception h, test, exception
|
115
|
-
merge_time h
|
116
|
-
|
117
|
-
return h
|
118
|
-
end
|
119
|
-
|
120
|
-
#
|
121
|
-
def omit(test, exception)
|
122
|
-
h = {}
|
123
|
-
h['type' ] = 'test'
|
124
|
-
h['status'] = 'omit'
|
125
|
-
|
126
|
-
merge_subtype h, test
|
127
|
-
merge_setup h, test
|
128
|
-
merge_description h, test
|
129
|
-
#merge_comparison h, test, exception
|
130
|
-
#merge_coverage h, test
|
131
|
-
merge_source h, test
|
132
|
-
merge_exception h, test, exception
|
133
|
-
merge_time h
|
134
|
-
|
135
|
-
return h
|
136
|
-
end
|
137
|
-
|
138
|
-
#
|
139
|
-
def end_case(test_case)
|
140
|
-
@case_level -= 1
|
141
|
-
end
|
142
|
-
|
143
|
-
#
|
144
|
-
def end_suite(suite)
|
145
|
-
h = {
|
146
|
-
'type' => 'tally',
|
147
|
-
'time' => Time.now - @start_time,
|
148
|
-
'counts' => {
|
149
|
-
'total' => total,
|
150
|
-
'pass' => record[:pass].size,
|
151
|
-
'fail' => record[:fail].size,
|
152
|
-
'error' => record[:error].size,
|
153
|
-
'omit' => record[:omit].size,
|
154
|
-
'todo' => record[:todo].size
|
155
|
-
}
|
156
|
-
}
|
157
|
-
return h
|
158
|
-
end
|
159
|
-
|
160
|
-
private
|
161
|
-
|
162
|
-
#
|
163
|
-
def merge_subtype(hash, test)
|
164
|
-
hash['subtype'] = test.type.to_s if test.respond_to?(:type)
|
165
|
-
end
|
166
|
-
|
167
|
-
# TODO: topic or setup ?
|
168
|
-
def merge_setup(hash, test)
|
169
|
-
#hash['setup'] = test.setup.to_s if test.respond_to?(:setup)
|
170
|
-
hash['setup'] = test.topic.to_s if test.respond_to?(:topic)
|
171
|
-
end
|
172
|
-
|
173
|
-
# Add test description to hash.
|
174
|
-
def merge_description(hash, test)
|
175
|
-
hash['description'] = test.to_s.strip
|
176
|
-
end
|
177
|
-
|
178
|
-
# NOTE: Not presently used.
|
179
|
-
def merge_comparison(hash, test, exception)
|
180
|
-
hash['returned'] = exception.returned
|
181
|
-
hash['expected'] = exception.expected
|
182
|
-
end
|
183
|
-
|
184
|
-
# Add source location information to hash.
|
185
|
-
def merge_source(hash, test)
|
186
|
-
if test.respond_to?('source_location')
|
187
|
-
file, line = source_location
|
188
|
-
hash['file' ] = file
|
189
|
-
hash['line' ] = line
|
190
|
-
hash['source' ] = code(file, line).to_str
|
191
|
-
hash['snippet'] = code(file, line).to_omap
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
# Add exception subsection of hash.
|
196
|
-
def merge_exception(hash, test, exception, bt=false)
|
197
|
-
hash['exception'] = {}
|
198
|
-
hash['exception']['file' ] = code(exception).file
|
199
|
-
hash['exception']['line' ] = code(exception).line
|
200
|
-
hash['exception']['source' ] = code(exception).to_str
|
201
|
-
hash['exception']['snippet' ] = code(exception).to_omap
|
202
|
-
hash['exception']['message' ] = exception.message
|
203
|
-
hash['exception']['backtrace'] = clean_backtrace(exception) if bt
|
204
|
-
end
|
205
|
-
|
206
|
-
# TODO: Really?
|
207
|
-
def merge_coverage(hash, test)
|
208
|
-
if test.respond_to?(:file_coverage) or test.respond_to?(:code_coverage)
|
209
|
-
fc = test.file_coverage
|
210
|
-
cc = test.code_coverage
|
211
|
-
hash['coverage'] = {}
|
212
|
-
hash['coverage']['file'] = fc if fc
|
213
|
-
hash['coverage']['code'] = cc if cc
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
#
|
218
|
-
def merge_time(hash)
|
219
|
-
hash['time'] = Time.now - @start_time
|
220
|
-
end
|
221
|
-
|
222
|
-
end
|
223
|
-
|
224
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'test/reporters/abstract'
|
2
|
-
|
3
|
-
module Test::Reporters
|
4
|
-
|
5
|
-
# Simple Dot-Progress Reporter
|
6
|
-
class Dotprogress < Abstract
|
7
|
-
|
8
|
-
def pass(unit)
|
9
|
-
print "."
|
10
|
-
$stdout.flush
|
11
|
-
end
|
12
|
-
|
13
|
-
def fail(unit, exception)
|
14
|
-
print "F".ansi(:red)
|
15
|
-
$stdout.flush
|
16
|
-
end
|
17
|
-
|
18
|
-
def error(unit, exception)
|
19
|
-
print "E".ansi(:red, :bold)
|
20
|
-
$stdout.flush
|
21
|
-
end
|
22
|
-
|
23
|
-
def todo(unit, exception)
|
24
|
-
print "P".ansi(:yellow)
|
25
|
-
$stdout.flush
|
26
|
-
end
|
27
|
-
|
28
|
-
def omit(unit, exception)
|
29
|
-
print "O".ansi(:cyan)
|
30
|
-
$stdout.flush
|
31
|
-
end
|
32
|
-
|
33
|
-
def end_suite(suite)
|
34
|
-
puts; puts
|
35
|
-
puts timestamp
|
36
|
-
puts
|
37
|
-
|
38
|
-
if runner.verbose?
|
39
|
-
unless record[:omit].empty?
|
40
|
-
puts "OMISSIONS\n\n"
|
41
|
-
record[:omit].each do |test, exception|
|
42
|
-
puts " #{test}".ansi(:bold)
|
43
|
-
puts " #{exception}"
|
44
|
-
puts " #{file_and_line(exception)}"
|
45
|
-
#puts code(exception)
|
46
|
-
puts
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
unless record[:todo].empty?
|
52
|
-
puts "PENDING\n\n"
|
53
|
-
record[:todo].each do |test, exception|
|
54
|
-
puts " #{test}".ansi(:bold) unless test.to_s.empty?
|
55
|
-
puts " #{exception}"
|
56
|
-
puts " #{file_and_line(exception)}"
|
57
|
-
puts code(exception)
|
58
|
-
puts
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
unless record[:fail].empty?
|
63
|
-
puts "FAILURES\n\n"
|
64
|
-
record[:fail].each do |test_unit, exception|
|
65
|
-
puts " #{test_unit}".ansi(:bold)
|
66
|
-
puts " #{exception}"
|
67
|
-
puts " #{file_and_line(exception)}"
|
68
|
-
puts code(exception)
|
69
|
-
puts
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
unless record[:error].empty?
|
74
|
-
puts "ERRORS\n\n"
|
75
|
-
record[:error].each do |test_unit, exception|
|
76
|
-
puts " #{test_unit}".ansi(:bold)
|
77
|
-
puts " #{exception}"
|
78
|
-
puts " #{file_and_line(exception)}"
|
79
|
-
puts code(exception)
|
80
|
-
puts
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
puts tally
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
data/lib/test/reporters/html.rb
DELETED
@@ -1,155 +0,0 @@
|
|
1
|
-
require 'test/reporters/abstract'
|
2
|
-
|
3
|
-
module Test::Reporters
|
4
|
-
|
5
|
-
# HTML Test Reporter
|
6
|
-
#
|
7
|
-
# This reporter is rather simplistic and rough at this point --in need
|
8
|
-
# of some TLC. Also, it may move to the TAPOUT project rather than be
|
9
|
-
# a built-in Ruby-Test reporter.
|
10
|
-
#--
|
11
|
-
# TODO: Make this more like a microformat and add timer info.
|
12
|
-
#++
|
13
|
-
class Html < Abstract
|
14
|
-
|
15
|
-
#
|
16
|
-
def begin_suite(suite)
|
17
|
-
timer_reset
|
18
|
-
|
19
|
-
@html = []
|
20
|
-
@html << %[<html>]
|
21
|
-
@html << %[<head>]
|
22
|
-
@html << %[<title>Test Report</title>]
|
23
|
-
@html << %[ <style>]
|
24
|
-
@html << %[ html{ background: #fff; margin: 0; padding: 0; font-family: helvetica; }]
|
25
|
-
@html << %[ body{ margin: 0; padding: 0;}]
|
26
|
-
@html << %[ h3{color:#555;}]
|
27
|
-
@html << %[ #main{ margin: 0 auto; color: #110; width: 600px; ]
|
28
|
-
@html << %[ border-right: 1px solid #ddd; border-left: 1px solid #ddd; ]
|
29
|
-
@html << %[ padding: 10px 30px; width: 500px; } ]
|
30
|
-
@html << %[ .lemon{ color: gold; font-size: 22px; font-weight: bold; ]
|
31
|
-
@html << %[ font-family: courier; margin-bottom: -15px;}]
|
32
|
-
@html << %[ .tally{ font-weight: bold; margin-bottom: 10px; }]
|
33
|
-
@html << %[ .omit{ color: cyan; }]
|
34
|
-
@html << %[ .pass{ color: green; }]
|
35
|
-
@html << %[ .fail{ color: red; }]
|
36
|
-
@html << %[ .footer{ font-size: 0.7em; color: #666; margin: 20px 0; }]
|
37
|
-
@html << %[ </style>]
|
38
|
-
@html << %[</head>]
|
39
|
-
@html << %[<body>]
|
40
|
-
@html << %[<div id="main">]
|
41
|
-
@html << %[<div class="lemon">R U B Y - T E S T</div>]
|
42
|
-
@html << %[<h1>Test Report</h1>]
|
43
|
-
@body = []
|
44
|
-
end
|
45
|
-
|
46
|
-
#
|
47
|
-
def begin_case(tc)
|
48
|
-
lines = tc.to_s.split("\n")
|
49
|
-
title = lines.shift
|
50
|
-
@body << "<h2>"
|
51
|
-
@body << title
|
52
|
-
@body << "</h2>"
|
53
|
-
@body << "<div>"
|
54
|
-
@body << lines.join("<br/>")
|
55
|
-
@body << "</div>"
|
56
|
-
end
|
57
|
-
|
58
|
-
#
|
59
|
-
def begin_test(test)
|
60
|
-
if test.respond_to?(:topic)
|
61
|
-
topic = test.topic
|
62
|
-
if @topic != topic
|
63
|
-
@topic = topic
|
64
|
-
@body << "<h3>"
|
65
|
-
@body << "#{topic}"
|
66
|
-
@body << "</h3>"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
#
|
72
|
-
def pass(test)
|
73
|
-
@body << %[<li class="pass">]
|
74
|
-
@body << "%s %s" % ["PASS", test.to_s]
|
75
|
-
@body << %[</li>]
|
76
|
-
end
|
77
|
-
|
78
|
-
#
|
79
|
-
def fail(test, exception)
|
80
|
-
@body << %[<li class="fail">]
|
81
|
-
@body << "%s %s" % ["FAIL", test.to_s]
|
82
|
-
@body << "<pre>"
|
83
|
-
@body << " FAIL #{clean_backtrace(exception)[0]}"
|
84
|
-
@body << " #{exception}"
|
85
|
-
@body << "</pre>"
|
86
|
-
@body << %[</li>]
|
87
|
-
end
|
88
|
-
|
89
|
-
#
|
90
|
-
def error(test, exception)
|
91
|
-
@body << %[<li class="error">]
|
92
|
-
@body << "%s %s" % ["ERROR", test.to_s]
|
93
|
-
@body << "<pre>"
|
94
|
-
@body << " ERROR #{exception.class}"
|
95
|
-
@body << " #{exception}"
|
96
|
-
@body << " " + clean_backtrace(exception).join("\n ")
|
97
|
-
@body << "</pre>"
|
98
|
-
@body << %[</li>]
|
99
|
-
end
|
100
|
-
|
101
|
-
#
|
102
|
-
def todo(test, exception)
|
103
|
-
@body << %[<li class="pending">]
|
104
|
-
@body << "%s %s" % ["PENDING", test.to_s]
|
105
|
-
@body << %[</li>]
|
106
|
-
end
|
107
|
-
|
108
|
-
#
|
109
|
-
def omit(test, exception)
|
110
|
-
@body << %[<li class="omit">]
|
111
|
-
@body << "%s %s" % ["OMIT", test.to_s]
|
112
|
-
@body << %[</li>]
|
113
|
-
end
|
114
|
-
|
115
|
-
#
|
116
|
-
def end_suite(suite)
|
117
|
-
@html << ""
|
118
|
-
@html << %[<div class="tally">]
|
119
|
-
@html << tally
|
120
|
-
@html << %[</div>]
|
121
|
-
@html << ""
|
122
|
-
|
123
|
-
@body << ""
|
124
|
-
@body << %[<div class="footer">]
|
125
|
-
@body << %[Generated by <a href="http://rubyworks.github.com/test">Lemon</a>]
|
126
|
-
@body << %[on #{Time.now}.]
|
127
|
-
@body << %[</div>]
|
128
|
-
@body << ""
|
129
|
-
@body << %[</div>]
|
130
|
-
@body << %[</div>]
|
131
|
-
@body << ""
|
132
|
-
@body << %[</body>]
|
133
|
-
@body << %[</html>]
|
134
|
-
|
135
|
-
puts @html.join("\n")
|
136
|
-
puts @body.join("\n")
|
137
|
-
end
|
138
|
-
|
139
|
-
private
|
140
|
-
|
141
|
-
#
|
142
|
-
def timer
|
143
|
-
secs = Time.now - @time
|
144
|
-
@time = Time.now
|
145
|
-
return "%0.5fs" % [secs.to_s]
|
146
|
-
end
|
147
|
-
|
148
|
-
#
|
149
|
-
def timer_reset
|
150
|
-
@time = Time.now
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
|
-
end
|