blob: 9303a094eabbca8e95de24daa398571c30321c4a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# -*- 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
|