diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:13:14 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:13:14 +0000 |
commit | d0233291bc8a5068e52c69c210e5979e5324b5bc (patch) | |
tree | 7d9459449c33792c63eeb7baa071e76352e0baab /trunk/test/ruby/envutil.rb | |
parent | 0dc342de848a642ecce8db697b8fecd83a63e117 (diff) | |
parent | 72eaacaa15256ab95c3b52ea386f88586fb9da40 (diff) |
re-adding tag v1_9_0_4 as an alias of trunk@18848v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/ruby/envutil.rb')
-rw-r--r-- | trunk/test/ruby/envutil.rb | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/trunk/test/ruby/envutil.rb b/trunk/test/ruby/envutil.rb deleted file mode 100644 index 4aba8a0bde..0000000000 --- a/trunk/test/ruby/envutil.rb +++ /dev/null @@ -1,176 +0,0 @@ -require "open3" -require "timeout" - -module EnvUtil - def rubybin - unless ENV["RUBYOPT"] - - end - if ruby = ENV["RUBY"] - return ruby - end - ruby = "ruby" - rubyexe = ruby+".exe" - 3.times do - if File.exist? ruby and File.executable? ruby and !File.directory? ruby - return File.expand_path(ruby) - end - if File.exist? rubyexe and File.executable? rubyexe - return File.expand_path(rubyexe) - end - ruby = File.join("..", ruby) - end - begin - require "rbconfig" - File.join( - RbConfig::CONFIG["bindir"], - RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"] - ) - rescue LoadError - "ruby" - end - end - module_function :rubybin - - LANG_ENVS = %w"LANG LC_ALL LC_CTYPE" - def rubyexec(*args) - ruby = EnvUtil.rubybin - c = "C" - env = {} - LANG_ENVS.each {|lc| env[lc], ENV[lc] = ENV[lc], c} - stdin = stdout = stderr = nil - Timeout.timeout(10) do - stdin, stdout, stderr = Open3.popen3(*([ruby] + args)) - env.each_pair {|lc, v| - if v - ENV[lc] = v - else - ENV.delete(lc) - end - } - env = nil - 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 - -module Test - module Unit - module Assertions - public - def assert_normal_exit(testsrc, message = '') - in_c, in_p = IO.pipe - out_p, out_c = IO.pipe - pid = spawn(EnvUtil.rubybin, '-W0', STDIN=>in_c, STDOUT=>out_c, STDERR=>out_c) - in_c.close - out_c.close - in_p.write testsrc - in_p.close - msg = out_p.read - out_p.close - Process.wait pid - status = $? - faildesc = nil - if status.signaled? - signo = status.termsig - signame = Signal.list.invert[signo] - sigdesc = "signal #{signo}" - if signame - sigdesc = "SIG#{signame} (#{sigdesc})" - end - if status.coredump? - sigdesc << " (core dumped)" - end - if msg.empty? - full_message = build_message(message, "pid ? killed by ?", - pid, - AssertionMessage::Literal.new(sigdesc)) - else - msg << "\n" if /\n\z/ !~ msg - full_message = build_message(message, "pid ? killed by ?\n?", - pid, - AssertionMessage::Literal.new(sigdesc), - AssertionMessage::Literal.new(msg.gsub(/^/, '| '))) - end - end - assert_block(full_message) { !status.signaled? } - ensure - in_c.close if in_c && !in_c.closed? - in_p.close if in_p && !in_p.closed? - out_c.close if out_c && !out_c.closed? - out_p.close if out_p && !out_p.closed? - end - - LANG_ENVS = %w"LANG LC_ALL LC_CTYPE" - def assert_in_out_err(args, test_stdin = "", test_stdout = "", test_stderr = "", message = nil) - in_c, in_p = IO.pipe - out_p, out_c = IO.pipe - err_p, err_c = IO.pipe - c = "C" - env = {} - LANG_ENVS.each {|lc| env[lc], ENV[lc] = ENV[lc], c} - pid = spawn(EnvUtil.rubybin, *args, STDIN=>in_c, STDOUT=>out_c, STDERR=>err_c) - in_c.close - out_c.close - err_c.close - in_p.write test_stdin - in_p.close - th_stdout = Thread.new { out_p.read } - th_stderr = Thread.new { err_p.read } - if th_stdout.join(10) && th_stderr.join(10) - stdout = th_stdout.value - stderr = th_stderr.value - else - flunk("timeout") - end - out_p.close - err_p.close - Process.wait pid - if block_given? - yield(stdout.lines.map {|l| l.chomp }, stderr.lines.map {|l| l.chomp }) - else - if test_stdout.is_a?(Regexp) - assert_match(test_stdout, stdout, message) - else - assert_equal(test_stdout, stdout.lines.map {|l| l.chomp }, message) - end - if test_stderr.is_a?(Regexp) - assert_match(test_stderr, stderr, message) - else - assert_equal(test_stderr, stderr.lines.map {|l| l.chomp }, message) - end - end - ensure - env.each_pair {|lc, v| - if v - ENV[lc] = v - else - ENV.delete(lc) - end - } if env - in_c.close if in_c && !in_c.closed? - in_p.close if in_p && !in_p.closed? - out_c.close if out_c && !out_c.closed? - out_p.close if out_p && !out_p.closed? - err_c.close if err_c && !err_c.closed? - err_p.close if err_p && !err_p.closed? - (th_stdout.kill; th_stdout.join) if th_stdout - (th_stderr.kill; th_stderr.join) if th_stderr - end - end - end -end - |