working setenv/unsetenv + tests

need to be implemented for Windows too
This commit is contained in:
Johan Holmberg 2016-10-10 15:11:21 +02:00
parent 136bb53a89
commit 5fdd86537d
3 changed files with 99 additions and 6 deletions

View File

@ -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
#------------------------------

View File

@ -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
View 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