1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* test/ruby/test_settracefunc.rb: add a test for set_trace_func.

* test/ruby/envutil.rb: move "rubyexec" method from test_rubyoptions.rb.

* test/ruby/test_rubyoptions.rb: use rubyexec in envutil.rb.

* test/ruby/test_thread.rb: add tests to achieve over 90% test coverage
  of thread.c.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2008-04-23 15:22:13 +00:00
parent c0d8e6cbf9
commit f7ef694a71
6 changed files with 417 additions and 50 deletions

View file

@ -1,3 +1,6 @@
require "open3"
require "timeout"
module EnvUtil
def rubybin
unless ENV["RUBYOPT"]
@ -28,4 +31,42 @@ module EnvUtil
end
end
module_function :rubybin
LANG_ENVS = %w"LANG LC_ALL LC_CTYPE"
def rubyexec(*args)
if /(mswin|bccwin|mingw|emx)/ =~ RUBY_PLATFORM
flunk("cannot test in win32")
return
end
ruby = EnvUtil.rubybin
c = "C"
env = {}
LANG_ENVS.each {|lc| env[lc], ENV[lc] = ENV[lc], c}
stdin, stdout, stderr = Open3.popen3(*([ruby] + args))
env.each_pair {|lc, v|
if v
ENV[lc] = v
else
ENV.delete(lc)
end
}
env = nil
Timeout.timeout(10) do
yield(stdin, stdout, stderr)
end
ensure
env.each_pair {|lc, v|
if v
ENV[lc] = v
else
ENV.delete(lc)
end
} if env
stdin .close unless !stdin || stdin .closed?
stdout.close unless !stdout || stdout.closed?
stderr.close unless !stderr || stderr.closed?
end
module_function :rubyexec
end