mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 13:04:13 +02:00
40 lines
1.2 KiB
Ruby
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
|