minitest-ok 0.3.2 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40646a1c992adca79a399e48636078e3d6396b6c23240d834b45c74f3301b313
4
- data.tar.gz: acef8748174df73545018825580e38748e7f5b43afefdf3b6ebdbcd25efde8ec
3
+ metadata.gz: 8da6c203333bd5267e00d76d25285c2e9c54e960d8cc4445230c5524bbb6c1c1
4
+ data.tar.gz: ded479a36c207e4c298e722a83e709234ff3b4a10c82513bbfc320ef771923ce
5
5
  SHA512:
6
- metadata.gz: edde25cb1f5e4e9b8c3be8e30494e552e1a7e4862e8c610a3aaadc58796103e879186067d6dc0439d3b1b6b0883dcc5a55a042a3207e55434c2a3873c4c87fbc
7
- data.tar.gz: 215f1c821b74a530b662386d9ae18405c6cd1fcd470c9abd5a8532854878a95412767909047db0050fc6a0b201d2fb7f534b7b0ff64ac9b8680c3bb57f5c7e94
6
+ metadata.gz: 31680ed69498d8d4eeaf1878af6bd3c8a20dab0e55cdb582837466c6b47efe3bc879479a53ac26b00bef3aca9dfc3960c204a7b0b97b4c4c1e78c3208ac93a84
7
+ data.tar.gz: 5f03eda1e5aa4a4846ad36d799f6bd77d1868668c8c9777b18f1851e9d92fba590f74091ddd3da168f6b6668b5bb1ea3ba86bb407f6ed752d742ffa30b26efe7
data/README.md CHANGED
@@ -69,13 +69,21 @@ describe 'Minitest::Ok' do
69
69
  ok {3.14159}.NOT.in_epsilon?(3.14, 0.0001) # same as refute_in_epsilon 3.14, 3.14159, 0.0001
70
70
 
71
71
  ## exception
72
- ex = ok {proc { 1/0 }}.raise?(ZeroDivisionError) # same as assert_raise(...)
73
- ex = ok {proc { 1/0 }}.raise?(ZeroDivisionError, "divided by zero")
74
- ex = ok {proc { 1/0 }}.raise?(ZeroDivisionError, /^divided by zero$/)
75
- p ex #=> #<ZeroDivisionError: divided by 0>
76
- ok {proc { 1/1 }}.NOT.raise?(Exception)
77
-
78
- ok {proc {throw :exit}}.throw?(:exit) # same as assert_throws(:exit) {...}
72
+ pr = proc { 1 / 0 }
73
+ ex = ok {pr}.raise?(ZeroDivisionError) # same as assert_raise(...)
74
+ ex = ok {pr}.raise?(ZeroDivisionError, "divided by 0")
75
+ ex = ok {pr}.raise?(ZeroDivisionError, /^divided by 0$/)
76
+ p ex #=> #<ZeroDivisionError>
77
+ ok {pr}.raise?(ZeroDivisionError, /^divided by 0$/) do |ex|
78
+ p ex # optional block will be yielded when exception raised
79
+ end
80
+
81
+ pr2 = proc { 1.0 / 0.0 }
82
+ ok {pr2}.raise_nothing?(Exception) # oktest >= 0.4
83
+ ok {pr2}.NOT.raise?(Exception)
84
+
85
+ pr3 = proc { throw :exit }
86
+ ok {pr3}.throw?(:exit) # same as assert_throws(:exit) {...}
79
87
 
80
88
  ## stdout and stderr
81
89
  ok {proc {puts 'X'}}.output?("X\n") # same as assert_output {...}
@@ -85,8 +93,8 @@ describe 'Minitest::Ok' do
85
93
  ok {123}.truthy? # similar to assert 123
86
94
  ok {0}.truthy? # similar to assert 0
87
95
  ok {""}.truthy? # similar to assert ""
88
- ok {false}.falthy? # similar to refute false
89
- ok {nil}.falthy? # similar to refute nil
96
+ ok {false}.falsy? # similar to refute false
97
+ ok {nil}.falsy? # similar to refute nil
90
98
 
