Sha256: ca86961d1908ea8fea638f4df1a06d9c747228e2b1d4987b9d32ee5494beca2b

Contents?: true

Size: 1009 Bytes

Versions: 7

Compression:

Stored size: 1009 Bytes

Contents

require 'minitest/spec'

require 'minitest/around/version'
require 'minitest/around/unit'

Minitest::Spec::DSL.class_eval do
  # - resume to call first part
  # - execute test
  # - resume fiber to execute last part
  def around(*args, &block)
    fib = nil
    before do
      fib = Fiber.new do |context, resume|
        begin
          context.instance_exec(resume, &block)
        rescue Object
          fib = :failed
          raise
        end
      end
      fib.resume(self, lambda { Fiber.yield })
    end
    after  { fib.resume unless fib == :failed }
  end

  # Minitest does not support multiple before/after blocks
  remove_method :before
  def before(type=nil, &block)
    include Module.new { define_method(:setup) { super(); instance_exec(&block) } }
  end

  remove_method :after
  def after(type=nil, &block)
    include(Module.new do
      define_method(:teardown) do
        begin
          instance_exec(&block)
        ensure
          super()
        end
      end
    end)
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
plaid-14.13.0 vendor/bundle/ruby/3.0.0/gems/minitest-around-0.5.0/lib/minitest/around/spec.rb
plaid-14.12.1 vendor/bundle/ruby/3.0.0/gems/minitest-around-0.5.0/lib/minitest/around/spec.rb
plaid-14.12.0 vendor/bundle/ruby/2.6.0/gems/minitest-around-0.5.0/lib/minitest/around/spec.rb
plaid-14.11.1 vendor/bundle/ruby/2.6.0/gems/minitest-around-0.5.0/lib/minitest/around/spec.rb
plaid-14.10.0 vendor/bundle/ruby/2.6.0/gems/minitest-around-0.5.0/lib/minitest/around/spec.rb
plaid-14.7.0 vendor/bundle/ruby/2.6.0/gems/minitest-around-0.5.0/lib/minitest/around/spec.rb
minitest-around-0.5.0 lib/minitest/around/spec.rb