oktest 1.3.1 → 1.5.0
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.
- checksums.yaml +4 -4
- data/README.md +156 -18
- data/Rakefile.rb +1 -1
- data/benchmark/run_all.rb +1 -0
- data/bin/oktest +3 -0
- data/lib/oktest.rb +253 -143
- data/oktest.gemspec +4 -3
- data/test/{run_all.rb → all.rb} +1 -0
- data/test/assertion_test.rb +244 -229
- data/test/filter_test.rb +123 -120
- data/test/fixture_test.rb +34 -32
- data/test/generator_test.rb +26 -22
- data/test/helper_test.rb +382 -204
- data/test/init.rb +44 -0
- data/test/mainapp_test.rb +249 -199
- data/test/matcher_test.rb +157 -126
- data/test/misc_test.rb +32 -30
- data/test/nanot.rb +307 -0
- data/test/node_test.rb +321 -242
- data/test/reporter_test.rb +250 -208
- data/test/runner_test.rb +102 -100
- data/test/util_test.rb +197 -193
- data/test/utilhelper_test.rb +36 -38
- data/test/visitor_test.rb +55 -50
- metadata +21 -7
- data/test/initialize.rb +0 -21
- data/test/tc.rb +0 -127
data/test/node_test.rb
CHANGED
@@ -1,237 +1,241 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
###
|
4
|
-
### $Release: 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 './
|
10
|
+
require_relative './init'
|
10
11
|
|
11
12
|
|
12
|
-
class
|
13
|
+
class Item__Test
|
14
|
+
extend NanoTest
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
test_target 'Oktest::Item#accept_visitor()' do
|
17
|
+
test_subject "[!b0e20] raises NotImplementedError." do
|
18
|
+
exc = test_exception? NotImplementedError do
|
17
19
|
Oktest::Item.new().accept_visitor(nil)
|
18
20
|
end
|
21
|
+
test_eq? exc.message, "Oktest::Item#accept_visitor(): not implemented yet."
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
test_target 'Oktest::Item#unlink_parent()' do
|
26
|
+
test_subject "[!5a0i9] raises NotImplementedError." do
|
27
|
+
exc = test_exception? NotImplementedError do
|
25
28
|
Oktest::Item.new().unlink_parent()
|
26
29
|
end
|
30
|
+
test_eq? exc.message, "Oktest::Item#unlink_parent(): not implemented yet."
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
|
34
|
+
test_target 'Oktest::Item#_repr()' do
|
35
|
+
test_subject "[!qi1af] raises NotImplementedError." do
|
36
|
+
exc = test_exception? NotImplementedError do
|
33
37
|
Oktest::Item.new()._repr(0)
|
34
38
|
end
|
39
|
+
test_eq? exc.message, "Oktest::Item#_repr(): not implemented yet."
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
43
|
end
|
39
44
|
|
40
45
|
|
41
|
-
class
|
46
|
+
class Node__Test
|
47
|
+
extend NanoTest
|
42
48
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
def teardown()
|
49
|
+
def self.test_scope(desc, &b)
|
50
|
+
NanoTest.test_scope(desc, &b)
|
51
|
+
ensure
|
47
52
|
Oktest::THE_GLOBAL_SCOPE.clear_children()
|
48
53
|
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
it "[!1fyk9] keeps children." do
|
55
|
+
test_target 'Oktest::Node#add_child()' do
|
56
|
+
test_subject "[!1fyk9] keeps children." do
|
53
57
|
p = Oktest::Node.new(nil)
|
54
58
|
c = Oktest::Node.new(nil)
|
55
59
|
p.add_child(c)
|
56
|
-
|
60
|
+
test_eq? p.instance_eval('@children'), [c]
|
57
61
|
end
|
58
|
-
|
62
|
+
test_subject "[!w5r6l] returns self." do
|
59
63
|
p = Oktest::Node.new(nil)
|
60
64
|
c = Oktest::Node.new(nil)
|
61
65
|
ret = p.add_child(c)
|
62
|
-
|
66
|
+
test_ok? ret.equal?(p), msg: "should be same"
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
66
|
-
|
67
|
-
|
70
|
+
test_target 'Oktest::Node#has_child?' do
|
71
|
+
test_subject "[!xb30d] return true when no children, else false." do
|
68
72
|
p = Oktest::Node.new(nil)
|
69
73
|
c = Oktest::Node.new(nil)
|
70
74
|
p.add_child(c)
|
71
|
-
|
72
|
-
|
75
|
+
test_eq? p.has_child?, true
|
76
|
+
test_eq? c.has_child?, false
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
76
|
-
|
77
|
-
|
80
|
+
test_target 'Oktest::Node#each_child()' do
|
81
|
+
test_subject "[!osoep] returns enumerator if block not given." do
|
78
82
|
node = Oktest::Node.new(nil)
|
79
|
-
|
83
|
+
test_eq? node.each_child.class, Enumerator
|
80
84
|
end
|
81
|
-
|
85
|
+
test_subject "[!pve8m] yields block for each child." do
|
82
86
|
p = Oktest::Node.new(nil)
|
83
87
|
c1 = Oktest::Node.new(p)
|
84
88
|
c2 = Oktest::Node.new(p)
|
85
89
|
arr = []
|
86
90
|
p.each_child {|x| arr << x }
|
87
|
-
|
88
|
-
|
89
|
-
|
91
|
+
test_eq? arr.length, 2
|
92
|
+
test_eq? arr[0], c1
|
93
|
+
test_eq? arr[1], c2
|
90
94
|
end
|
91
|
-
|
95
|
+
test_subject "[!8z6un] returns nil." do
|
92
96
|
p = Oktest::Node.new(nil)
|
93
97
|
c1 = Oktest::Node.new(p)
|
94
98
|
c2 = Oktest::Node.new(p)
|
95
99
|
ret = p.each_child {|c| 123 }
|
96
|
-
|
100
|
+
test_eq? ret, nil
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
100
|
-
|
101
|
-
|
104
|
+
test_target 'Oktest::Node#remove_child()' do
|
105
|
+
test_subject "[!hsomo] removes child at index." do
|
102
106
|
p = Oktest::Node.new(nil)
|
103
107
|
c1 = Oktest::Node.new(p)
|
104
108
|
c2 = Oktest::Node.new(p)
|
105
109
|
p.remove_child_at(0)
|
106
110
|
children = p.each_child.to_a
|
107
|
-
|
108
|
-
|
111
|
+
test_eq? children.length, 1
|
112
|
+
test_eq? children[0], c2
|
109
113
|
end
|
110
|
-
|
114
|
+
test_subject "[!hiz1b] returns removed child." do
|
111
115
|
p = Oktest::Node.new(nil)
|
112
116
|
c1 = Oktest::Node.new(p)
|
113
117
|
c2 = Oktest::Node.new(p)
|
114
118
|
ret = p.remove_child_at(0)
|
115
|
-
|
119
|
+
test_eq? ret, c1
|
116
120
|
end
|
117
|
-
|
121
|
+
test_subject "[!7fhx1] unlinks reference between parent and child." do
|
118
122
|
p = Oktest::Node.new(nil)
|
119
123
|
c1 = Oktest::Node.new(p)
|
120
124
|
c2 = Oktest::Node.new(p)
|
121
125
|
p.remove_child_at(1)
|
122
|
-
|
123
|
-
|
126
|
+
test_eq? c2.parent, nil
|
127
|
+
test_eq? c1.parent, p
|
124
128
|
end
|
125
129
|
end
|
126
130
|
|
127
|
-
|
128
|
-
|
131
|
+
test_target 'Oktest::Node#clear_children()' do
|
132
|
+
test_subject "[!o8xfb] removes all children." do
|
129
133
|
p = Oktest::Node.new(nil)
|
130
134
|
p.add_child(Oktest::Node.new(nil))
|
131
135
|
p.add_child(Oktest::Node.new(nil))
|
132
|
-
|
136
|
+
test_eq? p.has_child?, true
|
133
137
|
p.clear_children()
|
134
|
-
|
138
|
+
test_eq? p.has_child?, false
|
135
139
|
end
|
136
|
-
|
140
|
+
test_subject "[!cvaq1] return self." do
|
137
141
|
p = Oktest::Node.new(nil)
|
138
|
-
|
142
|
+
test_ok? p.clear_children().equal?(p)
|
139
143
|
end
|
140
144
|
end
|
141
145
|
|
142
|
-
|
143
|
-
|
146
|
+
test_target 'Oktest::Node#unlink_parent()' do
|
147
|
+
test_subject "[!59m52] clears '@parent' instance variable." do
|
144
148
|
p = Oktest::Node.new(nil)
|
145
149
|
c = Oktest::Node.new(p)
|
146
|
-
|
150
|
+
test_eq? c.parent, p
|
147
151
|
c.unlink_parent()
|
148
|
-
|
152
|
+
test_eq? c.parent, nil
|
149
153
|
end
|
150
|
-
|
154
|
+
test_subject "[!qksxv] returns parent object." do
|
151
155
|
p = Oktest::Node.new(nil)
|
152
156
|
c = Oktest::Node.new(p)
|
153
157
|
ret = c.unlink_parent()
|
154
|
-
|
158
|
+
test_eq? ret, p
|
155
159
|
end
|
156
160
|
end
|
157
161
|
|
158
|
-
|
159
|
-
|
162
|
+
test_target 'Oktest::Node#run_block_in_context_class()' do
|
163
|
+
test_subject "[!j9qdh] run block in context class." do
|
160
164
|
x = Oktest::Node.new(nil)
|
161
165
|
x.run_block_in_context_class { @_tmpvar = "<<00807>>" }
|
162
166
|
val = x.context_class.instance_variable_get('@_tmpvar')
|
163
|
-
|
167
|
+
test_eq? val, "<<00807>>"
|
164
168
|
end
|
165
169
|
end
|
166
170
|
|
167
|
-
|
168
|
-
|
171
|
+
test_target 'Oktest::Node#new_context_object()' do
|
172
|
+
test_subject "[!p271z] creates new context object." do
|
169
173
|
x = Oktest::Node.new(nil)
|
170
174
|
ctx = x.new_context_object()
|
171
|
-
|
172
|
-
|
175
|
+
test_eq? ctx.class, x.context_class
|
176
|
+
test_ok? ctx.is_a?(Oktest::Context)
|
173
177
|
end
|
174
|
-
|
178
|
+
test_subject "[!9hbxn] context object has 'ok()' method." do
|
175
179
|
x = Oktest::Node.new(nil)
|
176
180
|
ctx = x.new_context_object()
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
+
test_ok? ctx.respond_to?(:ok)
|
182
|
+
test_ok? ctx.respond_to?(:not_ok)
|
183
|
+
test_ok? ctx.respond_to?(:skip_when)
|
184
|
+
test_ok? ctx.respond_to?(:at_end)
|
181
185
|
end
|
182
186
|
end
|
183
187
|
|
184
|
-
|
185
|
-
|
188
|
+
test_target 'Oktest::Node#register_fixture_block()' do
|
189
|
+
test_subject "[!5ctsn] registers fixture name, block, and location." do
|
186
190
|
x = Oktest::Node.new(nil)
|
187
191
|
x.register_fixture_block(:foo, "file:123") {|a, b| "foobar" }
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
+
test_ok? x.fixtures[:foo][0].is_a?(Proc), msg: "proc object expected"
|
193
|
+
test_eq? x.fixtures[:foo][0].call(1, 2), "foobar"
|
194
|
+
test_eq? x.fixtures[:foo][1], [:a, :b]
|
195
|
+
test_eq? x.fixtures[:foo][2], "file:123"
|
192
196
|
#
|
193
197
|
x.register_fixture_block(:bar, "file:345") { "barbar" }
|
194
|
-
|
195
|
-
|
196
|
-
|
198
|
+
test_eq? x.fixtures[:bar][0].call(), "barbar"
|
199
|
+
test_eq? x.fixtures[:bar][1], nil
|
200
|
+
test_eq? x.fixtures[:bar][2], "file:345"
|
197
201
|
end
|
198
|
-
|
202
|
+
test_subject "[!hfcvo] returns self." do
|
199
203
|
x = Oktest::Node.new(nil)
|
200
204
|
ret = x.register_fixture_block(:foo, "file:123") { "foobar" }
|
201
|
-
|
205
|
+
test_ok? ret.equal?(x)
|
202
206
|
end
|
203
207
|
end
|
204
208
|
|
205
|
-
|
206
|
-
|
209
|
+
test_target 'Oktest::Node#get_fixture_block()' do
|
210
|
+
test_subject "[!f0105] returns fixture info." do
|
207
211
|
x = Oktest::Node.new(nil)
|
208
212
|
x.fixtures[:foo] = ["block", [:a, :b], "file:123"]
|
209
|
-
|
213
|
+
test_eq? x.get_fixture_block(:foo), ["block", [:a, :b], "file:123"]
|
210
214
|
end
|
211
215
|
end
|
212
216
|
|
213
|
-
|
214
|
-
|
217
|
+
test_target 'Oktest::Node#register_hook_block()' do
|
218
|
+
test_subject "[!zb66o] registers block with key." do
|
215
219
|
x = Oktest::Node.new(nil)
|
216
220
|
x.register_hook_block(:before) { "<<42533>>" }
|
217
221
|
x.register_hook_block(:after) { "<<46675>>" }
|
218
|
-
|
219
|
-
|
222
|
+
test_eq? x.hooks[:before].call(), "<<42533>>"
|
223
|
+
test_eq? x.hooks[:after].call(), "<<46675>>"
|
220
224
|
end
|
221
225
|
end
|
222
226
|
|
223
|
-
|
224
|
-
|
227
|
+
test_target 'Oktest::Node#get_hook_block()' do
|
228
|
+
test_subject "[!u3fc6] returns block corresponding to key." do
|
225
229
|
x = Oktest::Node.new(nil)
|
226
230
|
x.register_hook_block(:before) { "<<42533>>" }
|
227
231
|
x.register_hook_block(:after) { "<<46675>>" }
|
228
|
-
|
229
|
-
|
232
|
+
test_eq? x.get_hook_block(:before).call(), "<<42533>>"
|
233
|
+
test_eq? x.get_hook_block(:after).call(), "<<46675>>"
|
230
234
|
end
|
231
235
|
end
|
232
236
|
|
233
|
-
|
234
|
-
|
237
|
+
test_target 'Oktest::Node#_repr()' do
|
238
|
+
test_subject "[!bt5j8] builds debug string." do
|
235
239
|
p = Oktest::Node.new(nil)
|
236
240
|
c = Oktest::Node.new(p)
|
237
241
|
p.add_child(c)
|
@@ -243,17 +247,18 @@ class Node_TC < TC
|
|
243
247
|
@parent: #<Oktest::Node:0x[0-9a-f]+>
|
244
248
|
END
|
245
249
|
result = p._repr()
|
246
|
-
#
|
247
|
-
|
250
|
+
#test_eq? result, expected
|
251
|
+
test_match? result, Regexp.compile('\A'+expected), msg: "not matched"
|
248
252
|
end
|
249
253
|
end
|
250
254
|
|
251
255
|
end
|
252
256
|
|
253
257
|
|
254
|
-
class
|
258
|
+
class ScopeNode__Test
|
259
|
+
extend NanoTest
|
255
260
|
|
256
|
-
|
261
|
+
test_target 'Oktest::ScopeNode#accept_visitor()' do
|
257
262
|
class DummyVisitor
|
258
263
|
def visit_scope(*args)
|
259
264
|
@_args = args
|
@@ -261,25 +266,45 @@ class ScopeNode_TC < TC
|
|
261
266
|
end
|
262
267
|
attr_reader :_args
|
263
268
|
end
|
264
|
-
|
269
|
+
test_subject "[!vr6ko] invokes 'visit_spec()' method of visitor and returns result of it." do
|
265
270
|
dummy = DummyVisitor.new()
|
266
271
|
sc = Oktest::ScopeNode.new(nil, __FILE__)
|
267
272
|
ret = sc.accept_visitor(dummy, 1, 2, 3)
|
268
|
-
|
269
|
-
|
273
|
+
test_eq? dummy._args, [sc, 1, 2, 3]
|
274
|
+
test_eq? ret, "<<43746>>"
|
270
275
|
end
|
271
276
|
end
|
272
277
|
|
273
278
|
end
|
274
279
|
|
275
280
|
|
276
|
-
class
|
281
|
+
class TopicNode__Test
|
282
|
+
extend NanoTest
|
277
283
|
|
278
|
-
def new_topic(target, tag: nil)
|
284
|
+
def self.new_topic(target, tag: nil)
|
279
285
|
return Oktest::TopicNode.new(nil, target, tag: tag)
|
280
286
|
end
|
281
287
|
|
282
|
-
|
288
|
+
test_target 'Oktest::TopicNode#run_block_in_context_class()' do
|
289
|
+
test_subject "[!i2kvj] run block in context class." do
|
290
|
+
topicobj = new_topic("foobar1")
|
291
|
+
self_ = nil
|
292
|
+
topicobj.run_block_in_context_class do
|
293
|
+
self_ = self
|
294
|
+
end
|
295
|
+
test_ok? self_ < Oktest::Context
|
296
|
+
end
|
297
|
+
test_subject "[!pr3vj] run block with topic target as an argument." do
|
298
|
+
topicobj = new_topic("foobar2")
|
299
|
+
arg_ = nil
|
300
|
+
topicobj.run_block_in_context_class do |arg|
|
301
|
+
arg_ = arg
|
302
|
+
end
|
303
|
+
test_eq? arg_, "foobar2"
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
test_target 'Oktest::TopicNode#accept_visitor()' do
|
283
308
|
class DummyVisitor2
|
284
309
|
def visit_topic(*args)
|
285
310
|
@_args = args
|
@@ -287,31 +312,31 @@ class TopicNode_TC < TC
|
|
287
312
|
end
|
288
313
|
attr_reader :_args
|
289
314
|
end
|
290
|
-
|
315
|
+
test_subject "[!c1b33] invokes 'visit_topic()' method of visitor and returns result of it." do
|
291
316
|
dummy = DummyVisitor2.new
|
292
317
|
to = Oktest::TopicNode.new(nil, Array)
|
293
318
|
ret = to.accept_visitor(dummy, 4, 5)
|
294
|
-
|
295
|
-
|
319
|
+
test_eq? dummy._args, [to, 4, 5]
|
320
|
+
test_eq? ret, "<<55977>>"
|
296
321
|
end
|
297
322
|
end
|
298
323
|
|
299
|
-
|
300
|
-
|
324
|
+
test_target 'Oktest::TopicNode#@+' do
|
325
|
+
test_subject "[!tzorv] returns self." do
|
301
326
|
to = new_topic('#foobar()')
|
302
|
-
|
327
|
+
test_ok? (+ to).equal?(to), msg: "should be same"
|
303
328
|
end
|
304
329
|
end
|
305
330
|
|
306
331
|
end
|
307
332
|
|
308
333
|
|
309
|
-
class
|
334
|
+
class OktestFuncs__Test
|
335
|
+
extend NanoTest
|
310
336
|
|
311
|
-
def
|
312
|
-
|
313
|
-
|
314
|
-
def teardown
|
337
|
+
def self.test_subject(desc, &b)
|
338
|
+
super
|
339
|
+
ensure
|
315
340
|
Oktest::THE_GLOBAL_SCOPE.clear_children()
|
316
341
|
end
|
317
342
|
|
@@ -324,7 +349,7 @@ class ScopeFunctions_TC < TC
|
|
324
349
|
attr_reader :path, :lineno
|
325
350
|
end
|
326
351
|
|
327
|
-
def with_dummy_location(location)
|
352
|
+
def self.with_dummy_location(location)
|
328
353
|
$_dummy_location = location
|
329
354
|
Oktest.module_eval do
|
330
355
|
class << self
|
@@ -347,112 +372,130 @@ class ScopeFunctions_TC < TC
|
|
347
372
|
$_dummy_location = nil
|
348
373
|
end
|
349
374
|
|
350
|
-
|
351
|
-
|
375
|
+
test_target 'Oktest.scope()' do
|
376
|
+
test_subject "[!vxoy1] creates new scope object." do
|
352
377
|
x = Oktest.scope() { nil }
|
353
|
-
|
378
|
+
test_eq? x.class, Oktest::ScopeNode
|
354
379
|
end
|
355
|
-
|
380
|
+
test_subject "[!jmc4q] raises error when nested called." do
|
356
381
|
begin ; x = 0
|
357
|
-
|
382
|
+
exc = test_exception? Oktest::OktestError do
|
358
383
|
; x = 1
|
359
384
|
Oktest.scope do ; x = 2
|
360
385
|
Oktest.scope do ; x = 3
|
361
386
|
end
|
362
387
|
end
|
363
388
|
end
|
364
|
-
|
389
|
+
test_eq? exc.message, "scope() and global_scope() are not nestable."
|
390
|
+
test_eq? x, 2
|
365
391
|
ensure
|
366
392
|
Oktest.module_eval { @_in_scope = false }
|
367
393
|
end
|
368
394
|
end
|
369
|
-
|
370
|
-
|
395
|
+
test_subject "[!rsimc] adds scope object as child of THE_GLOBAL_SCOPE." do
|
396
|
+
test_eq? Oktest::THE_GLOBAL_SCOPE.has_child?, false
|
371
397
|
so = Oktest.scope do
|
372
398
|
end
|
373
|
-
|
374
|
-
|
399
|
+
test_eq? Oktest::THE_GLOBAL_SCOPE.has_child?, true
|
400
|
+
test_eq? Oktest::THE_GLOBAL_SCOPE.each_child.to_a, [so]
|
375
401
|
end
|
376
|
-
|
402
|
+
test_subject "[!kem4y] detects test script filename." do
|
377
403
|
sc = Oktest.scope() { nil }
|
378
|
-
|
404
|
+
test_eq? sc.filename, "test/node_test.rb"
|
379
405
|
end
|
380
|
-
|
406
|
+
test_subject "[!6ullm] changes test script filename from absolute path to relative path." do
|
381
407
|
with_dummy_location(Dir.pwd + "/tests/foo_test.rb:123") do
|
382
408
|
sc = Oktest.scope() { nil }
|
383
|
-
|
409
|
+
test_eq? sc.filename, "tests/foo_test.rb"
|
384
410
|
end
|
385
411
|
with_dummy_location("./t/bar_test.rb:456") do
|
386
412
|
sc = Oktest.scope() { nil }
|
387
|
-
|
413
|
+
test_eq? sc.filename, "t/bar_test.rb"
|
388
414
|
end
|
389
415
|
end
|
390
416
|
end
|
391
417
|
|
392
|
-
|
393
|
-
|
418
|
+
test_target 'Oktest.global_scope()' do
|
419
|
+
test_subject "[!fcmt2] not create new scope object." do
|
394
420
|
go1 = Oktest.global_scope() { nil }
|
395
|
-
|
421
|
+
test_eq? go1.class, Oktest::ScopeNode
|
396
422
|
go2 = Oktest.global_scope() { nil }
|
397
|
-
|
398
|
-
|
423
|
+
test_eq? go2, go1
|
424
|
+
test_eq? go2, Oktest::THE_GLOBAL_SCOPE
|
399
425
|
end
|
400
|
-
|
426
|
+
test_subject "[!flnpc] run block in the THE_GLOBAL_SCOPE object." do
|
401
427
|
Oktest.global_scope do
|
402
428
|
fixture :tmp_37531 do
|
403
429
|
{id: 37531}
|
404
430
|
end
|
405
431
|
end
|
406
|
-
|
432
|
+
test_ok? Oktest::THE_GLOBAL_SCOPE.fixtures.key?(:tmp_37531)
|
407
433
|
v = Oktest::THE_GLOBAL_SCOPE.fixtures[:tmp_37531][0].call
|
408
|
-
|
434
|
+
test_eq? v, {id: 37531}
|
409
435
|
end
|
410
|
-
|
411
|
-
|
436
|
+
test_subject "[!pe0g2] raises error when nested called." do
|
437
|
+
expected_errmsg = "scope() and global_scope() are not nestable."
|
412
438
|
begin ; x = 0
|
413
|
-
|
439
|
+
exc = test_exception? Oktest::OktestError do
|
440
|
+
; x = 1
|
414
441
|
Oktest.global_scope do ; x = 2
|
415
442
|
Oktest.global_scope do ; x = 3
|
416
443
|
end
|
417
444
|
end
|
418
445
|
end
|
419
|
-
|
446
|
+
test_eq? exc.message, expected_errmsg
|
447
|
+
test_eq? x, 2
|
420
448
|
ensure
|
421
449
|
Oktest.module_eval { @_in_scope = false }
|
422
450
|
end
|
423
451
|
#
|
424
452
|
begin ; x = 0
|
425
|
-
|
453
|
+
exc = test_exception? Oktest::OktestError do
|
454
|
+
; x = 1
|
426
455
|
Oktest.scope do ; x = 2
|
427
456
|
Oktest.global_scope do ; x = 3
|
428
457
|
end
|
429
458
|
end
|
430
459
|
end
|
431
|
-
|
460
|
+
test_eq? exc.message, expected_errmsg
|
461
|
+
|
462
|
+
test_eq? x, 2
|
432
463
|
ensure
|
433
464
|
Oktest.module_eval { @_in_scope = false }
|
434
465
|
end
|
435
466
|
#
|
436
467
|
begin ; x = 0
|
437
|
-
|
468
|
+
exc = test_exception? Oktest::OktestError do ; x = 1
|
438
469
|
Oktest.global_scope do ; x = 2
|
439
470
|
Oktest.scope do ; x = 3
|
440
471
|
end
|
441
472
|
end
|
442
473
|
end
|
443
|
-
|
474
|
+
test_eq? exc.message, expected_errmsg
|
475
|
+
test_eq? x, 2
|
444
476
|
ensure
|
445
477
|
Oktest.module_eval { @_in_scope = false }
|
446
478
|
end
|
447
479
|
end
|
448
480
|
end
|
449
481
|
|
482
|
+
test_target 'Oktest.topic()' do
|
483
|
+
test_subject "[!c5j3f] same as `Oktest.scope do topic target do ... end end`." do
|
484
|
+
arg_ = nil
|
485
|
+
Oktest.topic "FooBar" do |arg|
|
486
|
+
arg_ = arg
|
487
|
+
end
|
488
|
+
test_eq? arg_, "FooBar"
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
450
492
|
end
|
451
493
|
|
452
494
|
|
453
|
-
class
|
495
|
+
class Context__Test
|
496
|
+
extend NanoTest
|
454
497
|
|
455
|
-
def new_node_with(&b)
|
498
|
+
def self.new_node_with(&b)
|
456
499
|
node = Oktest::Node.new(nil)
|
457
500
|
cls = Class.new(Oktest::Context)
|
458
501
|
cls.__node = node
|
@@ -460,205 +503,241 @@ class Context_TC < TC
|
|
460
503
|
return node
|
461
504
|
end
|
462
505
|
|
463
|
-
|
464
|
-
|
506
|
+
test_target 'Oktest::Context#topic()' do
|
507
|
+
test_subject "[!0gfvq] creates new topic node." do
|
465
508
|
node = new_node_with() do
|
466
509
|
topic Dir, tag: "exp" do
|
467
510
|
end
|
468
511
|
end
|
469
|
-
|
512
|
+
test_eq? node.each_child.to_a.length, 1
|
470
513
|
to = node.each_child.first
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
514
|
+
test_eq? to.class, Oktest::TopicNode
|
515
|
+
test_eq? to.target, Dir
|
516
|
+
test_eq? to.tag, "exp"
|
517
|
+
test_eq? to._prefix, "*"
|
475
518
|
end
|
476
519
|
end
|
477
520
|
|
478
|
-
|
479
|
-
|
521
|
+
test_target 'Oktest::Context#case_when()' do
|
522
|
+
test_subject "[!g3cvh] returns topic object." do
|
480
523
|
node = new_node_with() do
|
481
524
|
case_when "condition..." do
|
482
525
|
end
|
483
526
|
end
|
484
|
-
|
527
|
+
test_eq? node.each_child.to_a.length, 1
|
485
528
|
to = node.each_child.first
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
529
|
+
test_eq? to.class, Oktest::TopicNode
|
530
|
+
test_eq? to.target, "When condition..."
|
531
|
+
test_eq? to.tag, nil
|
532
|
+
test_eq? to._prefix, "-"
|
490
533
|
end
|
491
|
-
|
534
|
+
test_subject "[!ofw1i] target is a description starting with 'When '." do
|
492
535
|
node = new_node_with() do
|
493
536
|
case_when "condition..." do
|
494
537
|
end
|
495
538
|
end
|
496
539
|
to = node.each_child.first
|
497
|
-
|
540
|
+
test_eq? to.target, "When condition..."
|
541
|
+
end
|
542
|
+
test_subject "[!53qxv] not add 'When ' if description starts with it." do
|
543
|
+
node = new_node_with() do
|
544
|
+
case_when "when condition..." do
|
545
|
+
end
|
546
|
+
end
|
547
|
+
to = node.each_child.first
|
548
|
+
test_eq? to.target, "when condition..."
|
549
|
+
#
|
550
|
+
node = new_node_with() do
|
551
|
+
case_when "[""!abc] when..." do
|
552
|
+
end
|
553
|
+
end
|
554
|
+
to = node.each_child.first
|
555
|
+
test_eq? to.target, "[""!abc] when..."
|
498
556
|
end
|
499
557
|
end
|
500
558
|
|
501
|
-
|
502
|
-
|
559
|
+
test_target 'Oktest::Context#case_else()' do
|
560
|
+
test_subject "[!oww4b] returns topic object." do
|
503
561
|
node = new_node_with() do
|
504
562
|
case_else tag: "dev" do
|
505
563
|
end
|
506
564
|
end
|
507
|
-
|
565
|
+
test_eq? node.each_child.to_a.length, 1
|
508
566
|
to = node.each_child.first
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
567
|
+
test_eq? to.class, Oktest::TopicNode
|
568
|
+
test_eq? to.target, "Else"
|
569
|
+
test_eq? to.tag, "dev"
|
570
|
+
test_eq? to._prefix, "-"
|
513
571
|
end
|
514
|
-
|
572
|
+
test_subject "[!j5gnp] target is a description which is 'Else'." do
|
515
573
|
node = new_node_with() do
|
516
574
|
case_else do
|
517
575
|
end
|
518
576
|
end
|
519
|
-
|
577
|
+
test_eq? node.each_child.to_a.length, 1
|
578
|
+
to = node.each_child.first
|
579
|
+
test_eq? to.class, Oktest::TopicNode
|
580
|
+
test_eq? to.target, "Else"
|
581
|
+
end
|
582
|
+
test_subject "[!3nn8d] not add 'Else ' if description starts with it." do
|
583
|
+
node = new_node_with() do
|
584
|
+
case_else "else (x < 0)" do
|
585
|
+
end
|
586
|
+
end
|
587
|
+
test_eq? node.each_child.to_a.length, 1
|
588
|
+
to = node.each_child.first
|
589
|
+
test_eq? to.class, Oktest::TopicNode
|
590
|
+
test_eq? to.target, "else (x < 0)"
|
591
|
+
#
|
592
|
+
node = new_node_with() do
|
593
|
+
case_else "[""!abc] else..." do
|
594
|
+
end
|
595
|
+
end
|
596
|
+
test_eq? node.each_child.to_a.length, 1
|
520
597
|
to = node.each_child.first
|
521
|
-
|
522
|
-
|
598
|
+
test_eq? to.class, Oktest::TopicNode
|
599
|
+
test_eq? to.target, "[""!abc] else..."
|
523
600
|
end
|
524
|
-
|
601
|
+
test_subject "[!hs1to] 1st parameter is optional." do
|
525
602
|
node = new_node_with() do
|
526
603
|
case_else "(x < 0)" do
|
527
604
|
end
|
528
605
|
end
|
529
|
-
|
606
|
+
test_eq? node.each_child.to_a.length, 1
|
530
607
|
to = node.each_child.first
|
531
|
-
|
532
|
-
|
608
|
+
test_eq? to.class, Oktest::TopicNode
|
609
|
+
test_eq? to.target, "Else (x < 0)"
|
533
610
|
end
|
534
611
|
end
|
535
612
|
|
536
|
-
|
537
|
-
|
613
|
+
test_target 'Oktest::Context#scope()' do
|
614
|
+
test_subject "[!c8c8o] creates new spec object." do
|
538
615
|
node = new_node_with() do
|
539
616
|
spec "example #1", tag: "exp" do
|
540
617
|
end
|
541
618
|
end
|
542
|
-
|
619
|
+
test_eq? node.each_child.to_a.length, 1
|
543
620
|
sp = node.each_child.first
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
621
|
+
test_eq? sp.class, Oktest::SpecLeaf
|
622
|
+
test_eq? sp.desc, "example #1"
|
623
|
+
test_eq? sp.tag, "exp"
|
624
|
+
test_eq? sp._prefix, "-"
|
548
625
|
end
|
549
|
-
|
626
|
+
test_subject "[!4vkbl] error when `fixture:` keyword arg is not a Hash object." do
|
550
627
|
new_node_with() do
|
551
628
|
spec "example #2", fixture: {x: 1} do end # not raise anything
|
552
629
|
end
|
553
|
-
|
630
|
+
exc = test_exception? ArgumentError do
|
554
631
|
new_node_with() do
|
555
632
|
spec "example #2", fixture: "x: 1" do end
|
556
633
|
end
|
557
634
|
end
|
635
|
+
test_eq? exc.message, 'spec(fixture: "x: 1"): fixture argument should be a Hash object, but got String object.'
|
558
636
|
end
|
559
|
-
|
637
|
+
test_subject "[!ala78] provides raising TodoException block if block not given." do
|
560
638
|
node = new_node_with() do
|
561
639
|
spec "example #3"
|
562
640
|
end
|
563
|
-
|
641
|
+
test_eq? node.each_child.to_a.length, 1
|
564
642
|
sp = node.each_child.first
|
565
|
-
|
643
|
+
exc = test_exception? Oktest::TodoException do
|
566
644
|
sp.block.call
|
567
645
|
end
|
646
|
+
test_eq? exc.message, "not implemented yet"
|
568
647
|
end
|
569
|
-
|
648
|
+
test_subject "[!x48db] keeps called location only when block has parameters." do
|
570
649
|
lineno = __LINE__ + 3
|
571
650
|
node = new_node_with() do
|
572
651
|
spec "example #4" do nil end
|
573
652
|
spec "example #5" do |x| nil end
|
574
653
|
end
|
575
654
|
sp1, sp2 = node.each_child.to_a
|
576
|
-
|
577
|
-
|
578
|
-
|
655
|
+
test_eq? sp1.location, nil
|
656
|
+
test_ok? sp2.location != nil, msg: "not nil"
|
657
|
+
test_ok? sp2.location.to_s.start_with?("#{__FILE__}:#{lineno}:in")
|
579
658
|
end
|
580
659
|
end
|
581
660
|
|
582
|
-
|
583
|
-
|
661
|
+
test_target 'Oktest::Context#fixture()' do
|
662
|
+
test_subject "[!8wfrq] registers fixture factory block." do
|
584
663
|
lineno = __LINE__ + 2
|
585
664
|
node = new_node_with() do
|
586
665
|
fixture :alice do
|
587
666
|
{name: "alice"}
|
588
667
|
end
|
589
668
|
end
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
669
|
+
test_eq? node.fixtures.length, 1
|
670
|
+
test_ok? node.fixtures.key?(:alice), msg: "key not registerd"
|
671
|
+
test_ok? node.fixtures[:alice][0].is_a?(Proc), msg: "block expected"
|
672
|
+
test_eq? node.fixtures[:alice][1], nil
|
673
|
+
test_ok? node.fixtures[:alice][2].to_s.start_with?("#{__FILE__}:#{lineno}:in ")
|
595
674
|
end
|
596
|
-
|
675
|
+
test_subject "[!y3ks3] retrieves block parameter names." do
|
597
676
|
node = new_node_with() do
|
598
677
|
fixture :bob do |x, y|
|
599
678
|
{name: "bob"}
|
600
679
|
end
|
601
680
|
end
|
602
|
-
|
681
|
+
test_eq? node.fixtures[:bob][1], [:x, :y]
|
603
682
|
#
|
604
683
|
node = new_node_with() do
|
605
684
|
fixture :charlie do
|
606
685
|
{name: "charlie"}
|
607
686
|
end
|
608
687
|
end
|
609
|
-
|
688
|
+
test_eq? node.fixtures[:charlie][1], nil
|
610
689
|
end
|
611
690
|
end
|
612
691
|
|
613
|
-
|
614
|
-
|
692
|
+
test_target 'Oktest::Context#before() ' do
|
693
|
+
test_subject "[!275zr] registers 'before' hook block." do
|
615
694
|
x = new_node_with() do
|
616
695
|
before { "<<78059>>" }
|
617
696
|
end
|
618
|
-
|
697
|
+
test_eq? x.get_hook_block(:before).call(), "<<78059>>"
|
619
698
|
end
|
620
699
|
end
|
621
700
|
|
622
|
-
|
623
|
-
|
701
|
+
test_target 'Oktest::Context#after() ' do
|
702
|
+
test_subject "[!ngkvz] registers 'after' hook block." do
|
624
703
|
x = new_node_with() do
|
625
704
|
after { "<<52091>>" }
|
626
705
|
end
|
627
|
-
|
706
|
+
test_eq? x.get_hook_block(:after).call(), "<<52091>>"
|
628
707
|
end
|
629
708
|
end
|
630
709
|
|
631
|
-
|
632
|
-
|
710
|
+
test_target 'Oktest::Context#before_all() ' do
|
711
|
+
test_subject "[!8v1y4] registers 'before_all' hook block." do
|
633
712
|
x = new_node_with() do
|
634
713
|
before_all { "<<42577>>" }
|
635
714
|
end
|
636
|
-
|
715
|
+
test_eq? x.get_hook_block(:before_all).call(), "<<42577>>"
|
637
716
|
end
|
638
717
|
end
|
639
718
|
|
640
|
-
|
641
|
-
|
719
|
+
test_target 'Oktest::Context#after_all() ' do
|
720
|
+
test_subject "[!0w5ik] registers 'after_all' hook block." do
|
642
721
|
x = new_node_with() do
|
643
722
|
after_all { "<<33326>>" }
|
644
723
|
end
|
645
|
-
|
724
|
+
test_eq? x.get_hook_block(:after_all).call(), "<<33326>>"
|
646
725
|
end
|
647
726
|
end
|
648
727
|
|
649
728
|
end
|
650
729
|
|
651
730
|
|
652
|
-
class
|
731
|
+
class SpecLeaf__Test
|
732
|
+
extend NanoTest
|
653
733
|
|
654
|
-
def
|
655
|
-
|
656
|
-
|
657
|
-
def teardown
|
734
|
+
def self.test_subject(desc, &b)
|
735
|
+
super
|
736
|
+
ensure
|
658
737
|
Oktest::THE_GLOBAL_SCOPE.clear_children()
|
659
738
|
end
|
660
739
|
|
661
|
-
def new_spec_object(desc="sample #1", tag: nil)
|
740
|
+
def self.new_spec_object(desc="sample #1", tag: nil)
|
662
741
|
sp = nil
|
663
742
|
Oktest.scope do
|
664
743
|
topic 'Example' do
|
@@ -668,18 +747,18 @@ class SpecLeafTC < TC
|
|
668
747
|
return sp
|
669
748
|
end
|
670
749
|
|
671
|
-
|
672
|
-
|
750
|
+
test_target 'Oktest::SpecLeaf#run_block_in_context_object()' do
|
751
|
+
test_subject "[!tssim] run spec block in text object." do
|
673
752
|
to = Oktest::TopicNode.new(nil, 'Example')
|
674
753
|
sp = Oktest::SpecLeaf.new(to, "#sample 2") { @called = "<<29193>>" }
|
675
754
|
ctx = to.new_context_object()
|
676
|
-
|
755
|
+
test_eq? ctx.instance_variable_get('@called'), nil
|
677
756
|
sp.run_block_in_context_object(ctx)
|
678
|
-
|
757
|
+
test_eq? ctx.instance_variable_get('@called'), "<<29193>>"
|
679
758
|
end
|
680
759
|
end
|
681
760
|
|
682
|
-
|
761
|
+
test_target 'Oktest::SpecLeaf#accept_visitor()' do
|
683
762
|
class DummyVisitor3
|
684
763
|
def visit_spec(*args)
|
685
764
|
@_args = args
|
@@ -687,38 +766,38 @@ class SpecLeafTC < TC
|
|
687
766
|
end
|
688
767
|
attr_reader :_args
|
689
768
|
end
|
690
|
-
|
769
|
+
test_subject "[!ya32z] invokes 'visit_spec()' method of visitor and returns result of it." do
|
691
770
|
dummy = DummyVisitor3.new
|
692
771
|
sc = Oktest::SpecLeaf.new(nil, "sample")
|
693
772
|
ret = sc.accept_visitor(dummy, 7, 8)
|
694
|
-
|
695
|
-
|
773
|
+
test_eq? dummy._args, [sc, 7, 8]
|
774
|
+
test_eq? ret, "<<82980>>"
|
696
775
|
end
|
697
776
|
end
|
698
777
|
|
699
|
-
|
700
|
-
|
778
|
+
test_target 'Oktest::SpecLeaf#unlink_parent()' do
|
779
|
+
test_subject "[!e9sv9] do nothing." do
|
701
780
|
to = Oktest::TopicNode.new(nil, "sample")
|
702
781
|
sp = Oktest::SpecLeaf.new(to, "sample")
|
703
782
|
ret = sp.unlink_parent()
|
704
|
-
|
783
|
+
test_eq? ret, nil
|
705
784
|
end
|
706
785
|
end
|
707
786
|
|
708
|
-
|
709
|
-
|
787
|
+
test_target 'Oktest::SpecLeaf#_repr()' do
|
788
|
+
test_subject "[!6nsgy] builds debug string." do
|
710
789
|
sp1 = new_spec_object("sample #1")
|
711
|
-
|
790
|
+
test_eq? sp1._repr(), "- sample #1\n"
|
712
791
|
sp2 = new_spec_object("sample #2", tag: "exp")
|
713
|
-
|
714
|
-
|
792
|
+
test_eq? sp2._repr(), "- sample #2 (tag: \"exp\")\n"
|
793
|
+
test_eq? sp2._repr(2), " - sample #2 (tag: \"exp\")\n"
|
715
794
|
end
|
716
795
|
end
|
717
796
|
|
718
|
-
|
719
|
-
|
797
|
+
test_target 'Oktest::SpecLeaf#@-' do
|
798
|
+
test_subject "[!bua80] returns self." do
|
720
799
|
sp = new_spec_object("sample #1")
|
721
|
-
|
800
|
+
test_ok? (- sp).equal?(sp), msg: "should be same"
|
722
801
|
end
|
723
802
|
end
|
724
803
|
|