oktest 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/misc_test.rb ADDED
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ ###
4
+ ### $Release: 1.0.0 $
5
+ ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
6
+ ### $License: MIT License $
7
+ ###
8
+
9
+ require_relative './initialize'
10
+
11
+
12
+ class Misc_TC < TC
13
+
14
+ def setup()
15
+ @_auto_run = Oktest::Config.auto_run
16
+ Oktest::Config.auto_run = true
17
+ end
18
+
19
+ def teardown()
20
+ Oktest::Config.auto_run = @_auto_run
21
+ Oktest::THE_GLOBAL_SCOPE.clear_children()
22
+ end
23
+
24
+ describe 'Oktest.auto_run?()' do
25
+ it "[!7vm4d] returns false if error raised when loading test scripts." do
26
+ Oktest.scope do
27
+ end
28
+ begin
29
+ 1/0
30
+ rescue => exc
31
+ assert_eq Oktest.auto_run?, false
32
+ end
33
+ assert exc != nil, "exception not raised"
34
+ end
35
+ it "[!oae85] returns true if exit() called." do
36
+ Oktest.scope do
37
+ end
38
+ #
39
+ begin
40
+ exit(0)
41
+ rescue SystemExit => exc
42
+ assert_eq Oktest.auto_run?, true
43
+ end
44
+ assert exc != nil, "exception not raised"
45
+ end
46
+ it "[!rg5aw] returns false if Oktest.scope() never been called." do
47
+ assert_eq Oktest::THE_GLOBAL_SCOPE.has_child?, false
48
+ assert_eq Oktest.auto_run?, false
49
+ end
50
+ it "[!0j3ek] returns true if Config.auto_run is enabled." do
51
+ Oktest.scope do
52
+ end
53
+ bkup = Oktest::Config.auto_run
54
+ begin
55
+ Oktest::Config.auto_run = true
56
+ assert_eq Oktest.auto_run?, true
57
+ Oktest::Config.auto_run = false
58
+ assert_eq Oktest.auto_run?, false
59
+ ensure
60
+ Oktest::Config.auto_run = bkup
61
+ end
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+
68
+ class Color_TC < TC
69
+
70
+ describe '.status()' do
71
+ it "[!yev5y] returns string containing color escape sequence." do
72
+ assert_eq Oktest::Color.status(:PASS , "Pass" ), "\e[1;34mPass\e[0m"
73
+ assert_eq Oktest::Color.status(:FAIL , "Fail" ), "\e[1;31mFail\e[0m"
74
+ assert_eq Oktest::Color.status(:ERROR, "Error"), "\e[1;31mError\e[0m"
75
+ assert_eq Oktest::Color.status(:SKIP , "Skip" ), "\e[1;33mSkip\e[0m"
76
+ assert_eq Oktest::Color.status(:TODO , "Todo" ), "\e[1;33mTodo\e[0m"
77
+ end
78
+ end
79
+
80
+ end
data/test/node_test.rb ADDED
@@ -0,0 +1,669 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ ###
4
+ ### $Release: 1.0.0 $
5
+ ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
6
+ ### $License: MIT License $
7
+ ###
8
+
9
+ require_relative './initialize'
10
+
11
+
12
+ class Item_TC < TC
13
+
14
+ describe '#accept_visitor()' do
15
+ it "[!b0e20] raises NotImplementedError." do
16
+ assert_exc(NotImplementedError, "Oktest::Item#accept_visitor(): not implemented yet.") do
17
+ Oktest::Item.new().accept_visitor(nil)
18
+ end
19
+ end
20
+ end
21
+
22
+ describe '#unlink_parent()' do
23
+ it "[!5a0i9] raises NotImplementedError." do
24
+ assert_exc(NotImplementedError, "Oktest::Item#unlink_parent(): not implemented yet.") do
25
+ Oktest::Item.new().unlink_parent()
26
+ end
27
+ end
28
+ end
29
+
30
+ describe '#_repr()' do
31
+ it "[!qi1af] raises NotImplementedError." do
32
+ assert_exc(NotImplementedError, "Oktest::Item#_repr(): not implemented yet.") do
33
+ Oktest::Item.new()._repr(0)
34
+ end
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+
41
+ class Node_TC < TC
42
+
43
+ def setup()
44
+ end
45
+
46
+ def teardown()
47
+ Oktest::THE_GLOBAL_SCOPE.clear_children()
48
+ end
49
+
50
+
51
+ describe '#add_child()' do
52
+ it "[!1fyk9] keeps children." do
53
+ p = Oktest::Node.new(nil)
54
+ c = Oktest::Node.new(nil)
55
+ p.add_child(c)
56
+ assert_eq p.instance_eval('@children'), [c]
57
+ end
58
+ it "[!w5r6l] returns self." do
59
+ p = Oktest::Node.new(nil)
60
+ c = Oktest::Node.new(nil)
61
+ ret = p.add_child(c)
62
+ assert ret.equal?(p), "should be same"
63
+ end
64
+ end
65
+
66
+ describe '#has_child?' do
67
+ it "[!xb30d] return true when no children, else false." do
68
+ p = Oktest::Node.new(nil)
69
+ c = Oktest::Node.new(nil)
70
+ p.add_child(c)
71
+ assert_eq p.has_child?, true
72
+ assert_eq c.has_child?, false
73
+ end
74
+ end
75
+
76
+ describe '#each_child()' do
77
+ it "[!osoep] returns enumerator if block not given." do
78
+ node = Oktest::Node.new(nil)
79
+ assert_eq node.each_child.class, Enumerator
80
+ end
81
+ it "[!pve8m] yields block for each child." do
82
+ p = Oktest::Node.new(nil)
83
+ c1 = Oktest::Node.new(p)
84
+ c2 = Oktest::Node.new(p)
85
+ arr = []
86
+ p.each_child {|x| arr << x }
87
+ assert_eq arr.length, 2
88
+ assert_eq arr[0], c1
89
+ assert_eq arr[1], c2
90
+ end
91
+ it "[!8z6un] returns nil." do
92
+ p = Oktest::Node.new(nil)
93
+ c1 = Oktest::Node.new(p)
94
+ c2 = Oktest::Node.new(p)
95
+ ret = p.each_child {|c| 123 }
96
+ assert_eq ret, nil
97
+ end
98
+ end
99
+
100
+ describe '#remove_child()' do
101
+ it "[!hsomo] removes child at index." do
102
+ p = Oktest::Node.new(nil)
103
+ c1 = Oktest::Node.new(p)
104
+ c2 = Oktest::Node.new(p)
105
+ p.remove_child_at(0)
106
+ children = p.each_child.to_a
107
+ assert_eq children.length, 1
108
+ assert_eq children[0], c2
109
+ end
110
+ it "[!hiz1b] returns removed child." do
111
+ p = Oktest::Node.new(nil)
112
+ c1 = Oktest::Node.new(p)
113
+ c2 = Oktest::Node.new(p)
114
+ ret = p.remove_child_at(0)
115
+ assert_eq ret, c1
116
+ end
117
+ it "[!7fhx1] unlinks reference between parent and child." do
118
+ p = Oktest::Node.new(nil)
119
+ c1 = Oktest::Node.new(p)
120
+ c2 = Oktest::Node.new(p)
121
+ p.remove_child_at(1)
122
+ assert_eq c2.parent, nil
123
+ assert_eq c1.parent, p
124
+ end
125
+ end
126
+
127
+ describe '#clear_children()' do
128
+ it "[!o8xfb] removes all children." do
129
+ p = Oktest::Node.new(nil)
130
+ p.add_child(Oktest::Node.new(nil))
131
+ p.add_child(Oktest::Node.new(nil))
132
+ assert_eq p.has_child?, true
133
+ p.clear_children()
134
+ assert_eq p.has_child?, false
135
+ end
136
+ it "[!cvaq1] return self." do
137
+ p = Oktest::Node.new(nil)
138
+ assert p.clear_children().equal?(p)
139
+ end
140
+ end
141
+
142
+ describe '#unlink_parent()' do
143
+ it "[!59m52] clears '@parent' instance variable." do
144
+ p = Oktest::Node.new(nil)
145
+ c = Oktest::Node.new(p)
146
+ assert_eq c.parent, p
147
+ c.unlink_parent()
148
+ assert_eq c.parent, nil
149
+ end
150
+ it "[!qksxv] returns parent object." do
151
+ p = Oktest::Node.new(nil)
152
+ c = Oktest::Node.new(p)
153
+ ret = c.unlink_parent()
154
+ assert_eq ret, p
155
+ end
156
+ end
157
+
158
+ describe '#run_block_in_context_class()' do
159
+ it "[!j9qdh] run block in context class." do
160
+ x = Oktest::Node.new(nil)
161
+ x.run_block_in_context_class { @_tmpvar = "<<00807>>" }
162
+ val = x.context_class.instance_variable_get('@_tmpvar')
163
+ assert_eq val, "<<00807>>"
164
+ end
165
+ end
166
+
167
+ describe '#new_context_object()' do
168
+ it "[!p271z] creates new context object." do
169
+ x = Oktest::Node.new(nil)
170
+ ctx = x.new_context_object()
171
+ assert_eq ctx.class, x.context_class
172
+ assert ctx.is_a?(Oktest::Context)
173
+ end
174
+ it "[!9hbxn] context object has 'ok()' method." do
175
+ x = Oktest::Node.new(nil)
176
+ ctx = x.new_context_object()
177
+ assert ctx.respond_to?(:ok)
178
+ assert ctx.respond_to?(:not_ok)
179
+ assert ctx.respond_to?(:skip_when)
180
+ assert ctx.respond_to?(:at_end)
181
+ end
182
+ end
183
+
184
+ describe '#register_fixture_block()' do
185
+ it "[!5ctsn] registers fixture name, block, and location." do
186
+ x = Oktest::Node.new(nil)
187
+ x.register_fixture_block(:foo, "file:123") {|a, b| "foobar" }
188
+ assert x.fixtures[:foo][0].is_a?(Proc), "proc object expected"
189
+ assert_eq x.fixtures[:foo][0].call(1, 2), "foobar"
190
+ assert_eq x.fixtures[:foo][1], [:a, :b]
191
+ assert_eq x.fixtures[:foo][2], "file:123"
192
+ #
193
+ x.register_fixture_block(:bar, "file:345") { "barbar" }
194
+ assert_eq x.fixtures[:bar][0].call(), "barbar"
195
+ assert_eq x.fixtures[:bar][1], nil
196
+ assert_eq x.fixtures[:bar][2], "file:345"
197
+ end
198
+ it "[!hfcvo] returns self." do
199
+ x = Oktest::Node.new(nil)
200
+ ret = x.register_fixture_block(:foo, "file:123") { "foobar" }
201
+ assert ret.equal?(x)
202
+ end
203
+ end
204
+
205
+ describe '#get_fixture_block()' do
206
+ it "[!f0105] returns fixture info." do
207
+ x = Oktest::Node.new(nil)
208
+ x.fixtures[:foo] = ["block", [:a, :b], "file:123"]
209
+ assert_eq x.get_fixture_block(:foo), ["block", [:a, :b], "file:123"]
210
+ end
211
+ end
212
+
213
+ describe '#register_hook_block()' do
214
+ it "[!zb66o] registers block with key." do
215
+ x = Oktest::Node.new(nil)
216
+ x.register_hook_block(:before) { "<<42533>>" }
217
+ x.register_hook_block(:after) { "<<46675>>" }
218
+ assert_eq x.hooks[:before].call(), "<<42533>>"
219
+ assert_eq x.hooks[:after].call(), "<<46675>>"
220
+ end
221
+ end
222
+
223
+ describe '#get_hook_block()' do
224
+ it "[!u3fc6] returns block corresponding to key." do
225
+ x = Oktest::Node.new(nil)
226
+ x.register_hook_block(:before) { "<<42533>>" }
227
+ x.register_hook_block(:after) { "<<46675>>" }
228
+ assert_eq x.get_hook_block(:before).call(), "<<42533>>"
229
+ assert_eq x.get_hook_block(:after).call(), "<<46675>>"
230
+ end
231
+ end
232
+
233
+ describe '#_repr()' do
234
+ it "[!bt5j8] builds debug string." do
235
+ p = Oktest::Node.new(nil)
236
+ c = Oktest::Node.new(p)
237
+ p.add_child(c)
238
+ expected = <<'END'
239
+ - #<Oktest::Node:0x[0-9a-f]+>
240
+ @context_class: #<Class:0x[0-9a-f]+>
241
+ - #<Oktest::Node:0x[0-9a-f]+>
242
+ @context_class: #<Class:0x[0-9a-f]+>
243
+ @parent: #<Oktest::Node:0x[0-9a-f]+>
244
+ END
245
+ result = p._repr()
246
+ #assert_eq result, expected
247
+ assert result =~ Regexp.compile('\A'+expected), "not matched"
248
+ end
249
+ end
250
+
251
+ end
252
+
253
+
254
+ class ScopeNode_TC < TC
255
+
256
+ describe '#accept_visitor()' do
257
+ class DummyVisitor
258
+ def visit_scope(*args)
259
+ @_args = args
260
+ "<<43746>>"
261
+ end
262
+ attr_reader :_args
263
+ end
264
+ it "[!vr6ko] invokes 'visit_spec()' method of visitor and returns result of it." do
265
+ dummy = DummyVisitor.new()
266
+ sc = Oktest::ScopeNode.new(nil, __FILE__)
267
+ ret = sc.accept_visitor(dummy, 1, 2, 3)
268
+ assert_eq dummy._args, [sc, 1, 2, 3]
269
+ assert_eq ret, "<<43746>>"
270
+ end
271
+ end
272
+
273
+ end
274
+
275
+
276
+ class TopicNode_TC < TC
277
+
278
+ def new_topic(target, tag: nil)
279
+ return Oktest::TopicNode.new(nil, target, tag: tag)
280
+ end
281
+
282
+ describe '#accept_visitor()' do
283
+ class DummyVisitor2
284
+ def visit_topic(*args)
285
+ @_args = args
286
+ "<<55977>>"
287
+ end
288
+ attr_reader :_args
289
+ end
290
+ it "[!c1b33] invokes 'visit_topic()' method of visitor and returns result of it." do
291
+ dummy = DummyVisitor2.new
292
+ to = Oktest::TopicNode.new(nil, Array)
293
+ ret = to.accept_visitor(dummy, 4, 5)
294
+ assert_eq dummy._args, [to, 4, 5]
295
+ assert_eq ret, "<<55977>>"
296
+ end
297
+ end
298
+
299
+ describe '#@+' do
300
+ it "[!tzorv] returns self." do
301
+ to = new_topic('#foobar()')
302
+ assert (+ to).equal?(to), "should be same"
303
+ end
304
+ end
305
+
306
+ end
307
+
308
+
309
+ class ScopeFunctions_TC < TC
310
+
311
+ def startup
312
+ end
313
+
314
+ def teardown
315
+ Oktest::THE_GLOBAL_SCOPE.clear_children()
316
+ end
317
+
318
+ describe 'Oktest.scope()' do
319
+ it "[!vxoy1] creates new scope object." do
320
+ x = Oktest.scope() { nil }
321
+ assert_eq x.class, Oktest::ScopeNode
322
+ end
323
+ it "[!jmc4q] raises error when nested called." do
324
+ begin ; x = 0
325
+ assert_exc(Oktest::OktestError, "scope() and global_scope() are not nestable.") do
326
+ ; x = 1
327
+ Oktest.scope do ; x = 2
328
+ Oktest.scope do ; x = 3
329
+ end
330
+ end
331
+ end
332
+ assert_eq x, 2
333
+ ensure
334
+ Oktest.module_eval { @_in_scope = false }
335
+ end
336
+ end
337
+ it "[!rsimc] adds scope object as child of THE_GLOBAL_SCOPE." do
338
+ assert_eq Oktest::THE_GLOBAL_SCOPE.has_child?, false
339
+ so = Oktest.scope do
340
+ end
341
+ assert_eq Oktest::THE_GLOBAL_SCOPE.has_child?, true
342
+ assert_eq Oktest::THE_GLOBAL_SCOPE.each_child.to_a, [so]
343
+ end
344
+ end
345
+
346
+ describe '#global_scope()' do
347
+ it "[!fcmt2] not create new scope object." do
348
+ go1 = Oktest.global_scope() { nil }
349
+ assert_eq go1.class, Oktest::ScopeNode
350
+ go2 = Oktest.global_scope() { nil }
351
+ assert_eq go2, go1
352
+ assert_eq go2, Oktest::THE_GLOBAL_SCOPE
353
+ end
354
+ it "[!flnpc] run block in the THE_GLOBAL_SCOPE object." do
355
+ Oktest.global_scope do
356
+ fixture :tmp_37531 do
357
+ {id: 37531}
358
+ end
359
+ end
360
+ assert Oktest::THE_GLOBAL_SCOPE.fixtures.key?(:tmp_37531)
361
+ v = Oktest::THE_GLOBAL_SCOPE.fixtures[:tmp_37531][0].call
362
+ assert_eq v, {id: 37531}
363
+ end
364
+ it "[!pe0g2] raises error when nested called." do
365
+ args = [Oktest::OktestError, "scope() and global_scope() are not nestable."]
366
+ begin ; x = 0
367
+ assert_exc(*args) do ; x = 1
368
+ Oktest.global_scope do ; x = 2
369
+ Oktest.global_scope do ; x = 3
370
+ end
371
+ end
372
+ end
373
+ assert_eq x, 2
374
+ ensure
375
+ Oktest.module_eval { @_in_scope = false }
376
+ end
377
+ #
378
+ begin ; x = 0
379
+ assert_exc(*args) do ; x = 1
380
+ Oktest.scope do ; x = 2
381
+ Oktest.global_scope do ; x = 3
382
+ end
383
+ end
384
+ end
385
+ assert_eq x, 2
386
+ ensure
387
+ Oktest.module_eval { @_in_scope = false }
388
+ end
389
+ #
390
+ begin ; x = 0
391
+ assert_exc(*args) do ; x = 1
392
+ Oktest.global_scope do ; x = 2
393
+ Oktest.scope do ; x = 3
394
+ end
395
+ end
396
+ end
397
+ assert_eq x, 2
398
+ ensure
399
+ Oktest.module_eval { @_in_scope = false }
400
+ end
401
+ end
402
+ end
403
+
404
+ end
405
+
406
+
407
+ class Context_TC < TC
408
+
409
+ def new_node_with(&b)
410
+ node = Oktest::Node.new(nil)
411
+ cls = Class.new(Oktest::Context)
412
+ cls.__node = node
413
+ cls.class_eval(&b)
414
+ return node
415
+ end
416
+
417
+ describe '#topic()' do
418
+ it "[!0gfvq] creates new topic node." do
419
+ node = new_node_with() do
420
+ topic Dir, tag: "exp" do
421
+ end
422
+ end
423
+ assert_eq node.each_child.to_a.length, 1
424
+ to = node.each_child.first
425
+ assert_eq to.class, Oktest::TopicNode
426
+ assert_eq to.target, Dir
427
+ assert_eq to.tag, "exp"
428
+ assert_eq to._prefix, "*"
429
+ end
430
+ end
431
+
432
+ describe '#case_when()' do
433
+ it "[!g3cvh] returns topic object." do
434
+ node = new_node_with() do
435
+ case_when "condition..." do
436
+ end
437
+ end
438
+ assert_eq node.each_child.to_a.length, 1
439
+ to = node.each_child.first
440
+ assert_eq to.class, Oktest::TopicNode
441
+ assert_eq to.target, "When condition..."
442
+ assert_eq to.tag, nil
443
+ assert_eq to._prefix, "-"
444
+ end
445
+ it "[!ofw1i] target is a description starting with 'When '." do
446
+ node = new_node_with() do
447
+ case_when "condition..." do
448
+ end
449
+ end
450
+ to = node.each_child.first
451
+ assert_eq to.target, "When condition..."
452
+ end
453
+ end
454
+
455
+ describe '#case_else()' do
456
+ it "[!oww4b] returns topic object." do
457
+ node = new_node_with() do
458
+ case_else tag: "dev" do
459
+ end
460
+ end
461
+ assert_eq node.each_child.to_a.length, 1
462
+ to = node.each_child.first
463
+ assert_eq to.class, Oktest::TopicNode
464
+ assert_eq to.target, "Else"
465
+ assert_eq to.tag, "dev"
466
+ assert_eq to._prefix, "-"
467
+ end
468
+ it "[!j5gnp] target is a description which is 'Else'." do
469
+ node = new_node_with() do
470
+ case_else do
471
+ end
472
+ end
473
+ assert_eq node.each_child.to_a.length, 1
474
+ to = node.each_child.first
475
+ assert_eq to.class, Oktest::TopicNode
476
+ assert_eq to.target, "Else"
477
+ end
478
+ it "[!hs1to] 1st parameter is optional." do
479
+ node = new_node_with() do
480
+ case_else "(x < 0)" do
481
+ end
482
+ end
483
+ assert_eq node.each_child.to_a.length, 1
484
+ to = node.each_child.first
485
+ assert_eq to.class, Oktest::TopicNode
486
+ assert_eq to.target, "Else (x < 0)"
487
+ end
488
+ end
489
+
490
+ describe '#scope()' do
491
+ it "[!c8c8o] creates new spec object." do
492
+ node = new_node_with() do
493
+ spec "example #1", tag: "exp" do
494
+ end
495
+ end
496
+ assert_eq node.each_child.to_a.length, 1
497
+ sp = node.each_child.first
498
+ assert_eq sp.class, Oktest::SpecLeaf
499
+ assert_eq sp.desc, "example #1"
500
+ assert_eq sp.tag, "exp"
501
+ assert_eq sp._prefix, "-"
502
+ end
503
+ it "[!ala78] provides raising TodoException block if block not given." do
504
+ node = new_node_with() do
505
+ spec "example #3"
506
+ end
507
+ assert_eq node.each_child.to_a.length, 1
508
+ sp = node.each_child.first
509
+ assert_exc(Oktest::TodoException, "not implemented yet") do
510
+ sp.block.call
511
+ end
512
+ end
513
+ it "[!x48db] keeps called location only when block has parameters." do
514
+ lineno = __LINE__ + 3
515
+ node = new_node_with() do
516
+ spec "example #4" do nil end
517
+ spec "example #5" do |x| nil end
518
+ end
519
+ sp1, sp2 = node.each_child.to_a
520
+ assert_eq sp1.location, nil
521
+ assert sp2.location != nil, "not nil"
522
+ assert sp2.location.start_with?("#{__FILE__}:#{lineno}:in")
523
+ end
524
+ end
525
+
526
+ describe '#fixture()' do
527
+ it "[!8wfrq] registers fixture factory block." do
528
+ lineno = __LINE__ + 2
529
+ node = new_node_with() do
530
+ fixture :alice do
531
+ {name: "alice"}
532
+ end
533
+ end
534
+ assert_eq node.fixtures.length, 1
535
+ assert node.fixtures.key?(:alice), "key not registerd"
536
+ assert node.fixtures[:alice][0].is_a?(Proc), "block expected"
537
+ assert_eq node.fixtures[:alice][1], nil
538
+ assert node.fixtures[:alice][2].start_with?("#{__FILE__}:#{lineno}:in ")
539
+ end
540
+ it "[!y3ks3] retrieves block parameter names." do
541
+ node = new_node_with() do
542
+ fixture :bob do |x, y|
543
+ {name: "bob"}
544
+ end
545
+ end
546
+ assert_eq node.fixtures[:bob][1], [:x, :y]
547
+ #
548
+ node = new_node_with() do
549
+ fixture :charlie do
550
+ {name: "charlie"}
551
+ end
552
+ end
553
+ assert_eq node.fixtures[:charlie][1], nil
554
+ end
555
+ end
556
+
557
+ describe '#before() ' do
558
+ it "[!275zr] registers 'before' hook block." do
559
+ x = new_node_with() do
560
+ before { "<<78059>>" }
561
+ end
562
+ assert_eq x.get_hook_block(:before).call(), "<<78059>>"
563
+ end
564
+ end
565
+
566
+ describe '#after() ' do
567
+ it "[!ngkvz] registers 'after' hook block." do
568
+ x = new_node_with() do
569
+ after { "<<52091>>" }
570
+ end
571
+ assert_eq x.get_hook_block(:after).call(), "<<52091>>"
572
+ end
573
+ end
574
+
575
+ describe '#before_all() ' do
576
+ it "[!8v1y4] registers 'before_all' hook block." do
577
+ x = new_node_with() do
578
+ before_all { "<<42577>>" }
579
+ end
580
+ assert_eq x.get_hook_block(:before_all).call(), "<<42577>>"
581
+ end
582
+ end
583
+
584
+ describe '#after_all() ' do
585
+ it "[!0w5ik] registers 'after_all' hook block." do
586
+ x = new_node_with() do
587
+ after_all { "<<33326>>" }
588
+ end
589
+ assert_eq x.get_hook_block(:after_all).call(), "<<33326>>"
590
+ end
591
+ end
592
+
593
+ end
594
+
595
+
596
+ class SpecLeafTC < TC
597
+
598
+ def startup
599
+ end
600
+
601
+ def teardown
602
+ Oktest::THE_GLOBAL_SCOPE.clear_children()
603
+ end
604
+
605
+ def new_spec_object(desc="sample #1", tag: nil)
606
+ sp = nil
607
+ Oktest.scope do
608
+ topic 'Example' do
609
+ sp = spec(desc, tag: tag) { nil }
610
+ end
611
+ end
612
+ return sp
613
+ end
614
+
615
+ describe '#run_block_in_context_object()' do
616
+ it "[!tssim] run spec block in text object." do
617
+ to = Oktest::TopicNode.new(nil, 'Example')
618
+ sp = Oktest::SpecLeaf.new(to, "#sample 2") { @called = "<<29193>>" }
619
+ ctx = to.new_context_object()
620
+ assert_eq ctx.instance_variable_get('@called'), nil
621
+ sp.run_block_in_context_object(ctx)
622
+ assert_eq ctx.instance_variable_get('@called'), "<<29193>>"
623
+ end
624
+ end
625
+
626
+ describe '#accept_visitor()' do
627
+ class DummyVisitor3
628
+ def visit_spec(*args)
629
+ @_args = args
630
+ "<<82980>>"
631
+ end
632
+ attr_reader :_args
633
+ end
634
+ it "[!ya32z] invokes 'visit_spec()' method of visitor and returns result of it." do
635
+ dummy = DummyVisitor3.new
636
+ sc = Oktest::SpecLeaf.new(nil, "sample")
637
+ ret = sc.accept_visitor(dummy, 7, 8)
638
+ assert_eq dummy._args, [sc, 7, 8]
639
+ assert_eq ret, "<<82980>>"
640
+ end
641
+ end
642
+
643
+ describe '#unlink_parent()' do
644
+ it "[!e9sv9] do nothing." do
645
+ to = Oktest::TopicNode.new(nil, "sample")
646
+ sp = Oktest::SpecLeaf.new(to, "sample")
647
+ ret = sp.unlink_parent()
648
+ assert_eq ret, nil
649
+ end
650
+ end
651
+
652
+ describe '#_repr()' do
653
+ it "[!6nsgy] builds debug string." do
654
+ sp1 = new_spec_object("sample #1")
655
+ assert_eq sp1._repr(), "- sample #1\n"
656
+ sp2 = new_spec_object("sample #2", tag: "exp")
657
+ assert_eq sp2._repr(), "- sample #2 (tag: \"exp\")\n"
658
+ assert_eq sp2._repr(2), " - sample #2 (tag: \"exp\")\n"
659
+ end
660
+ end
661
+
662
+ describe '#@-' do
663
+ it "[!bua80] returns self." do
664
+ sp = new_spec_object("sample #1")
665
+ assert (- sp).equal?(sp), "should be same"
666
+ end
667
+ end
668
+
669
+ end