oktest 1.0.2 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/oktest.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 1.0.2 $
4
+ ### $Release: 1.2.1 $
5
5
  ### $License: MIT License $
6
6
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
7
7
  ###
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.name = "oktest"
14
14
  s.author = "kwatch"
15
15
  s.email = "kwatch@gmail.com"
16
- s.version = "$Release: 1.0.2 $".split()[1]
16
+ s.version = "$Release: 1.2.1 $".split()[1]
17
17
  s.license = "MIT"
18
18
  s.platform = Gem::Platform::RUBY
19
19
  s.homepage = "https://github.com/kwatch/oktest/tree/ruby"
@@ -30,7 +30,7 @@ Oktest.rb is a new-style testing library for Ruby.
30
30
 
31
31
  See https://github.com/kwatch/oktest/tree/ruby/ruby for details.
32
32
  END
33
- s.required_ruby_version = ">= 2.3"
33
+ s.required_ruby_version = ">= 2.0"
34
34
  s.add_dependency "diff-lcs", "~> 1.0"
35
35
  s.add_dependency "benry-recorder", "~> 1.0"
36
36
 
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 1.0.2 $
4
+ ### $Release: 1.2.1 $
5
5
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
@@ -170,6 +170,15 @@ END
170
170
  " $<expected>: \"str\""
171
171
  FAIL!(errmsg) { ok {String}.NOT === 'str' }
172
172
  end
173
+ it "[!mjh4d] raises error when combination of 'not_ok()' and matcher object." do
174
+ errmsg = "negative `===` is not available with matcher object."
175
+ assert_exc(Oktest::OktestError, errmsg) do
176
+ not_ok {Oktest::JsonMatcher.new({})} === {}
177
+ end
178
+ assert_exc(Oktest::OktestError, errmsg) do
179
+ ok {Oktest::JsonMatcher.new({})}.NOT === {}
180
+ end
181
+ end
173
182
  end
174
183
 
175
184
  describe '>' do
@@ -423,11 +432,11 @@ describe '#method_missing()' do
423
432
  assert NoMethodError < NameError, "NoMethodError extends NameError"
424
433
  ERROR!(NoMethodError, /foobar/) { ok {pr}.raise?(NameError) }
425
434
  end
426
- it "[!hwg0z] compares error class with '.is_a?' if 'subclass: true' specified." do
435
+ it "[!hwg0z] compares error class with '.is_a?' if '_subclass: true' specified." do
427
436
  pr = proc { "SOS".foobar }
428
437
  PASS! { ok {pr}.raise?(NoMethodError, nil) }
429
438
  assert NoMethodError < NameError, "NoMethodError extends NameError"
430
- PASS! { ok {pr}.raise?(NameError, nil, subclass: true) }
439
+ PASS! { ok {pr}.raise?(NameError, nil, _subclass: true) }
431
440
  end
432
441
  it "[!4n3ed] reraises if exception is not matched to specified error class." do
433
442
  pr = proc { "SOS".sos }
@@ -483,11 +492,11 @@ describe '#method_missing()' do
483
492
  assert NoMethodError < NameError, "NoMethodError extends NameError"
484
493
  ERROR!(NoMethodError) { ok {pr}.NOT.raise?(NameError) }
485
494
  end
486
- it "[!34nd8] compares error class with '.is_a?' if 'subclass: true' specified." do
495
+ it "[!34nd8] compares error class with '.is_a?' if '_subclass: true' specified." do
487
496
  pr = proc { "SOS".foobar }
488
497
  FAIL!(/foobar/) { ok {pr}.NOT.raise?(NoMethodError, nil) }
489
498
  assert NoMethodError < NameError, "NoMethodError extends NameError"
490
- FAIL!(/foobar/) { ok {pr}.NOT.raise?(NameError, nil, subclass: true) }
499
+ FAIL!(/foobar/) { ok {pr}.NOT.raise?(NameError, nil, _subclass: true) }
491
500
  end
