working setenv/unsetenv + tests
need to be implemented for Windows too
This commit is contained in:
parent
136bb53a89
commit
5fdd86537d
@ -66,7 +66,7 @@ module Cmdtest
|
||||
|
||||
ORIG_CWD = Dir.pwd
|
||||
|
||||
attr_reader :_work_dir, :_env
|
||||
attr_reader :_work_dir, :_env_setenv
|
||||
|
||||
def initialize(test_method, clog, runner)
|
||||
@_test_method = test_method
|
||||
@ -74,7 +74,7 @@ module Cmdtest
|
||||
@_runner = runner
|
||||
@_work_dir = Workdir.new(self, runner)
|
||||
@_cwd = @_runner.tmp_work_dir
|
||||
@_env = Hash.new
|
||||
@_env_setenv = Hash.new
|
||||
@_in_cmd = false
|
||||
@_comment_str = nil
|
||||
@_env_path = @_runner.orig_env_path
|
||||
@ -198,13 +198,13 @@ module Cmdtest
|
||||
#------------------------------
|
||||
|
||||
def setenv(name, value)
|
||||
@_env[name] = value
|
||||
@_env_setenv[name] = [:setenv, value]
|
||||
end
|
||||
|
||||
#------------------------------
|
||||
|
||||
def unsetenv(name)
|
||||
@_env.delete(name)
|
||||
@_env_setenv[name] = [:unsetenv]
|
||||
end
|
||||
|
||||
#------------------------------
|
||||
|
@ -94,7 +94,17 @@ module Cmdtest
|
||||
|
||||
def _ENV_strs(env)
|
||||
# TODO: windows
|
||||
env.keys.sort.map {|k| "export %s='%s'" % [k, env[k]] }
|
||||
env.keys.sort.map do |k|
|
||||
what = env[k][0]
|
||||
case what
|
||||
when :setenv
|
||||
"export %s='%s'" % [k, env[k][1]]
|
||||
when :unsetenv
|
||||
"unset %s" % [k]
|
||||
else
|
||||
raise "internal error"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def _chdir_str(dir)
|
||||
@ -139,7 +149,7 @@ module Cmdtest
|
||||
end
|
||||
|
||||
File.open(_tmp_redirect_sh, "w") do |f|
|
||||
f.puts _ENV_strs(@testcase._env)
|
||||
f.puts _ENV_strs(@testcase._env_setenv)
|
||||
f.puts
|
||||
f.puts _chdir_str(@testcase._cwd)
|
||||
f.puts
|
||||
|
83
t/CMDTEST_setenv.rb
Normal file
83
t/CMDTEST_setenv.rb
Normal file
@ -0,0 +1,83 @@
|
||||
require "selftest_utils"
|
||||
|
||||
class CMDTEST_setenv < Cmdtest::Testcase
|
||||
|
||||
include SelftestUtils
|
||||
|
||||
#-----------------------------------
|
||||
|
||||
def test_setenv
|
||||
#----------
|
||||
create_CMDTEST_foo [
|
||||
'cmd "env | grep TESTVAR1" do',
|
||||
' exit_nonzero', # no match in grep
|
||||
'end',
|
||||
]
|
||||
cmd_cmdtest do
|
||||
comment "TESTVAR1 not set"
|
||||
stdout_equal [
|
||||
"### env | grep TESTVAR1",
|
||||
]
|
||||
end
|
||||
|
||||
#----------
|
||||
create_CMDTEST_foo [
|
||||
'setenv "TESTVAR1", "123456"',
|
||||
'cmd "env | grep TESTVAR1" do',
|
||||
' stdout_equal "TESTVAR1=123456\\n"',
|
||||
'end',
|
||||
]
|
||||
cmd_cmdtest do
|
||||
comment "TESTVAR1 set by setenv"
|
||||
stdout_equal [
|
||||
"### env | grep TESTVAR1",
|
||||
]
|
||||
end
|
||||
|
||||
cmd("env | grep TESTVAR1") do
|
||||
comment "TESTVAR1 still unset on level1"
|
||||
exit_nonzero # no match in grep
|
||||
end
|
||||
end
|
||||
|
||||
#-----------------------------------
|
||||
|
||||
def test_unsetenv
|
||||
ENV['TESTVAR2'] = '987654'
|
||||
#----------
|
||||
create_CMDTEST_foo [
|
||||
'cmd "env | grep TESTVAR2" do',
|
||||
' stdout_equal "TESTVAR2=987654\\n"',
|
||||
'end',
|
||||
]
|
||||
cmd_cmdtest do
|
||||
comment "TESTVAR2 set from start"
|
||||
stdout_equal [
|
||||
"### env | grep TESTVAR2",
|
||||
]
|
||||
end
|
||||
|
||||
#----------
|
||||
create_CMDTEST_foo [
|
||||
'unsetenv "TESTVAR2"',
|
||||
'cmd "env | grep TESTVAR2" do',
|
||||
' exit_nonzero', # no match in grep
|
||||
'end',
|
||||
]
|
||||
cmd_cmdtest do
|
||||
comment "TESTVAR2 unset by unsetenv"
|
||||
stdout_equal [
|
||||
"### env | grep TESTVAR2",
|
||||
]
|
||||
end
|
||||
|
||||
cmd("env | grep TESTVAR2") do
|
||||
comment "TESTVAR2 still set on level1"
|
||||
stdout_equal [
|
||||
"TESTVAR2=987654",
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user