91
99
  ## predicates
92
100
  ok {""}.empty? # same as assert_empty? ""
@@ -104,7 +112,7 @@ describe 'Minitest::Ok' do
104
112
  obj.instance_variable_set('@x', 10)
105
113
  ok {obj}.instance_variable_defined?('@x')
106
114
 
107
- ok {'logo.png'}.end_with?('.png') # same as assert 'logon.png'.start_with?('.png')
115
+ ok {'logo.png'}.end_with?('.png') # same as assert 'logon.png'.end_with?('.png')
108
116
  ok {[1,2,3]}.any? {|x| x % 2 == 0} # same as assert [1,2,3].any? {...}
109
117
  ok {[1,2,3]}.NOT.all? {|x| x < 0 } # same as refute [1,2,3].all? {...}
110
118
 
@@ -138,6 +146,20 @@ $License: MIT License $
138
146
 
139
147
  ## History
140
148
 
149
+
150
+ ### 2024-09-16: Release 0.4.0
151
+
152
+ * [enhance] `ok {x}.nil?` now calls `assert_nil?(x)`.
153
+ * [enhance] `ok {}.raise?()` now accepts optional block parameter yielded when exception raised.
154
+ * [enhance] `ok {}.raise_nothing?` defined which represens nothing raised.
155
+ * [bugfix] `ok {a}.eql?(e)` now calls `assert_true a.eql?(e)` instead of just calling `a.eql?(e)`.
156
+
157
+
158
+ ### 2021-08-02: Release 0.3.3
159
+
160
+ * [bugfix] rename `ok {}.falthy?` to `ok {}.falsy?`.
161
+
162
+
141
163
  ### 2021-01-17: Release 0.3.2
142
164
 
143
165
  * [bugfix] fix to work on Ruby 3.
data/Rakefile CHANGED
@@ -1,4 +1,8 @@
1
- require "bundler/gem_tasks"
1
+ begin
2
+ require "bundler/gem_tasks"
3
+ rescue LoadError => exc
4
+ warn "[warning] failed to load '#{exc.path}'"
5
+ end
2
6
  require "rake/testtask"
3
7
 
4
8
  Rake::TestTask.new(:test) do |t|
@@ -7,11 +11,44 @@ Rake::TestTask.new(:test) do |t|
7
11
  t.test_files = FileList['test/**/*_test.rb']
8
12
  end
9
13
 
10
- task :default => :test
11
14
 
15
+ desc "run test for multiple version of Ruby"
16
+ task :'test:all' do
17
+ vs_home = ENV['VS_HOME'] or
18
+ fail "$VS_HOME required."
19
+ failed = false
20
+ ruby_vers = %w[3.3 3.2 3.1 3.0 2.7 2.6 2.5 2.4 2.3]
21
+ ruby_vers.each do |ver|
22
+ puts "\e[33m========== Ruby #{ver} ==========\e[0m"
23
+ ruby_bin = Dir.glob("#{vs_home}/ruby/#{ver}.*/bin").last
24
+ if ! ruby_bin
25
+ $stderr.puts "\e[31m[ERROR] Ruby #{ver} not installed.\e[0m\n\n"
26
+ failed = true
27
+ next
28
+ end
29
+ sh "#{ruby_bin}/ruby test/minitest/ok_test.rb" do |status_ok|
30
+ failed = true unless status_ok
31
+ end
32
+ sleep 0.2
33
+ end
34
+ exit 1 if failed
35
+ end
12
36
 
13
- desc "show how to release"
37
+
38
+ task :default => :help
39
+
40
+
41
+ desc "list tasks"
14
42
  task :help do
43
+ system "rake -T"
44
+ end
45
+
46
+
47
+ desc "show how to release"
48
+ task :guide do
49
+ rel = ENV['rel'] or abort "rake help: required 'rel=X.X.X'"
50
+ rel =~ /(\d+\.\d+)/
51
+ branch = "rel-#{$1}"
15
52
  puts <<END
