ruby/test/-ext-/test_ensure_and_callcc.rb
2024-07-31 10:59:51 +09:00

40 lines
1.2 KiB
Ruby

# -*- coding: us-ascii -*-
# frozen_string_literal: false
require 'test/unit'
class TestEnsureAndCallcc < Test::Unit::TestCase
def test_bug20655_dir_chdir_using_rb_ensure
require 'tmpdir'
need_continuation
called = 0
tmp = nil
Dir.mktmpdir do |tmpdir|
Dir.chdir(tmpdir) do
tmp = Dir.pwd
cont = nil
callcc{|c| cont = c}
assert_equal(tmp, Dir.pwd, "BUG #20655: ensure called and pwd was changed unexpectedly")
called += 1
cont.call if called < 10
end
end
end
def test_bug20655_extension_using_rb_ensure
need_continuation
require '-test-/ensure_and_callcc'
EnsureAndCallcc.reset
assert_equal(0, EnsureAndCallcc.ensure_called)
EnsureAndCallcc.require_with_ensure(File.join(__dir__, 'required'))
assert_equal(1, EnsureAndCallcc.ensure_called,
"BUG #20655: ensure called unexpectedly in the required script even without exceptions")
end
private
def need_continuation
unless respond_to?(:callcc, true)
EnvUtil.suppress_warning {require 'continuation'}
end
omit 'requires callcc support' unless respond_to?(:callcc, true)
end
end