summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-09 01:40:16 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-01-09 01:40:16 +0000
commita931f961118ccb8f0d457a1ad88c788431aa5c76 (patch)
treed633bb0bd10b2914ebd870c4968e6a6283edf1db
parent07f0d97d878ed9d3855504b440101fa1ae83e444 (diff)
* test/ruby/test_process.rb (TestProcess::MANDATORY_ENVS): some
platforms need environments for shared objects. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_process.rb32
2 files changed, 32 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index b1f3c38c6c..f295ec33c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jan 9 10:40:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_process.rb (TestProcess::MANDATORY_ENVS): some
+ platforms need environments for shared objects.
+
Thu Jan 8 23:19:38 2009 Tanaka Akira <akr@fsij.org>
* ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb
index cc98309293..1bf3bec63b 100644
--- a/test/ruby/test_process.rb
+++ b/test/ruby/test_process.rb
@@ -2,6 +2,7 @@ require 'test/unit'
require 'tmpdir'
require 'pathname'
require_relative 'envutil'
+require 'rbconfig'
class TestProcess < Test::Unit::TestCase
RUBY = EnvUtil.rubybin
@@ -198,7 +199,16 @@ class TestProcess < Test::Unit::TestCase
}
end
- ENVCOMMAND = [RUBY, '-e', 'ENV.each {|k,v| puts "#{k}=#{v}" }']
+ MANDATORY_ENVS = []
+ if /linux/ =~ RbConfig::CONFIG['target_os']
+ MANDATORY_ENVS << 'LD_PRELOAD'
+ end
+ if e = RbConfig::CONFIG['LIBPATHENV']
+ MANDATORY_ENVS << e
+ end
+ PREENVARG = ['-e', "%w[#{MANDATORY_ENVS.join(' ')}].each{|e|ENV.delete(e)}"]
+ ENVARG = ['-e', 'ENV.each {|k,v| puts "#{k}=#{v}" }']
+ ENVCOMMAND = [RUBY].concat(PREENVARG).concat(ENVARG)
def test_execopts_env
assert_raise(ArgumentError) {
@@ -206,8 +216,18 @@ class TestProcess < Test::Unit::TestCase
}
h = {}
- ENV.each {|k,v| h[k] = nil unless k.upcase == "PATH" }
- IO.popen([h, RUBY, '-e', 'puts ENV.keys.map{|e|e.upcase}']) {|io|
+ cmd = [h, RUBY]
+ ENV.each do |k,v|
+ case k
+ when /\APATH\z/i
+ when *MANDATORY_ENVS
+ cmd << '-e' << "ENV.delete('#{k}')"
+ else
+ h[k] = nil
+ end
+ end
+ cmd << '-e' << 'puts ENV.keys.map{|e|e.upcase}'
+ IO.popen(cmd) {|io|
assert_equal("PATH\n", io.read)
}
@@ -222,10 +242,12 @@ class TestProcess < Test::Unit::TestCase
end
def test_execopts_unsetenv_others
- IO.popen([*ENVCOMMAND, :unsetenv_others=>true]) {|io|
+ h = {}
+ MANDATORY_ENVS.each {|k| e = ENV[k] and h[k] = e}
+ IO.popen([h, *ENVCOMMAND, :unsetenv_others=>true]) {|io|
assert_equal("", io.read)
}
- IO.popen([{"A"=>"B"}, *ENVCOMMAND, :unsetenv_others=>true]) {|io|
+ IO.popen([h.merge("A"=>"B"), *ENVCOMMAND, :unsetenv_others=>true]) {|io|
assert_equal("A=B\n", io.read)
}
end