16
53
  How to release:
17
54
 
@@ -19,16 +56,16 @@ How to release:
19
56
  $ git diff
20
57
  $ which ruby
21
58
  $ rake test # for confirmation
22
- $ git checkout -b rel-1.0 # or git checkout rel-1.0
23
- $ rake edit rel=1.0.0
59
+ $ git checkout -b #{branch} # or git checkout #{branch}
60
+ $ rake edit rel=#{rel}
24
61
  $ git diff
25
- $ git commit -a -m "release preparation for 1.0.0"
62
+ $ git commit -a -m "release preparation for #{rel}"
26
63
  $ rake build # for confirmation
27
64
  $ rake install # for confirmation
28
65
  $ #rake release
29
- $ gem push pkg/minitest-ok-1.0.0.gem
30
- $ git tag v1.0.0
31
- $ git push -u origin rel-1.0
66
+ $ gem push pkg/minitest-ok-#{rel}.gem
67
+ $ git tag v#{rel}
68
+ $ git push -u origin #{branch}
32
69
  $ git push --tags
33
70
  END
34
71
 
data/lib/minitest/ok.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 0.3.2 $
4
+ ### $Release: 0.4.0 $
5
5
  ### $Copyright: copyright(c) 2015-2018 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
@@ -34,7 +34,7 @@ module Minitest
34
34
  ## ok {1..9}.include?(5) # same as assert_includes 5, 1..9
35
35
  ## ok {1..9}.NOT.include?(0) # same as refute_includes 0, 1..9
36
36
  ## ok {""}.truthy? # same as assert true, !!""
37
- ## ok {nil}.falthy? # same as assert false, !!""
37
+ ## ok {nil}.falsy? # same as assert false, !!""
38
38
  ##
39
39
  ## ex = ok { proc { 1 / 0 } }.raise?(ZeroDivisionError, "divided by 0")
40
40
  ## p ex #=> #<ZeroDivisionError: divided by 0>
@@ -59,7 +59,7 @@ module Minitest
59
59
 
60
60
  module Ok
61
61
 
62
- VERSION = '$Release: 0.3.2 $'.split()[1]
62
+ VERSION = '$Release: 0.4.0 $'.split()[1]
63
63
 
64
64
 
65
65
  class Msg < Proc # :nodoc:
@@ -260,6 +260,81 @@ module Minitest
260
260
  raise
261
261
  end
262
262
 