492
501
  it "[!shxne] reraises exception if different from specified error class." do
493
502
  pr = proc { 1/0 }
@@ -814,4 +823,60 @@ describe '#method_missing()' do
814
823
  end
815
824
  end
816
825
 
826
+ describe '#JSON()' do
827
+ it "[!n0k03] creates JsonMatcher object." do
828
+ o = JSON({})
829
+ assert_eq o.class, Oktest::JsonMatcher
830
+ end
831
+ end
832
+
833
+ describe '#Enum()' do
834
+ it "[!fbfr0] creates Enum object which is a subclass of Set." do
835
+ o = Enum("a", "b", "c")
836
+ assert_eq o.class, Oktest::JsonMatcher::Enum
837
+ assert o.class < Set
838
+ assert_eq (o === "a"), true
839
+ assert_eq (o === "b"), true
840
+ assert_eq (o === "c"), true
841
+ assert_eq (o === "d"), false
842
+ end
843
+ end
844
+
845
+ describe '#Bool()' do
846
+ it "[!vub5j] creates a set of true and false." do
847
+ assert_eq Bool().class, Oktest::JsonMatcher::Enum
848
+ assert Bool() === true
849
+ assert Bool() === false
850
+ assert_eq (Bool() === 1), false
851
+ assert_eq (Bool() === 0), false
852
+ end
853
+ end
854
+
855
+ describe '#OR()' do
856
+ it "[!9e8im] creates `OR` object." do
857
+ o = OR(1, 2, 3)
858
+ assert_eq o.class, Oktest::JsonMatcher::OR
859
+ end
860
+ end
861
+
862
+ describe '#AND()' do
863
+ it "[!38jln] creates `AND` object." do
864
+ o = AND(4, 5, 6)
865
+ assert_eq o.class, Oktest::JsonMatcher::AND
866
+ end
867
+ end
868
+
869
+ describe '#Length()' do
870
+ it "[!qqas3] creates Length object." do
871
+ o = Length(3)
872
+ assert_eq o.class, Oktest::JsonMatcher::Length
873
+ end
874
+ end
875
+
876
+ describe '#Any()' do
877
+ it "[!dlo1o] creates an 'Any' object." do
878
+ assert_eq Any().class, Oktest::JsonMatcher::Any
879
+ end
880
+ end
881
+
817
882
  end
data/test/filter_test.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 1.0.2 $
4
+ ### $Release: 1.2.1 $
5
5
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
@@ -188,7 +188,7 @@ class Filter_TC < TC
188
188
  Oktest::Runner.new(reporter).start()
189
189
  end
190
190
  assert_eq serr, ""
