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 +4 -4
- data/README.md +32 -10
- data/Rakefile +46 -9
- data/lib/minitest/ok.rb +120 -18
- data/test/minitest/ok_test.rb +162 -26
- data/test/test_helper.rb +1 -1
- metadata +6 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8da6c203333bd5267e00d76d25285c2e9c54e960d8cc4445230c5524bbb6c1c1
         | 
| 4 | 
            +
              data.tar.gz: ded479a36c207e4c298e722a83e709234ff3b4a10c82513bbfc320ef771923ce
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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 | 
            -
                 | 
| 73 | 
            -
                ex = ok { | 
| 74 | 
            -
                ex = ok { | 
| 75 | 
            -
                 | 
| 76 | 
            -
                 | 
| 77 | 
            -
             | 
| 78 | 
            -
                 | 
| 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}. | 
| 89 | 
            -
                ok {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'. | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 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  | 
| 23 | 
            -
                $ rake edit rel | 
| 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  | 
| 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 | 
| 30 | 
            -
                $ git tag  | 
| 31 | 
            -
                $ git push -u origin  | 
| 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. | 
| 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}. | 
| 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. | 
| 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  | 
| 379 | 
            -
                  ##   ex = ok { proc { 1/0 } }.raise?(ZeroDivisionError, /^divided by  | 
| 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 | 
            -
                         | 
| 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 | 
            -
                         | 
| 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}. | 
| 633 | 
            -
                  ##   ok {false}. | 
| 634 | 
            -
                  ##   ok {true}. | 
| 635 | 
            -
                  ##   ok {0}. | 
| 636 | 
            -
                  ##   ok {""}. | 
| 637 | 
            -
                  ##   ok {[]}. | 
| 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  | 
| 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.
         | 
    
        data/test/minitest/ok_test.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            # -*- coding: utf-8 -*-
         | 
| 2 2 |  | 
| 3 3 | 
             
            ###
         | 
| 4 | 
            -
            ### $Release: 0. | 
| 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  | 
| 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 | 
            -
                   | 
| 396 | 
            -
                     | 
| 397 | 
            -
             | 
| 398 | 
            -
             | 
| 399 | 
            -
             | 
| 400 | 
            -
             | 
| 401 | 
            -
             | 
| 402 | 
            -
             | 
| 403 | 
            -
             | 
| 404 | 
            -
             | 
| 405 | 
            -
                     | 
| 406 | 
            -
                   | 
| 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 | 
            -
                   | 
| 415 | 
            -
             | 
| 416 | 
            -
             | 
| 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 {  | 
| 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 | 
            -
                   | 
| 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 | 
            -
                   | 
| 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 '# | 
| 867 | 
            +
              describe '#falsy?' do
         | 
| 740 868 |  | 
| 741 869 | 
             
                it "calles refute()." do
         | 
| 742 | 
            -
                  should_not_raise  { ok {nil}. | 
| 743 | 
            -
                  ex = should_raise { ok {123}. | 
| 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. | 
| 750 | 
            -
                  ex = should_raise { ok {nil}.NOT. | 
| 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
    
    
    
        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. | 
| 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:  | 
| 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. | 
| 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: []
         |