263
+ ##--
264
+ ##
265
+ ## Same as <tt>assert_predicate(<actual>, :equal?)</tt>.
266
+ ##
267
+ #def eql?(expected)
268
+ # _mark_as_tested()
269
+ # __assert_predicate(:eql?, expected)
270
+ #rescue Minitest::Assertion => ex
271
+ # ex.backtrace.delete_if {|bt| bt.start_with?(__FILE__) }
272
+ # raise
273
+ #end
274
+ ##++
275
+
276
+ ##
277
+ ## Same as <tt>assert_predicate()</tt>.
278
+ ##
279
+ self.instance_methods().grep(/\?/).each do |x|
280
+ next if x == :equal?
281
+ next if x == :nil? || x == :frozen? || x == :respond_to?
282
+ next if x == :is_a? || x == :kind_of? || x == :instance_of?
283
+ next if x == :instance_variable_defined? || x == :tainted?
284
+ eval <<-END, binding(), __FILE__, __LINE__ + 1
285
+ def #{x}(*args, **kwargs, &block)
286
+ _mark_as_tested()
287
+ __assert_predicate(:#{x}, *args, **kwargs, &block)
288
+ rescue Minitest::Assertion => ex
289
+ #ex.backtrace.delete_if {|bt| bt.start_with?(__FILE__) }
290
+ raise
291
+ end
292
+ END
293
+ end
294
+
295
+ def __assert_predicate(symbol, *args, **kwargs, &block)
296
+ no_params = args.empty? && kwargs.empty? && ! block_given?()
297
+ if no_params
298
+ if ! @not
299
+ @context.assert_predicate(@actual, symbol)
300
+ else
301
+ @context.refute_predicate(@actual, symbol)
302
+ end
303
+ else
304
+ if RUBY_VERSION >= "2.7"
305
+ result = @actual.__send__(symbol, *args, **kwargs, &block)
306
+ elsif ! kwargs.empty?
307
+ s = "ok{}.#{symbol}(#{kwargs.inspect[1..-2]})"
308
+ raise ArgumentError, "#{s}: Keyword argument is not supported."
309
+ else
310
+ result = @actual.__send__(symbol, *args, &block)
311
+ end
312
+ if ! @not
313
+ @context.assert result, Msg.new { "Expected #{@actual.inspect}.#{symbol}(#{args.inspect[1..-2]}) but failed." }
314
+ else
315
+ @context.refute result, Msg.new { "Expected #{@actual.inspect}.#{symbol}(#{args.inspect[1..-2]}) to fail but succeeded." }
316
+ end
317
+ end
318
+ end
319
+ private :__assert_predicate
320
+
321
+ ##
322
+ ## Same as <tt>assert_il()</tt>.
323
+ ##
324
+ ## ok {nil}.nil? # Pass
325
+ ## ok {" "}.nil? # Fail
326
+ ## ok {" "}.NOT.nil? # Pass
327
+ ##
328
+ def nil?()
329
+ _mark_as_tested()
330
+ @context.assert_nil @actual unless @not
331
+ @context.refute_nil @actual if @not
332
+ self
333
+ rescue Minitest::Assertion => ex
334
+ ex.backtrace.delete_if {|bt| bt.start_with?(__FILE__) }
335
+ raise
336
+ end
337
+
263
338
  ##
264
339
  ## Same as <tt>assert_kind_of()</tt>.
265
340
  ##
@@ -372,15 +447,19 @@ module Minitest
372
447
 
373
448
  ##
374
449
  ## Same as <tt>assert_raises()</tt>.
450
+ ## Optional block will be yielded only when exception raised with exception raised.
375
451
  ##
376
452
  ## ex = ok { proc { 1/0 } }.raise?(ZeroDivisionError) # Pass
377
453
  ## p ex.class #=> ZeroDivisionError
378
- ## ex = ok { proc { 1/0 } }.raise?(ZeroDivisionError, "divided by zero")
379
- ## ex = ok { proc { 1/0 } }.raise?(ZeroDivisionError, /^divided by zero$/)
454
+ ## ex = ok { proc { 1/0 } }.raise?(ZeroDivisionError, "divided by 0")
455
+ ## ex = ok { proc { 1/0 } }.raise?(ZeroDivisionError, /^divided by 0$/)
456
+ ## ok { proc { 1/0 } }.raise?(ZeroDivisionError) do |exc|
457
+ ## ok {exc.message} =~ /^divided by 0$/
458
+ ## end
380
459
  ##
381
460
  ## ok { proc { 1 / 1 } }.NOT.raise?(Exception) # Pass
382
461
  ##
383
- def raise?(exception_class, message=nil)
462
+ def raise?(exception_class, message=nil, &b)
384
463
  _mark_as_tested()
385
464
  ex = nil
386
465
  unless @not
@@ -392,6 +471,7 @@ module Minitest
392
471
  @context.assert_equal message, ex.message
393
472
  end
394
473
  end
474
+ yield ex if block_given?()
395
475
  else
396
476
  begin
397
477
  @actual.call
@@ -407,6 +487,29 @@ module Minitest
407
487
  raise
408
488
  end
409
489
 
490
+ ##
491
+ ## Asserts that a Proc object raises nothing.
492
+ ## Not available with <tt>.NOT()</tt>.
493
+ ## Optional block will be yielded when unexpected exception raised.
494
+ ##
495
+ ## pr = proc { 1.0 / 0.0 }
496
+ ## ok {pr}.raise_nothing?
497
+ ##
498
+ def raise_nothing?(&b)
499
+ _mark_as_tested()
500
+ ! @not or
501
+ raise "`NOT.raise_nothing?` is not supported because double negation is difficult to understand."
502
+ @context.assert true # count up number of assertions
503
+ begin
504
+ @actual.call
505
+ rescue Exception => ex
506
+ yield ex if block_given?()
507
+ #@context.assert false, "Exception #{ex.class} raised unexpectedly."
508
+ ex.backtrace.delete_if {|bt| bt.start_with?(__FILE__) }
509
+ raise
510
+ end
511
+ end
512
+
410
513
  ##
411
514
  ## Same as <tt>assert_throws()</tt>.
412
515
  ##
@@ -571,7 +674,7 @@ module Minitest
571
674
  ## ok {'logo.jpg'}.end_with?('.jpg') # Pass
572
675
  ## ok {[1, 2, 3]}.all? {|x| x <= 3 } # Pass
573
676
  ##
574
- def method_missing(symbol, *args, &block)
677
+ def method_missing(symbol, *args, **kwargs, &block)
575
678
  unless symbol.to_s =~ /\?\z/
576
679
  return super
577
680
  end
@@ -582,8 +685,7 @@ module Minitest
582
685
  begin
583
686
  @context.__send__("assert_#{symbol.to_s[0..-2]}", @actual, *args, &block)
584
687
  rescue NoMethodError
585
- result = @actual.__send__(symbol, *args, &block)
586
- @context.assert result, Msg.new { "Expected #{@actual.inspect}.#{symbol}(#{args.inspect[1..-2]}) but failed." }
688
+ __assert_predicate(symbol, *args, **kwargs, &block)
587
689
  end
588
690
  else
589
691
  ## Try refute_xxxx() at first.
@@ -591,8 +693,7 @@ module Minitest
591
693
  begin
592
694
  @context.__send__("refute_#{symbol.to_s[0..-2]}", @actual, *args, &block)
593
695
  rescue NoMethodError
594
- result = @actual.__send__(symbol, *args, &block)
595
- @context.refute result, Msg.new { "Expected #{@actual.inspect}.#{symbol}(#{args.inspect[1..-2]}) to fail but succeeded." }
696
+ __assert_predicate(symbol, *args, **kwargs, &block)
596
697
  end
597
698
  end
598
699
  self
@@ -629,14 +730,14 @@ module Minitest
629
730
  ##
630
731
  ## Tests whether actual is false or nil.
631
732
  ##
632
- ## ok {nil}.falthy? # Pass
633
- ## ok {false}.falthy? # Pass
634
- ## ok {true}.falthy? # Fail
635
- ## ok {0}.falthy? # Fail
636
- ## ok {""}.falthy? # Fail
637
- ## ok {[]}.falthy? # Fail
733
+ ## ok {nil}.falsy? # Pass
734
+ ## ok {false}.falsy? # Pass
735
+ ## ok {true}.falsy? # Fail
736
+ ## ok {0}.falsy? # Fail
737
+ ## ok {""}.falsy? # Fail
738
+ ## ok {[]}.falsy? # Fail
638
739
  ##
639
- def falthy?
740
+ def falsy?
640
741
  _mark_as_tested()
641
742
  unless @not
642
743
  @context.refute @actual, Msg.new { "Expected (!! #{@actual.inspect}) == false, but not." }
@@ -648,6 +749,7 @@ module Minitest
648
749
  ex.backtrace.delete_if {|bt| bt.start_with?(__FILE__) }
649
750
  raise
650
751
  end
752
+ alias falthy? falsy?
651
753
 
652
754
  ##
653
755
  ## Tests attribute value.
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 0.3.2 $
4
+ ### $Release: 0.4.0 $
5
5
  ### $Copyright: copyright(c) 2015-2018 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
@@ -21,10 +21,10 @@ describe Minitest::Ok::AssertionObject do
21
21
  end
22
22
  end
23
23
 
24
- def should_raise
24
+ def should_raise(exception_class=Minitest::Assertion)
25
25
  begin
26
26
  yield
27
- rescue Minitest::Assertion => ex
27
+ rescue exception_class => ex
28
28
  return ex
29
29
  else
30
30
  _called = caller(1).grep(/ok_test\.rb/).map {|x| " - #{x}" }.join("\n")
@@ -249,6 +249,25 @@ describe Minitest::Ok::AssertionObject do
249
249
  end
250
250
 
251
251
 
252
+ describe '#nil?' do
253
+
254
+ it "calls assert_nil()." do
255
+ should_not_raise { ok {nil}.nil? }
256
+ ex = should_raise { ok {" "}.nil? }
257
+ msg = "Expected \" \" to be nil."
258
+ assert_equal msg, ex.message
259
+ end
260
+
261
+ it "calls refute_nil() after NOT() called." do
262
+ should_not_raise { ok {" "}.NOT.nil? }
263
+ ex = should_raise { ok {nil}.NOT.nil? }
264
+ msg = "Expected nil to not be nil."
265
+ assert_equal msg, ex.message
266
+ end
267
+
268
+ end
269
+
270
+
252
271
  describe '#kind_of?' do
253
272
 
254
273
  it "calls assert_kind_of()." do
@@ -392,18 +411,33 @@ describe Minitest::Ok::AssertionObject do
392
411
  should_not_raise { ok {proc{1/0}}.raise?(ZeroDivisionError, "divided by 0") }
393
412
  ex = should_raise { ok {proc{1/0}}.raise?(ZeroDivisionError, "foobar") }
394
413
  #expected = "Expected: \"foobar\"\n Actual: \"divided by 0\""
395
- expected = [
396
- '--- expected',
397
- '+++ actual',
398
- #'@@ -1,2 +1,2 @@',
399
- #'-# encoding: UTF-8',
400
- '@@ -1 +1,3 @@',
401
- '-"foobar"',
402
- '+# encoding: ASCII-8BIT',
403
- '+# valid: true',
404
- '+"divided by 0"',
405
- '',
406
- ].join("\n")
414
+ if RUBY_VERSION >= "2.7"
415
+ expected = [
416
+ '--- expected',
417
+ '+++ actual',
418
+ '@@ -1 +1,3 @@',
419
+ '-"foobar"',
420
+ '+# encoding: ASCII-8BIT',
421
+ '+# valid: true',
422
+ '+"divided by 0"',
423
+ '',
424
+ ].join("\n")
425
+ elsif RUBY_VERSION >= "2.4"
426
+ expected = [
427
+ '--- expected',
428
+ '+++ actual',
429
+ #'@@ -1 +1,3 @@',
430
+ '@@ -1 +1,2 @@',
431
+ '-"foobar"',
432
+ '+# encoding: ASCII-8BIT',
433
+ #'+# valid: true',
434
+ '+"divided by 0"',
435
+ '',
436
+ ].join("\n")
437
+ else
438
+ expected = ("Expected: \"foobar\"\n"\
439
+ " Actual: \"divided by 0\"")
440
+ end
407
441
  assert_equal expected, ex.message
408
442
  end
409
443
 
@@ -411,12 +445,93 @@ describe Minitest::Ok::AssertionObject do
411
445
  should_not_raise { ok {proc{1/0}}.raise?(ZeroDivisionError, /by [0]/) }
412
446
  ex = should_raise { ok {proc{1/0}}.raise?(ZeroDivisionError, /by 99/) }
413
447
  #expected = "Expected /by 99/ to match \"divided by 0\"."
414
- expected = ('Expected /by 99/ to match # encoding: ASCII-8BIT'+"\n"+
415
- '# valid: true'+"\n"+
416
- '"divided by 0".')
448
+ if RUBY_VERSION >= "2.7"
449
+ expected = ("Expected /by 99/ to match # encoding: ASCII-8BIT\n"\
450
+ "# valid: true\n"\
451
+ "\"divided by 0\".")
452
+ elsif RUBY_VERSION >= "2.4"
453
+ expected = ("Expected /by 99/ to match # encoding: ASCII-8BIT\n"\
454
+ "\"divided by 0\".")
455
+ else
456
+ expected = "Expected /by 99/ to match \"divided by 0\"."
457
+ end
417
458
  assert_equal expected, ex.message
418
459
  end
419
460
 
461
+ it "can take optional block which is yielded only when exception raised." do
462
+ msg = /divided by (0|zero)/
463
+ called = false
464
+ ok { proc { 1 / 0 } }.raise?(ZeroDivisionError, msg) do |ex|
465
+ called = true
466
+ end
467
+ assert_equal true, called
468
+ #
469
+ begin
470
+ called = false
471
+ ok { proc {1.0 / 0.0} }.raise?(ZeroDivisionError, msg) do |ex|
472
+ called = true
473
+ end
474
+ assert false
475
+ rescue Minitest::Assertion => _ignore
476
+ end
477
+ assert_equal false, called
478
+ end
479
+
480
+ end
481
+
482
+
483
+ describe '#raise_nothing?' do
484
+
485
+ it "simply calls proc object, does nothing even if exception raised." do
486
+ should_not_raise { ok {proc{1.0/0.0}}.raise_nothing? }
487
+ ex = should_raise(ZeroDivisionError) { ok {proc{1/0}}.raise_nothing? }
488
+ assert_same ZeroDivisionError, ex.class
489
+ assert_equal "divided by 0", ex.message
490
+ end
491
+
492
+ it "counts number of assertion if nothing raised." do
493
+ n1 = self.assertions
494
+ ok { proc { 1.0 / 0.0 } }.raise_nothing?
495
+ n2 = self.assertions
496
+ assert_equal n1+1, n2
497
+ #
498
+ n3 = self.assertions
499
+ begin
500
+ ok { proc { 1 / 0 } }.raise_nothing?
501
+ raise "-- should not reach --"
502
+ rescue Exception
503
+ end
504
+ n4 = self.assertions
505
+ assert_equal n3+1, n4
506
+ end
507
+
508
+ it "yields optional block if any exception raised." do
509
+ called = false
510
+ ok { proc { 1.0 / 0.0 } }.raise_nothing? do
511
+ called = true
512
+ end
513
+ assert_equal false, called
514
+ #
515
+ begin
516
+ ok { proc { 1 / 0 } }.raise_nothing? do
517
+ called = true
518
+ end
519
+ assert false
520
+ rescue Exception
521
+ end
522
+ assert_equal true, called
523
+ end
524
+
525
+ it "deletes lines containing 'minitest/ok.rb' from backtrace of exception." do
526
+ begin
527
+ ok { proc { 1 / 0 } }.raise_nothing?
528
+ assert false
529
+ rescue ZeroDivisionError => ex
530
+ found = ex.backtrace.any? {|bt| bt.include?("minitest/ok.rb") }
531
+ assert !found
532
+ end
533
+ end
534
+
420
535
  end
421
536
 
422
537
 
@@ -427,7 +542,7 @@ describe Minitest::Ok::AssertionObject do
427
542
  ex = should_raise { ok {proc { throw :exit }}.throw?(:finish) }
428
543
  msg = "Expected :finish to have been thrown, not :exit."
429
544
  assert_equal msg, ex.message
430
- ex = should_raise { ok {proc { var = 1 + 1 }}.throw?(:exit) }
545
+ ex = should_raise { ok {proc { _var = 1 + 1 }}.throw?(:exit) }
431
546
  msg = "Expected :exit to have been thrown."
432
547
  assert_equal msg, ex.message
433
548
  end
@@ -659,13 +774,26 @@ describe Minitest::Ok::AssertionObject do
659
774
  (x = ok {nil}).append('bar')
660
775
  end
661
776
  x._mark_as_tested()
662
- msg = /^undefined method `append' for \#<Mini[tT]est::Ok::AssertionObject:\w+/
777
+ if RUBY_VERSION >= "3.3"
778
+ msg = /^undefined method `append' for an instance of Mini[tT]est::Ok::AssertionObject/
779
+ else
780
+ msg = /^undefined method `append' for \#<Mini[tT]est::Ok::AssertionObject:\w+/
781
+ end
663
782
  assert_match msg, ex.message
664
783
  #
665
784
  ex = assert_raises(NoMethodError) do
666
785
  ok {nil}.start_with?('bar')
667
786
  end
668
- msg = "undefined method `start_with?' for nil:NilClass"
787
+ if RUBY_VERSION >= "3.3"
788
+ msg = "undefined method `start_with?' for nil"
789
+ elsif RUBY_VERSION =~ /^3\.1\./
790
+ msg = ("undefined method `start_with?' for nil:NilClass\n"\
791
+ "\n"\
792
+ " result = @actual.__send__(symbol, *args, **kwargs, &block)\n"\
793
+ " ^^^^^^^^^")
794
+ else
795
+ msg = "undefined method `start_with?' for nil:NilClass"
796
+ end
669
797
  assert_equal msg, ex.message
670
798
  end
671
799
 
@@ -736,18 +864,18 @@ describe Minitest::Ok::AssertionObject do
736
864
  end
737
865
 
738
866
 
739
- describe '#falthy?' do
867
+ describe '#falsy?' do
740
868
 
741
869
  it "calles refute()." do
742
- should_not_raise { ok {nil}.falthy? }
743
- ex = should_raise { ok {123}.falthy? }
870
+ should_not_raise { ok {nil}.falsy? }
871
+ ex = should_raise { ok {123}.falsy? }
744
872
  msg = 'Expected (!! 123) == false, but not.'
745
873
  assert_equal msg, ex.message
746
874
  end
747
875
 
748
876
  it "calles assert() after NOT() called." do
749
- should_not_raise { ok {123}.NOT.falthy? }
750
- ex = should_raise { ok {nil}.NOT.falthy? }
877
+ should_not_raise { ok {123}.NOT.falsy? }
878
+ ex = should_raise { ok {nil}.NOT.falsy? }
751
879
  msg = 'Expected (!! nil) == true, but not.'
752
880
  assert_equal msg, ex.message
753
881
  end
@@ -947,4 +1075,12 @@ describe Minitest::Ok::AssertionObject do
947
1075
  end
948
1076
 
949
1077
 
1078
+ it "predicate methods are handled by `assert_predicate()`." do
1079
+ should_not_raise { ok {1+1}.eql?(2) }
1080
+ ex = should_raise { ok {1+1}.eql?(0) }
1081
+ msg = "Expected 2.eql?(0) but failed."
1082
+ assert_equal msg, ex.message
1083
+ end
1084
+
1085
+
950
1086
  end
data/test/test_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  ###
4
- ### $Release: 0.3.2 $
4
+ ### $Release: 0.4.0 $
5
5
  ### $Copyright: copyright(c) 2015-2018 kuwata-lab.com all rights reserved $
6
6
  ### $License: MIT License $
7
7
  ###
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-ok
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - makoto kuwata
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-17 00:00:00.000000000 Z
11
+ date: 2024-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -48,7 +48,7 @@ homepage: https://github.com/kwatch/minitest-ok
48
48
  licenses:
49
49
  - MIT-License
50
50
  metadata: {}
51
- post_install_message:
51
+ post_install_message:
52
52
  rdoc_options: []
53
53
  require_paths:
54
54
  - lib
@@ -63,8 +63,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  requirements: []
66
- rubygems_version: 3.1.2
67
- signing_key:
66
+ rubygems_version: 3.5.11
67
+ signing_key:
68
68
  specification_version: 4
69
69
  summary: "'ok {1+1} == 2' instead of 'assert_equal 2, 1+1'"
70
70
  test_files: []