oktest 1.3.1 → 1.5.0

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