[前][次][番号順一覧][スレッド一覧]

ruby-changes:9853

From: nobu <ko1@a...>
Date: Fri, 9 Jan 2009 10:40:38 +0900 (JST)
Subject: [ruby-changes:9853] Ruby:r21393 (trunk): * test/ruby/test_process.rb (TestProcess::MANDATORY_ENVS): some

nobu	2009-01-09 10:40:16 +0900 (Fri, 09 Jan 2009)

  New Revision: 21393

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21393

  Log:
    * test/ruby/test_process.rb (TestProcess::MANDATORY_ENVS): some
      platforms need environments for shared objects.

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_process.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21392)
+++ ChangeLog	(revision 21393)
@@ -1,3 +1,8 @@
+Fri Jan  9 10:40:52 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* 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@f...>
 
 	* ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
Index: test/ruby/test_process.rb
===================================================================
--- test/ruby/test_process.rb	(revision 21392)
+++ test/ruby/test_process.rb	(revision 21393)
@@ -2,6 +2,7 @@
 require 'tmpdir'
 require 'pathname'
 require_relative 'envutil'
+require 'rbconfig'
 
 class TestProcess < Test::Unit::TestCase
   RUBY = EnvUtil.rubybin
@@ -198,7 +199,16 @@
     }
   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 @@
     }
 
     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 @@
   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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]