191
- return sout.sub(/^## total:.*\n/, '')
191
+ return sout.sub(/^## total:.*\n/, '').sub(/^## test\/filter_test\.rb\n/, '')
192
192
  end
193
193
 
194
194
  def uncolor(s)
data/test/fixture_test.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 1.0.2 $
4
+ ### $Release: 1.2.1 $
5
5
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
@@ -116,6 +116,19 @@ END
116
116
  assert_eq sout, expected
117
117
  end
118
118
 
119
+ it "[!gyyst] overwrites keyword params by fixture values." do
120
+ Oktest.scope do
121
+ topic "topic#1" do
122
+ fixture(:x) {|y, z: 3| {y: y, z: z} }
123
+ fixture(:y) { 2 }
124
+ spec("not overwrite") {|x| p x }
125
+ spec("overwrite", fixture: {y: 4, z: 5}) {|x| p x }
126
+ end
127
+ end
128
+ sout = run_all()
129
+ assert_eq sout, "{:y=>2, :z=>3}\n{:y=>4, :z=>5}\n"
130
+ end
131
+
119
132
  it "[!4xghy] calls fixture block with context object as self." do
120
133
  Oktest.scope do
121
134
  topic "Parent" do
@@ -1,5 +1,5 @@
1
1
  ###
2
- ### $Release: 1.0.2 $
2
+ ### $Release: 1.2.1 $
3
3
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
4
4
  ### $License: MIT License $
5
5
  ###
data/test/helper_test.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  ###
2
- ### $Release: 1.0.2 $
2
+ ### $Release: 1.2.1 $
3
3
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
4
4
  ### $License: MIT License $
5
5
  ###
@@ -36,7 +36,7 @@ class SpecHelper_TC < TC
36
36
  it "[!bc3l2] records invoked location." do
37
37
  lineno = __LINE__ + 1
38
38
  o = ok {"bar"}
39
- assert o.location.start_with?("#{__FILE__}:#{lineno}:")
39
+ assert o.location.to_s.start_with?("#{__FILE__}:#{lineno}:")
40
40
  end
41
41
  it "[!mqtdy] not record invoked location when `Config.ok_location == false`." do
42
42
  bkup = Oktest::Config.ok_location
@@ -60,7 +60,7 @@ class SpecHelper_TC < TC
60
60
  it "[!agmx8] records invoked location." do
61
61
  lineno = __LINE__ + 1
62
62
  o = not_ok {"bar"}
63
- assert o.location.start_with?("#{__FILE__}:#{lineno}:")
63
+ assert o.location.to_s.start_with?("#{__FILE__}:#{lineno}:")
64
64
  end
65
65
  it "[!a9508] not record invoked location when `Config.ok_location == false`." do
66
66
  bkup = Oktest::Config.ok_location
@@ -129,17 +129,17 @@ class SpecHelper_TC < TC
129
129
  it "[!l2mcx] accepts block arguments." do
130
130
  val = nil
131
131
  Oktest.scope() do
132
- fixture :foo do |x, y|
133
- {x: x, y: y}
132
+ fixture :foo do |x, y, z: 0|
133
+ {x: x, y: y, z: z}
134
134
  end
135
135
  topic 'Example' do
136
136
  spec 'sample' do
137
- val = fixture(:foo, 10, 20)
137
+ val = fixture(:foo, 10, 20, z: 30)
138
138
  end
139
139
  end
140
140
  end
141
141
  capture { Oktest.run() }
142
- assert_eq val, {x: 10, y: 20}
142
+ assert_eq val, {x: 10, y: 20, z: 30}
143
143
  end
144
144
  it "[!wxcsp] raises error when fixture not found." do
145
145
  exc = nil
data/test/initialize.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 1.0.2 $
4
+ ### $Release: 1.2.1 $
5
5
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
@@ -12,3 +12,10 @@ end
12
12
 
13
13
  require_relative './tc'
14
14
  require 'oktest'
15
+
16
+
17
+ # for Ruby 2.4 or older
18
+ require 'set'
19
+ unless Set.instance_methods(false).include?(:===)
20
+ class Set; alias === include?; end
21
+ end
data/test/mainapp_test.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  ###
2
- ### $Release: 1.0.2 $
2
+ ### $Release: 1.2.1 $
3
3
  ### $Copyright: copyright(c) 2011-2021 kuwata-lab.com all rights reserved $
4
4
  ### $License: MIT License $
5
5
  ###
@@ -73,15 +73,6 @@ end
73
73
 
74
74
  END
75
75
 
76
- def plain2colored(str)
77
- str = str.gsub(/<R>(.*?)<\/R>/) { Oktest::Color.red($1) }
78
- str = str.gsub(/<G>(.*?)<\/G>/) { Oktest::Color.green($1) }
79
- str = str.gsub(/<B>(.*?)<\/B>/) { Oktest::Color.blue($1) }
80
- str = str.gsub(/<Y>(.*?)<\/Y>/) { Oktest::Color.yellow($1) }
81
- str = str.gsub(/<b>(.*?)<\/b>/) { Oktest::Color.bold($1) }
82
- return str
83
- end
84
-
85
76
  def edit_actual(output)
86
77
  bkup = output.dup
87
78
  output = output.gsub(/^.*\r/, '')
@@ -165,7 +156,7 @@ END
165
156
 
166
157
  it "[!18qpe] runs test scripts." do
167
158
  expected = <<'END'
168
- ## total:8 (<B>pass:4</B>, <R>fail:1</R>, <R>error:1</R>, <Y>skip:1</Y>, <Y>todo:1</Y>) in 0.000s
159
+ ## total:8 (<C>pass:4</C>, <R>fail:1</R>, <E>error:1</E>, <Y>skip:1</Y>, <Y>todo:1</Y>) in 0.000s
169
160
  END
170
161
  ret, sout, serr = run(@testfile)
171
162
  assert_eq ret, 2
@@ -180,7 +171,7 @@ END
180
171
 
181
172
  it "[!hiu5b] finds test scripts in directory and runs them." do
182
173
  expected = <<'END'
183
- ## total:8 (<B>pass:4</B>, <R>fail:1</R>, <R>error:1</R>, <Y>skip:1</Y>, <Y>todo:1</Y>) in 0.000s
174
+ ## total:8 (<C>pass:4</C>, <R>fail:1</R>, <E>error:1</E>, <Y>skip:1</Y>, <Y>todo:1</Y>) in 0.000s
184
175
  END
185
176
  dir = "_tmpdir.d"
186
177
  dirs = [dir, "#{dir}/d1", "#{dir}/d1/d2"]
@@ -196,17 +187,42 @@ END
196
187
  end
197
188
  end
198
189
 
190
+ it "[!v5xie] parses $OKTEST_RB environment variable." do
191
+ ret, sout, serr = run(@testfile, tty: false)
192
+ expected = plain2colored(<<'END')
193
+ ## _tmp_test.rb
194
+ * <b>Parent</b>
195
+ * <b>Child1</b>
196
+ - [<C>pass</C>] 1+1 should be 2
197
+ - [<C>pass</C>] 1-1 should be 0
198
+ END
199
+ assert sout.start_with?(expected), "expected verbose-style, but not."
200
+ #
201
+ begin
202
+ ENV['OKTEST_RB'] = "-ss"
203
+ ret, sout, serr = run(@testfile, tty: false)
204
+ expected = plain2colored(<<'END')
205
+ ## _tmp_test.rb
206
+ * <b>Parent</b>: <C>.</C><C>.</C>
207
+ * <b>Child1</b>: <C>.</C><C>.</C>
208
+ * <b>Child2</b>: <R>f</R><E>E</E>
209
+ END
210
+ assert sout.start_with?(expected), "expected simple-style, but not."
211
+ ensure
212
+ ENV.delete('OKTEST_RB')
213
+ end
214
+ end
215
+
199
216
  #HELP_MESSAGE = Oktest::MainApp::HELP_MESSAGE % {command: File.basename($0)}
200
217
  HELP_MESSAGE = <<"END"
201
218
  Usage: #{File.basename($0)} [<options>] [<file-or-directory>...]
202
219
  -h, --help : show help
203
220
  --version : print version
204
- -s <STYLE> : report style (verbose/simple/plain/quiet, or v/s/p/q)
221
+ -s <REPORT-STYLE> : verbose/simple/compact/plain/quiet, or v/s/c/p/q
205
222
  -F <PATTERN> : filter topic or spec with pattern (see below)
206
223
  --color[={on|off}] : enable/disable output coloring forcedly
207
- -C, --create : print test code skeleton
224
+ -S, --skeleton : print test code skeleton
208
225
  -G, --generate : generate test code skeleton from ruby file
209
- --faster : make 'ok{}' faster (for very large project)
210
226
 
211
227
  Filter examples:
212
228
  $ oktest -F topic=Hello # filter by topic
@@ -241,7 +257,7 @@ END
241
257
  end
242
258
 
243
259
  it "[!qqizl] '--version' option prints version number." do
244
- expected = '$Release: 1.0.2 $'.split()[1] + "\n"
260
+ expected = '$Release: 1.2.1 $'.split()[1] + "\n"
245
261
  #
246
262
  ret, sout, serr = run("--version")
247
263
  assert_eq ret, 0
@@ -251,13 +267,14 @@ END
251
267
 
252
268
  it "[!0qd92] '-s verbose' or '-sv' option prints test results in verbose mode." do
253
269
  expected = <<END
270
+ ## _tmp_test.rb
254
271
  * <b>Parent</b>
255
272
  * <b>Child1</b>
256
- - [<B>pass</B>] 1+1 should be 2
257
- - [<B>pass</B>] 1-1 should be 0
273
+ - [<C>pass</C>] 1+1 should be 2
274
+ - [<C>pass</C>] 1-1 should be 0
258
275
  * <b>Child2</b>
259
276
  - [<R>Fail</R>] 1*1 should be 1
260
- - [<R>ERROR</R>] 1/1 should be 1
277
+ - [<E>ERROR</E>] 1/1 should be 1
261
278
  ----------------------------------------------------------------------
262
279
  END
263
280
  #
@@ -272,9 +289,12 @@ END
272
289
  assert_eq serr, ""
273
290
  end
274
291
 
275
- it "[!ef5v7] '-s simple' or '-ss' option prints test results in simple mode." do
292
+ it "[!zfdr5] '-s simple' or '-ss' option prints test results in simple mode." do
276
293
  expected = <<END
277
- #{@testfile}: <B>.</B><B>.</B><R>f</R><R>E</R><Y>s</Y><Y>t</Y><B>.</B><B>.</B>
294
+ ## _tmp_test.rb
295
+ * <b>Parent</b>: <C>.</C><C>.</C>
296
+ * <b>Child1</b>: <C>.</C><C>.</C>
297
+ * <b>Child2</b>: <R>f</R><E>E</E>
278
298
  ----------------------------------------------------------------------
279
299
  END
280
300
  #
@@ -289,9 +309,26 @@ END
289
309
  assert_eq serr, ""
290
310
  end
291
311
 
312
+ it "[!ef5v7] '-s compact' or '-sc' option prints test results in compact mode." do
313
+ expected = <<END
314
+ #{@testfile}: <C>.</C><C>.</C><R>f</R><E>E</E><Y>s</Y><Y>t</Y><C>.</C><C>.</C>
315
+ ----------------------------------------------------------------------
316
+ END
317
+ #
318
+ ret, sout, serr = run("-sc", @testfile)
319
+ assert_eq ret, 2
320
+ assert edit_actual(sout).start_with?(edit_expected(expected)), "invalid testcase output"
321
+ assert_eq serr, ""
322
+ #
323
+ ret, sout, serr = run("-s", "compact", @testfile)
324
+ assert_eq ret, 2
325
+ assert edit_actual(sout).start_with?(edit_expected(expected)), "invalid testcase output"
326
+ assert_eq serr, ""
327
+ end
328
+
292
329
  it "[!244te] '-s plain' or '-sp' option prints test results in plain mode." do
293
330
  expected = <<END
294
- <B>.</B><B>.</B><R>f</R><R>E</R><Y>s</Y><Y>t</Y><B>.</B><B>.</B>
331
+ <C>.</C><C>.</C><R>f</R><E>E</E><Y>s</Y><Y>t</Y><C>.</C><C>.</C>
295
332
  ----------------------------------------------------------------------
296
333
  END
297
334
  #
@@ -308,7 +345,7 @@ END
308
345
 
309
346
  it "[!ai61w] '-s quiet' or '-sq' option prints test results in quiet mode." do
310
347
  expected = <<END
311
- <R>f</R><R>E</R><Y>s</Y><Y>t</Y>
348
+ <R>f</R><E>E</E><Y>s</Y><Y>t</Y>
312
349
  ----------------------------------------------------------------------
313
350
  END
314
351
  #
@@ -325,11 +362,12 @@ END
325
362
 
326
363
  it "[!yz7g5] '-F topic=...' option filters topics." do
327
364
  expected = <<END
365
+ ## _tmp_test.rb
328
366
  * <b>Parent</b>
329
367
  * <b>Child1</b>
330
- - [<B>pass</B>] 1+1 should be 2
331
- - [<B>pass</B>] 1-1 should be 0
332
- ## total:2 (<B>pass:2</B>, fail:0, error:0, skip:0, todo:0) in 0.000s
368
+ - [<C>pass</C>] 1+1 should be 2
369
+ - [<C>pass</C>] 1-1 should be 0
370
+ ## total:2 (<C>pass:2</C>, fail:0, error:0, skip:0, todo:0) in 0.000s
333
371
  END
334
372
  #
335
373
  ret, sout, serr = run("-F", "topic=Child1", @testfile)
@@ -340,10 +378,11 @@ END
340
378
 
341
379
  it "[!ww2mp] '-F spec=...' option filters specs." do
342
380
  expected = <<END
381
+ ## _tmp_test.rb
343
382
  * <b>Parent</b>
344
383
  * <b>Child1</b>
345
- - [<B>pass</B>] 1-1 should be 0
346
- ## total:1 (<B>pass:1</B>, fail:0, error:0, skip:0, todo:0) in 0.000s
384
+ - [<C>pass</C>] 1-1 should be 0
385
+ ## total:1 (<C>pass:1</C>, fail:0, error:0, skip:0, todo:0) in 0.000s
347
386
  END
348
387
  #
349
388
  ret, sout, serr = run("-F", "spec=*1-1*", @testfile)
@@ -354,15 +393,16 @@ END
354
393
 
355
394
  it "[!8uvib] '-F tag=...' option filters by tag name." do
356
395
  expected = <<'END'
396
+ ## _tmp_test.rb
357
397
  * <b>Parent</b>
358
398
  * <b>Child1</b>
359
- - [<B>pass</B>] 1-1 should be 0
399
+ - [<C>pass</C>] 1-1 should be 0
360
400
  * <b>Child3</b>
361
401
  - [<Y>Skip</Y>] skip example <Y>(reason: a certain condition)</Y>
362
402
  - [<Y>TODO</Y>] todo example
363
403
  - <b>When x is negative</b>
364
- - [<B>pass</B>] [!6hs1j] x*x is positive.
365
- ## total:4 (<B>pass:2</B>, fail:0, error:0, <Y>skip:1</Y>, <Y>todo:1</Y>) in 0.000s
404
+ - [<C>pass</C>] [!6hs1j] x*x is positive.
405
+ ## total:4 (<C>pass:2</C>, fail:0, error:0, <Y>skip:1</Y>, <Y>todo:1</Y>) in 0.000s
366
406
  END
367
407
  #
368
408
  ret, sout, serr = run("-F", "tag={new,exp}", @testfile)
@@ -373,10 +413,11 @@ END
373
413
 
374
414
  it "[!m0iwm] '-F sid=...' option filters by spec id." do
375
415
  expected = <<'END'
416
+ ## _tmp_test.rb
376
417
  * <b>Parent</b>
377
418
  - <b>When x is negative</b>
378
- - [<B>pass</B>] [!6hs1j] x*x is positive.
379
- ## total:1 (<B>pass:1</B>, fail:0, error:0, skip:0, todo:0) in 0.000s
419
+ - [<C>pass</C>] [!6hs1j] x*x is positive.
420
+ ## total:1 (<C>pass:1</C>, fail:0, error:0, skip:0, todo:0) in 0.000s
380
421
  END
381
422
  #
382
423
  ret, sout, serr = run("-F", "sid=6hs1j", @testfile)
@@ -387,13 +428,14 @@ END
387
428
 
388
429
  it "[!noi8i] '-F' option supports negative filter." do
389
430
  expected = <<'END'
431
+ ## _tmp_test.rb
390
432
  * <b>Parent</b>
391
433
  * <b>Child1</b>
392
- - [<B>pass</B>] 1+1 should be 2
393
- - [<B>pass</B>] 1-1 should be 0
434
+ - [<C>pass</C>] 1+1 should be 2
435
+ - [<C>pass</C>] 1-1 should be 0
394
436
  - <b>Else</b>
395
- - [<B>pass</B>] [!pwiq7] x*x is also positive.
396
- ## total:3 (<B>pass:3</B>, fail:0, error:0, skip:0, todo:0) in 0.000s
437
+ - [<C>pass</C>] [!pwiq7] x*x is also positive.
438
+ ## total:3 (<C>pass:3</C>, fail:0, error:0, skip:0, todo:0) in 0.000s
397
439
  END
398
440
  #
399
441
  ret, sout, serr = run("-F", "tag!={fail,err,exp}", @testfile)
@@ -408,12 +450,23 @@ END
408
450
  end
409
451
  end
410
452
 
453
+ it "[!j01y7] if filerting by '-F' matched nothing, then prints zero result." do
454
+ expected = <<'END'
455
+ ## total:0 (pass:0, fail:0, error:0, skip:0, todo:0) in 0.000s
456
+ END
457
+ #
458
+ ret, sout, serr = run("-F", "tag=blablabla", @testfile)
459
+ assert_eq ret, 0
460
+ assert_eq edit_actual(sout), edit_expected(expected)
461
+ assert_eq serr, ""
462
+ end
463
+
411
464
  it "[!6ro7j] '--color=on' option enables output coloring forcedly." do
412
465
  [true, false].each do |bool|
413
466
  [true, false].each do |tty|
414
467
  Oktest::Config.color_enabled = bool
415
468
  _, sout, serr = run("--color=on", @testfile, tty: tty)
416
- assert sout.include?(edit_expected("[<B>pass</B>]")), "should contain blue string"
469
+ assert sout.include?(edit_expected("[<C>pass</C>]")), "should contain blue string"
417
470
  assert sout.include?(edit_expected("[<R>Fail</R>]")), "should contain red string"
418
471
  assert sout.include?(edit_expected("[<Y>Skip</Y>]")), "should contain yellos string"
419
472
  assert_eq serr, ""
@@ -426,7 +479,7 @@ END
426
479
  [true, false].each do |tty|
427
480
  Oktest::Config.color_enabled = bool
428
481
  _, sout, serr = run("--color", @testfile, tty: tty)
429
- assert sout.include?(edit_expected("[<B>pass</B>]")), "should contain blue string"
482
+ assert sout.include?(edit_expected("[<C>pass</C>]")), "should contain blue string"
430
483
  assert sout.include?(edit_expected("[<R>Fail</R>]")), "should contain red string"
431
484
  assert sout.include?(edit_expected("[<Y>Skip</Y>]")), "should contain yellos string"
432
485
  assert_eq serr, ""
@@ -439,7 +492,7 @@ END
439
492
  [true, false].each do |tty|
440
493
  Oktest::Config.color_enabled = bool
441
494
  _, sout, serr = run("--color=off", @testfile, tty: tty)
442
- assert !sout.include?(edit_expected("[<B>pass</B>]")), "should not contain blue string"
495
+ assert !sout.include?(edit_expected("[<C>pass</C>]")), "should not contain blue string"
443
496
  assert !sout.include?(edit_expected("[<R>Fail</R>]")), "should not contain red string"
444
497
  assert !sout.include?(edit_expected("[<Y>Skip</Y>]")), "should not contain yellos string"
445
498
  assert_eq serr, ""
@@ -453,8 +506,8 @@ END
453
506
  end
454
507
  end
455
508
 
456
- it "[!dk8eg] '-C' or '--create' option prints test code skeleton." do
457
- ret, sout, serr = run("-C")
509
+ it "[!dk8eg] '-S' or '--skeleton' option prints test code skeleton." do
510
+ ret, sout, serr = run("-S")
458
511
  assert_eq ret, 0
459
512
  assert_eq sout, Oktest::MainApp::SKELETON
460
513
  assert_eq serr, ""