oktest 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +42 -5
- data/Rakefile.rb +1 -1
- data/lib/oktest.rb +32 -9
- data/oktest.gemspec +3 -3
- data/test/assertion_test.rb +229 -227
- data/test/filter_test.rb +122 -120
- data/test/fixture_test.rb +33 -32
- data/test/generator_test.rb +20 -19
- data/test/helper_test.rb +280 -274
- data/test/init.rb +44 -0
- data/test/mainapp_test.rb +194 -190
- data/test/matcher_test.rb +156 -126
- data/test/misc_test.rb +31 -30
- data/test/nanot.rb +307 -0
- data/test/node_test.rb +296 -252
- data/test/reporter_test.rb +249 -208
- data/test/runner_test.rb +101 -100
- data/test/util_test.rb +196 -193
- data/test/utilhelper_test.rb +35 -38
- data/test/visitor_test.rb +54 -50
- metadata +10 -10
- data/test/initialize.rb +0 -22
- data/test/tc.rb +0 -128
- /data/test/{run_all.rb → all.rb} +0 -0
data/test/reporter_test.rb
CHANGED
@@ -2,16 +2,90 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
###
|
5
|
-
### $Release: 1.
|
5
|
+
### $Release: 1.5.0 $
|
6
6
|
### $Copyright: copyright(c) 2011-2024 kuwata-lab.com all rights reserved $
|
7
7
|
### $License: MIT License $
|
8
8
|
###
|
9
9
|
|
10
|
-
require_relative './
|
10
|
+
require_relative './init'
|
11
11
|
|
12
12
|
|
13
13
|
module ReporterTestHelper
|
14
14
|
|
15
|
+
INPUT_7 = <<'END'
|
16
|
+
require 'oktest'
|
17
|
+
|
18
|
+
Oktest.scope do
|
19
|
+
|
20
|
+
topic "Parent" do
|
21
|
+
|
22
|
+
topic "Child1" do
|
23
|
+
spec "1+1 should be 2" do
|
24
|
+
ok {1+1} == 2
|
25
|
+
end
|
26
|
+
spec "1-1 should be 0" do
|
27
|
+
ok {1-1} == 0
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
topic "Child2" do
|
32
|
+
spec "1*1 should be 1" do
|
33
|
+
ok {1*1} == 2
|
34
|
+
end
|
35
|
+
spec "1/1 should be 1" do
|
36
|
+
ok {1/0} == 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
topic "Child3" do
|
41
|
+
spec "skip example" do
|
42
|
+
skip_when true, "a certain condition"
|
43
|
+
end
|
44
|
+
spec "todo example"
|
45
|
+
end
|
46
|
+
|
47
|
+
case_when "x is negative" do
|
48
|
+
spec "x*x is positive." do
|
49
|
+
x = -2
|
50
|
+
ok {x*x} > 0
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
case_else do
|
55
|
+
spec "x*x is also positive." do
|
56
|
+
x = 2
|
57
|
+
ok {x*x} > 0
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
spec "last spec" do
|
62
|
+
ok {1+1} == 2
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
END
|
70
|
+
|
71
|
+
def default_test
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_subject(desc, &b)
|
75
|
+
@filename = "_test.tmp"
|
76
|
+
File.write(@filename, INPUT_7)
|
77
|
+
color_enabled = Oktest::Config.color_enabled
|
78
|
+
Oktest::Config.color_enabled = true
|
79
|
+
super
|
80
|
+
ensure
|
81
|
+
Oktest::Config.color_enabled = color_enabled
|
82
|
+
File.unlink(@filename) if @filename && File.exist?(@filename)
|
83
|
+
end
|
84
|
+
|
85
|
+
def run(*opts)
|
86
|
+
return capture_output! { Oktest::MainApp.main(opts) }
|
87
|
+
end
|
88
|
+
|
15
89
|
def edit_actual(output)
|
16
90
|
bkup = output.dup
|
17
91
|
output = output.gsub(/^.*\r/, '')
|
@@ -30,10 +104,11 @@ module ReporterTestHelper
|
|
30
104
|
end
|
31
105
|
|
32
106
|
|
33
|
-
class
|
34
|
-
|
107
|
+
class BaseReporter__Test
|
108
|
+
extend NanoTest
|
109
|
+
extend ReporterTestHelper
|
35
110
|
|
36
|
-
def new_topic_and_spec()
|
111
|
+
def self.new_topic_and_spec()
|
37
112
|
sc = Oktest::ScopeNode.new(nil, "foo.rb")
|
38
113
|
t1 = Oktest::TopicNode.new(sc, 'Example')
|
39
114
|
t2 = Oktest::TopicNode.new(t1, Array)
|
@@ -42,33 +117,33 @@ class BaseReporter_TC < TC
|
|
42
117
|
return t3, spec
|
43
118
|
end
|
44
119
|
|
45
|
-
|
46
|
-
|
120
|
+
test_target 'Oktest::BaseReporter#enter_all()' do
|
121
|
+
test_subject "[!pq3ia] initalizes counter by zero." do
|
47
122
|
r = Oktest::BaseReporter.new
|
48
123
|
c = r.instance_eval { @counts }
|
49
|
-
|
124
|
+
test_eq? c, {}
|
50
125
|
#
|
51
126
|
r.enter_all(nil)
|
52
127
|
c = r.instance_eval { @counts }
|
53
|
-
|
128
|
+
test_eq? c, {:PASS=>0, :FAIL=>0, :ERROR=>0, :SKIP=>0, :TODO=>0}
|
54
129
|
end
|
55
130
|
end
|
56
131
|
|
57
|
-
|
58
|
-
|
132
|
+
test_target 'Oktest::BaseReporter#exit_all()' do
|
133
|
+
test_subject "[!wjp7u] prints footer with elapsed time." do
|
59
134
|
r = Oktest::BaseReporter.new
|
60
135
|
r.enter_all(nil)
|
61
136
|
r.instance_eval { @start_at = Time.now - 7.0 }
|
62
|
-
sout, serr =
|
137
|
+
sout, serr = capture_output! do
|
63
138
|
r.exit_all(nil)
|
64
139
|
end
|
65
|
-
|
66
|
-
|
140
|
+
test_eq? sout, "## total:0 (pass:0, fail:0, error:0, skip:0, todo:0) in 7.00s\n"
|
141
|
+
test_eq? serr, ""
|
67
142
|
end
|
68
143
|
end
|
69
144
|
|
70
|
-
|
71
|
-
|
145
|
+
test_target 'Oktest::BaseReporter#exit_spec()' do
|
146
|
+
test_subject "[!r6yge] increments counter according to status." do
|
72
147
|
begin; 1/0
|
73
148
|
rescue => exc
|
74
149
|
end
|
@@ -77,21 +152,21 @@ class BaseReporter_TC < TC
|
|
77
152
|
topic1, spec1 = new_topic_and_spec()
|
78
153
|
#
|
79
154
|
r.exit_spec(spec1, 1, :PASS, nil, topic1)
|
80
|
-
|
155
|
+
test_eq? r.counts, {:PASS=>1, :FAIL=>0, :ERROR=>0, :SKIP=>0, :TODO=>0}
|
81
156
|
#
|
82
157
|
r.exit_spec(spec1, 1, :FAIL, exc, topic1)
|
83
|
-
|
158
|
+
test_eq? r.counts, {:PASS=>1, :FAIL=>1, :ERROR=>0, :SKIP=>0, :TODO=>0}
|
84
159
|
#
|
85
160
|
r.exit_spec(spec1, 1, :ERROR, exc, topic1)
|
86
|
-
|
161
|
+
test_eq? r.counts, {:PASS=>1, :FAIL=>1, :ERROR=>1, :SKIP=>0, :TODO=>0}
|
87
162
|
#
|
88
163
|
r.exit_spec(spec1, 1, :SKIP, nil, topic1)
|
89
|
-
|
164
|
+
test_eq? r.counts, {:PASS=>1, :FAIL=>1, :ERROR=>1, :SKIP=>1, :TODO=>0}
|
90
165
|
#
|
91
166
|
r.exit_spec(spec1, 1, :TODO, nil, topic1)
|
92
|
-
|
167
|
+
test_eq? r.counts, {:PASS=>1, :FAIL=>1, :ERROR=>1, :SKIP=>1, :TODO=>1}
|
93
168
|
end
|
94
|
-
|
169
|
+
test_subject "[!nupb4] keeps exception info when status is FAIL or ERROR." do
|
95
170
|
begin; 1/0
|
96
171
|
rescue => exc
|
97
172
|
end
|
@@ -107,61 +182,61 @@ class BaseReporter_TC < TC
|
|
107
182
|
r.exit_spec(spec1, 1, :TODO, nil, topic1)
|
108
183
|
#
|
109
184
|
exceptions = r.instance_variable_get('@exceptions')
|
110
|
-
|
111
|
-
|
112
|
-
|
185
|
+
test_eq? exceptions.length, 2
|
186
|
+
test_eq? exceptions[0][1], :FAIL
|
187
|
+
test_eq? exceptions[1][1], :ERROR
|
113
188
|
end
|
114
189
|
end
|
115
190
|
|
116
|
-
|
117
|
-
|
191
|
+
test_target 'Oktest::BaseReporter#reset_counts()' do
|
192
|
+
test_subject "[!oc29s] clears counters to zero." do
|
118
193
|
r = Oktest::BaseReporter.new
|
119
194
|
r.instance_eval do
|
120
195
|
@counts = {:PASS=>5, :FAIL=>4, :ERROR=>3, :SKIP=>2, :TODO=>1}
|
121
196
|
end
|
122
197
|
r.__send__(:reset_counts)
|
123
|
-
|
198
|
+
test_eq? r.instance_variable_get('@counts'), {:PASS=>0, :FAIL=>0, :ERROR=>0, :SKIP=>0, :TODO=>0}
|
124
199
|
end
|
125
200
|
end
|
126
201
|
|
127
|
-
|
128
|
-
def error_msg()
|
202
|
+
test_target 'Oktest::BaseReporter#print_exc_message()' do
|
203
|
+
def self.error_msg()
|
129
204
|
return ("something failed\n"\
|
130
205
|
" expect: foo\n"\
|
131
206
|
" actual: bar\n")
|
132
207
|
end
|
133
|
-
|
208
|
+
test_subject "[!hr7jn] prints detail of assertion failed." do
|
134
209
|
errmsg = error_msg()
|
135
210
|
exc = Oktest::AssertionFailed.new(errmsg)
|
136
211
|
r = Oktest::BaseReporter.new
|
137
|
-
sout, serr =
|
212
|
+
sout, serr = capture_output! do
|
138
213
|
r.__send__(:print_exc_message, exc, :FAIL)
|
139
214
|
end
|
140
|
-
|
215
|
+
test_eq? sout, plain2colored(<<END)
|
141
216
|
<R>something failed</R>
|
142
217
|
expect: foo
|
143
218
|
actual: bar
|
144
219
|
END
|
145
|
-
|
220
|
+
test_eq? serr, ""
|
146
221
|
end
|
147
|
-
|
222
|
+
test_subject "[!pd41p] prints detail of exception." do
|
148
223
|
errmsg = error_msg()
|
149
224
|
exc = Oktest::AssertionFailed.new(errmsg)
|
150
225
|
r = Oktest::BaseReporter.new
|
151
|
-
sout, serr =
|
226
|
+
sout, serr = capture_output! do
|
152
227
|
r.__send__(:print_exc_message, exc, :ERROR)
|
153
228
|
end
|
154
|
-
|
229
|
+
test_eq? sout, plain2colored(<<END)
|
155
230
|
<R>Oktest::AssertionFailed: something failed</R>
|
156
231
|
expect: foo
|
157
232
|
actual: bar
|
158
233
|
END
|
159
|
-
|
234
|
+
test_eq? serr, ""
|
160
235
|
end
|
161
236
|
end
|
162
237
|
|
163
|
-
|
164
|
-
|
238
|
+
test_target 'Oktest::BaseReporter#print_exc_backtrace()' do
|
239
|
+
test_subject "[!ocxy6] prints backtrace info and lines in file." do
|
165
240
|
begin
|
166
241
|
if true
|
167
242
|
if true
|
@@ -173,47 +248,46 @@ END
|
|
173
248
|
end
|
174
249
|
#
|
175
250
|
expected = <<END
|
176
|
-
test/reporter_test.rb:#{lineno}:in `block (2 levels) in <
|
251
|
+
test/reporter_test.rb:#{lineno}:in `block (2 levels) in <main>'
|
177
252
|
raise Oktest::AssertionFailed, "something failed."
|
178
253
|
END
|
179
254
|
#
|
180
255
|
r = Oktest::BaseReporter.new
|
181
|
-
sout, serr =
|
256
|
+
sout, serr = capture_output! do
|
182
257
|
r.__send__(:print_exc_backtrace, exc, :FAIL)
|
183
258
|
end
|
184
|
-
|
185
|
-
|
259
|
+
sout = sout.sub(/ in <.*?>/, " in <main>")
|
260
|
+
test_ok? sout.start_with?(expected), msg: "traceback not matched"
|
261
|
+
test_eq? serr, ""
|
186
262
|
end
|
187
|
-
|
188
|
-
|
263
|
+
test_subject "[!jbped] skips backtrace of oktest.rb when assertion failure." do
|
264
|
+
exc = test_exception? Oktest::AssertionFailed do
|
189
265
|
eval "raise Oktest::AssertionFailed, 'dummie'", binding(), "lib/oktest.rb", 100
|
190
|
-
rescue Oktest::AssertionFailed => exc
|
191
266
|
end
|
192
267
|
#
|
193
268
|
status = :FAIL
|
194
|
-
sout, serr =
|
269
|
+
sout, serr = capture_output! do
|
195
270
|
Oktest::BaseReporter.new.__send__(:print_exc_backtrace, exc, status)
|
196
271
|
end
|
197
|
-
|
198
|
-
|
272
|
+
test_ok? sout !~ /lib\/oktest\.rb:/, msg: "should skip but not"
|
273
|
+
test_eq? serr, ""
|
199
274
|
end
|
200
|
-
|
201
|
-
|
275
|
+
test_subject "[!cfkzg] don't skip first backtrace entry when error." do
|
276
|
+
exc = test_exception? Oktest::AssertionFailed do
|
202
277
|
eval "raise Oktest::AssertionFailed, 'dummie'", binding(), "lib/oktest.rb", 100
|
203
|
-
rescue Oktest::AssertionFailed => exc
|
204
278
|
end
|
205
279
|
#
|
206
280
|
status = :ERROR
|
207
|
-
sout, serr =
|
281
|
+
sout, serr = capture_output! do
|
208
282
|
Oktest::BaseReporter.new.__send__(:print_exc_backtrace, exc, status)
|
209
283
|
end
|
210
|
-
|
211
|
-
|
284
|
+
test_match? sout, /lib\/oktest\.rb:100/, msg: "should not skip but does"
|
285
|
+
test_eq? serr, ""
|
212
286
|
end
|
213
287
|
end
|
214
288
|
|
215
|
-
|
216
|
-
|
289
|
+
test_target 'Oktest::BaseReporter#print_exc()' do
|
290
|
+
test_subject "[!5ara3] prints exception info of assertion failure." do
|
217
291
|
begin
|
218
292
|
if true
|
219
293
|
lineno = __LINE__ + 1
|
@@ -224,19 +298,20 @@ END
|
|
224
298
|
#
|
225
299
|
expected = <<END
|
226
300
|
[<R>Fail</R>] <b>Example > Array > When some condition > 1+1 shoould be 2.</b>
|
227
|
-
#{__FILE__}:#{lineno}:in `block (2 levels) in <
|
301
|
+
#{__FILE__}:#{lineno}:in `block (2 levels) in <main>'
|
228
302
|
raise Oktest::AssertionFailed, 'dummie:43201'
|
229
303
|
END
|
230
304
|
#
|
231
305
|
topic1, spec1 = new_topic_and_spec()
|
232
306
|
status = :FAIL
|
233
|
-
sout, serr =
|
307
|
+
sout, serr = capture_output! do
|
234
308
|
Oktest::BaseReporter.new.__send__(:print_exc, spec1, status, exc, topic1)
|
235
309
|
end
|
236
|
-
|
237
|
-
|
310
|
+
sout = sout.gsub(/ in <.*?>/, " in <main>")
|
311
|
+
test_ok? sout.start_with?(plain2colored(expected)), msg: "not matched"
|
312
|
+
test_eq? serr, ""
|
238
313
|
end
|
239
|
-
|
314
|
+
test_subject "[!pcpy4] prints exception info of error." do
|
240
315
|
begin
|
241
316
|
if true
|
242
317
|
lineno = __LINE__ + 1
|
@@ -253,16 +328,16 @@ END
|
|
253
328
|
#
|
254
329
|
topic1, spec1 = new_topic_and_spec()
|
255
330
|
status = :ERROR
|
256
|
-
sout, serr =
|
331
|
+
sout, serr = capture_output! do
|
257
332
|
Oktest::BaseReporter.new.__send__(:print_exc, spec1, status, exc, topic1)
|
258
333
|
end
|
259
|
-
|
260
|
-
|
334
|
+
test_ok? sout.start_with?(plain2colored(expected)), msg: "not matched"
|
335
|
+
test_eq? serr, ""
|
261
336
|
end
|
262
337
|
end
|
263
338
|
|
264
|
-
|
265
|
-
def new_reporter_with_exceptions(exc)
|
339
|
+
test_target 'Oktest::BaseReporter#print_exception()' do
|
340
|
+
def self.new_reporter_with_exceptions(exc)
|
266
341
|
topic1, spec1 = new_topic_and_spec()
|
267
342
|
r = Oktest::BaseReporter.new
|
268
343
|
r.instance_eval do
|
@@ -275,7 +350,7 @@ END
|
|
275
350
|
end
|
276
351
|
return r
|
277
352
|
end
|
278
|
-
|
353
|
+
test_subject "[!fbr16] prints assertion failures and excerptions with separator." do
|
279
354
|
begin
|
280
355
|
raise Oktest::AssertionFailed, 'dummie'
|
281
356
|
rescue Oktest::AssertionFailed => exc
|
@@ -285,31 +360,31 @@ END
|
|
285
360
|
expected1 = "[<R>Fail</R>] <b>Example > Array > When some condition > 1+1 shoould be 2.</b>\n"
|
286
361
|
expected2 = "[<E>ERROR</E>] <b>Example > Array > When some condition > 1+1 shoould be 2.</b>\n"
|
287
362
|
#
|
288
|
-
sout, serr =
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
363
|
+
sout, serr = capture_output! { r.__send__(:print_exceptions) }
|
364
|
+
test_ok? sout.start_with?(sep + plain2colored(expected1)), msg: "not matched"
|
365
|
+
test_ok? sout.include?(sep + plain2colored(expected2)), msg: "not matched"
|
366
|
+
test_ok? sout.end_with?(sep), msg: "not matched"
|
367
|
+
test_eq? serr, ""
|
293
368
|
end
|
294
|
-
|
369
|
+
test_subject "[!2s9r2] prints nothing when no fails nor errors." do
|
295
370
|
r = new_reporter_with_exceptions(nil)
|
296
|
-
sout, serr =
|
297
|
-
|
298
|
-
|
371
|
+
sout, serr = capture_output! { r.__send__(:print_exceptions) }
|
372
|
+
test_eq? sout, ""
|
373
|
+
test_eq? serr, ""
|
299
374
|
end
|
300
|
-
|
375
|
+
test_subject "[!ueeih] clears exceptions." do
|
301
376
|
begin 1/0
|
302
377
|
rescue => exc
|
303
378
|
end
|
304
379
|
r = new_reporter_with_exceptions(exc)
|
305
|
-
|
306
|
-
sout, serr =
|
307
|
-
|
380
|
+
test_ok? ! r.instance_variable_get('@exceptions').empty?
|
381
|
+
sout, serr = capture_output! { r.__send__(:print_exceptions) }
|
382
|
+
test_ok? r.instance_variable_get('@exceptions').empty?
|
308
383
|
end
|
309
384
|
end
|
310
385
|
|
311
|
-
|
312
|
-
def new_footer(elapsed=0.5)
|
386
|
+
test_target 'Oktest::BaseReporter#footer()' do
|
387
|
+
def self.new_footer(elapsed=0.5)
|
313
388
|
r = Oktest::BaseReporter.new
|
314
389
|
r.enter_all(nil)
|
315
390
|
r.instance_eval do
|
@@ -318,115 +393,58 @@ END
|
|
318
393
|
return r.__send__(:footer, elapsed)
|
319
394
|
end
|
320
395
|
|
321
|
-
|
396
|
+
test_subject "[!iy4uo] calculates total count of specs." do
|
322
397
|
ft = new_footer()
|
323
|
-
|
398
|
+
test_match? ft, /total:15 /, msg: "failed to calculate total counts."
|
324
399
|
end
|
325
400
|
|
326
|
-
|
401
|
+
test_subject "[!2nnma] includes count of each status." do
|
327
402
|
ft = new_footer()
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
403
|
+
test_match? ft, /pass:5\b/ , msg: "failed to count passed status."
|
404
|
+
test_match? ft, /fail:4\b/ , msg: "failed to count failed status."
|
405
|
+
test_match? ft, /error:3\b/ , msg: "failed to count error status."
|
406
|
+
test_match? ft, /skip:2\b/ , msg: "failed to count skipped status."
|
407
|
+
test_match? ft, /todo:1\b/ , msg: "failed to count todo status."
|
333
408
|
end
|
334
409
|
|
335
|
-
|
410
|
+
test_subject "[!fp57l] includes elapsed time." do
|
336
411
|
ft = new_footer()
|
337
|
-
|
412
|
+
test_match? ft, / in 0.500s$/, msg: "failed to embed elapsed time."
|
338
413
|
end
|
339
414
|
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
415
|
+
test_subject "[!r5y02] elapsed time format is adjusted along to time length." do
|
416
|
+
test_match? new_footer( 0.5), / in 0.500s$/ , msg: "failed to embed elapsed time."
|
417
|
+
test_match? new_footer( 6.5), / in 6.50s$/ , msg: "failed to embed elapsed time."
|
418
|
+
test_match? new_footer( 17.5), / in 17.5s$/ , msg: "failed to embed elapsed time."
|
419
|
+
test_match? new_footer( 61.5), / in 1:01.5s$/ , msg: "failed to embed elapsed time."
|
420
|
+
test_match? new_footer( 610.5), / in 10:10.5s$/ , msg: "failed to embed elapsed time."
|
421
|
+
test_match? new_footer( 3600.5), / in 1:00:00.5s$/ , msg: "failed to embed elapsed time."
|
422
|
+
test_match? new_footer( 36000.5), / in 10:00:00.5s$/ , msg: "failed to embed elapsed time."
|
423
|
+
test_match? new_footer(360000.5), / in 100:00:00.5s$/ , msg: "failed to embed elapsed time."
|
349
424
|
end
|
350
425
|
|
351
|
-
|
426
|
+
test_subject "[!gx0n2] builds footer line." do
|
352
427
|
expected = "## total:15 (<C>pass:5</C>, <R>fail:4</R>, <E>error:3</E>, <Y>skip:2</Y>, <Y>todo:1</Y>) in 0.500s"
|
353
|
-
|
428
|
+
test_eq? new_footer(), plain2colored(expected)
|
354
429
|
end
|
355
430
|
end
|
356
431
|
|
357
|
-
|
358
|
-
|
432
|
+
test_target 'Oktest::BaseReporter#spec_path()' do
|
433
|
+
test_subject "[!dv6fu] returns path string from top topic to current spec." do
|
359
434
|
sc = Oktest::ScopeNode.new(nil, "foo.rb")
|
360
435
|
t1 = Oktest::TopicNode.new(sc, 'Example')
|
361
436
|
t2 = Oktest::TopicNode.new(t1, Array)
|
362
437
|
t3 = Oktest::TopicNode.new(t2, 'When some condition')
|
363
438
|
s1 = Oktest::SpecLeaf.new(t3, "1+1 shoould be 2.") { nil }
|
364
439
|
path = Oktest::BaseReporter.new.__send__(:spec_path, s1, t3)
|
365
|
-
|
440
|
+
test_eq? path, "Example > Array > When some condition > 1+1 shoould be 2."
|
366
441
|
end
|
367
442
|
end
|
368
443
|
|
369
444
|
end
|
370
445
|
|
371
446
|
|
372
|
-
|
373
|
-
include ReporterTestHelper
|
374
|
-
|
375
|
-
INPUT = <<'END'
|
376
|
-
require 'oktest'
|
377
|
-
|
378
|
-
Oktest.scope do
|
379
|
-
|
380
|
-
topic "Parent" do
|
381
|
-
|
382
|
-
topic "Child1" do
|
383
|
-
spec "1+1 should be 2" do
|
384
|
-
ok {1+1} == 2
|
385
|
-
end
|
386
|
-
spec "1-1 should be 0" do
|
387
|
-
ok {1-1} == 0
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
topic "Child2" do
|
392
|
-
spec "1*1 should be 1" do
|
393
|
-
ok {1*1} == 2
|
394
|
-
end
|
395
|
-
spec "1/1 should be 1" do
|
396
|
-
ok {1/0} == 1
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
topic "Child3" do
|
401
|
-
spec "skip example" do
|
402
|
-
skip_when true, "a certain condition"
|
403
|
-
end
|
404
|
-
spec "todo example"
|
405
|
-
end
|
406
|
-
|
407
|
-
case_when "x is negative" do
|
408
|
-
spec "x*x is positive." do
|
409
|
-
x = -2
|
410
|
-
ok {x*x} > 0
|
411
|
-
end
|
412
|
-
end
|
413
|
-
|
414
|
-
case_else do
|
415
|
-
spec "x*x is also positive." do
|
416
|
-
x = 2
|
417
|
-
ok {x*x} > 0
|
418
|
-
end
|
419
|
-
end
|
420
|
-
|
421
|
-
spec "last spec" do
|
422
|
-
ok {1+1} == 2
|
423
|
-
end
|
424
|
-
|
425
|
-
end
|
426
|
-
|
427
|
-
end
|
428
|
-
|
429
|
-
END
|
447
|
+
module ReporterOutput
|
430
448
|
|
431
449
|
ERROR_PART = <<'END'
|
432
450
|
----------------------------------------------------------------------
|
@@ -498,37 +516,22 @@ END
|
|
498
516
|
END
|
499
517
|
QUIET_OUTPUT = QUIET_PART + ERROR_PART + FOOTER
|
500
518
|
|
501
|
-
def default_test
|
502
|
-
end
|
503
|
-
|
504
|
-
def setup
|
505
|
-
@filename = "_test.tmp"
|
506
|
-
File.write(@filename, INPUT)
|
507
|
-
@_color_enabled = Oktest::Config.color_enabled
|
508
|
-
Oktest::Config.color_enabled = true
|
509
|
-
end
|
510
|
-
|
511
|
-
def teardown
|
512
|
-
Oktest::Config.color_enabled = @_color_enabled
|
513
|
-
File.unlink(@filename) if @filename && File.exist?(@filename)
|
514
|
-
end
|
515
|
-
|
516
|
-
def run(*opts)
|
517
|
-
return capture { Oktest::MainApp.main(opts) }
|
518
|
-
end
|
519
|
-
|
520
519
|
end
|
521
520
|
|
521
|
+
include ReporterOutput
|
522
|
+
|
522
523
|
|
523
|
-
class
|
524
|
+
class VerboseReporter__Test
|
525
|
+
extend NanoTest
|
526
|
+
extend ReporterTestHelper
|
524
527
|
|
525
|
-
|
528
|
+
test_subject "[!6o9nw] reports topic name and spec desc." do
|
526
529
|
sout, serr = run("-sv", @filename)
|
527
|
-
|
528
|
-
|
530
|
+
test_eq? edit_actual(sout), edit_expected(VERBOSE_OUTPUT)
|
531
|
+
test_eq? serr, ""
|
529
532
|
end
|
530
533
|
|
531
|
-
|
534
|
+
test_subject "[!ibdu7] reports errors even when no topics." do
|
532
535
|
input = <<'END'
|
533
536
|
require 'oktest'
|
534
537
|
Oktest.scope do
|
@@ -555,52 +558,90 @@ END
|
|
555
558
|
END
|
556
559
|
#
|
557
560
|
sout, serr = run("-sv", @filename)
|
558
|
-
|
559
|
-
|
561
|
+
test_eq? edit_actual(sout), edit_expected(expected)
|
562
|
+
test_eq? serr, ""
|
560
563
|
end
|
561
564
|
|
562
565
|
end
|
563
566
|
|
564
567
|
|
565
|
-
class
|
568
|
+
class SimpleReporter__Test
|
569
|
+
extend NanoTest
|
570
|
+
extend ReporterTestHelper
|
571
|
+
extend ReporterOutput
|
566
572
|
|
567
|
-
|
573
|
+
test_subject "[!jxa1b] reports topics and progress." do
|
568
574
|
sout, serr = run("-ss", @filename)
|
569
|
-
|
570
|
-
|
575
|
+
test_eq? edit_actual(sout), edit_expected(SIMPLE_OUTPUT)
|
576
|
+
test_eq? serr, ""
|
571
577
|
end
|
572
578
|
|
573
579
|
end
|
574
580
|
|
575
581
|
|
576
|
-
class
|
582
|
+
class CompactReporter__Test
|
583
|
+
extend NanoTest
|
584
|
+
extend ReporterTestHelper
|
585
|
+
extend ReporterOutput
|
577
586
|
|
578
|
-
|
587
|
+
test_subject "[!xfd5o] reports filename." do
|
579
588
|
sout, serr = run("-sc", @filename)
|
580
|
-
|
581
|
-
|
589
|
+
test_eq? edit_actual(sout), edit_expected(COMPACT_OUTPUT)
|
590
|
+
test_eq? serr, ""
|
582
591
|
end
|
583
592
|
|
584
593
|
end
|
585
594
|
|
586
595
|
|
587
|
-
class
|
596
|
+
class PlainReporter__Test
|
597
|
+
extend NanoTest
|
598
|
+
extend ReporterTestHelper
|
599
|
+
extend ReporterOutput
|
588
600
|
|
589
|
-
|
601
|
+
test_subject "[!w842j] reports progress." do
|
590
602
|
sout, serr = run("-sp", @filename)
|
591
|
-
|
592
|
-
|
603
|
+
test_eq? edit_actual(sout), edit_expected(PLAIN_OUTPUT)
|
604
|
+
test_eq? serr, ""
|
593
605
|
end
|
594
606
|
|
595
607
|
end
|
596
608
|
|
597
609
|
|
598
|
-
class
|
610
|
+
class QuietReporter__Test
|
611
|
+
extend NanoTest
|
612
|
+
extend ReporterTestHelper
|
613
|
+
extend ReporterOutput
|
599
614
|
|
600
|
-
|
615
|
+
test_subject "[!0z4im] reports all statuses except PASS status." do
|
601
616
|
sout, serr = run("-sq", @filename)
|
602
|
-
|
603
|
-
|
617
|
+
test_eq? edit_actual(sout), edit_expected(QUIET_OUTPUT)
|
618
|
+
test_eq? serr, ""
|
619
|
+
end
|
620
|
+
|
621
|
+
end
|
622
|
+
|
623
|
+
|
624
|
+
class DefaultReprotingStyle__Test
|
625
|
+
extend NanoTest
|
626
|
+
extend ReporterTestHelper
|
627
|
+
extend ReporterOutput
|
628
|
+
|
629
|
+
test_target 'Oktest.DEFAULT_REPORTING_STYLE=()' do
|
630
|
+
test_subject "[!lbufd] raises error if unknown style specified." do
|
631
|
+
exc = test_exception? ArgumentError do
|
632
|
+
Oktest.DEFAULT_REPORTING_STYLE = "foo"
|
633
|
+
end
|
634
|
+
test_eq? exc.message, "foo: Unknown reporting style."
|
635
|
+
end
|
636
|
+
test_subject "[!dsbmo] changes value of default reporting style." do
|
637
|
+
test_eq? Oktest::DEFAULT_REPORTING_STYLE, "verbose"
|
638
|
+
begin
|
639
|
+
Oktest.DEFAULT_REPORTING_STYLE = "plain"
|
640
|
+
test_eq? Oktest::DEFAULT_REPORTING_STYLE, "plain"
|
641
|
+
ensure
|
642
|
+
Oktest.DEFAULT_REPORTING_STYLE = "verbose"
|
643
|
+
end
|
644
|
+
end
|
604
645
|
end
|
605
646
|
|
606
647
|
end
|