mirror of https://github.com/python/cpython
Fixed ntpath.expandvars to not replace references to non-existing
variables with nothing. Also added tests. This fixes bug #494589.
This commit is contained in:
parent
fa3d08b4a9
commit
33a0a06d31
|
@ -344,8 +344,10 @@ def expandvars(path):
|
|||
var = path[:index]
|
||||
if var in os.environ:
|
||||
res = res + os.environ[var]
|
||||
else:
|
||||
res = res + '${' + var + '}'
|
||||
except ValueError:
|
||||
res = res + path
|
||||
res = res + '${' + path
|
||||
index = pathlen - 1
|
||||
else:
|
||||
var = ''
|
||||
|
@ -357,8 +359,10 @@ def expandvars(path):
|
|||
c = path[index:index + 1]
|
||||
if var in os.environ:
|
||||
res = res + os.environ[var]
|
||||
else:
|
||||
res = res + '$' + var
|
||||
if c != '':
|
||||
res = res + c
|
||||
index = index - 1
|
||||
else:
|
||||
res = res + c
|
||||
index = index + 1
|
||||
|
|
|
@ -115,6 +115,28 @@ tester("ntpath.normpath('K:../.././..')", r'K:..\..\..')
|
|||
tester("ntpath.normpath('C:////a/b')", r'C:\a\b')
|
||||
tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b')
|
||||
|
||||
oldenv = os.environ.copy()
|
||||
try:
|
||||
os.environ.clear()
|
||||
os.environ["foo"] = "bar"
|
||||
os.environ["{foo"] = "baz1"
|
||||
os.environ["{foo}"] = "baz2"
|
||||
tester('ntpath.expandvars("foo")', "foo")
|
||||
tester('ntpath.expandvars("$foo bar")', "bar bar")
|
||||
tester('ntpath.expandvars("${foo}bar")', "barbar")
|
||||
tester('ntpath.expandvars("$[foo]bar")', "$[foo]bar")
|
||||
tester('ntpath.expandvars("$bar bar")', "$bar bar")
|
||||
tester('ntpath.expandvars("$?bar")', "$?bar")
|
||||
tester('ntpath.expandvars("${foo}bar")', "barbar")
|
||||
tester('ntpath.expandvars("$foo}bar")', "bar}bar")
|
||||
tester('ntpath.expandvars("${foo")', "${foo")
|
||||
tester('ntpath.expandvars("${{foo}}")', "baz1}")
|
||||
tester('ntpath.expandvars("$foo$foo")', "barbar")
|
||||
tester('ntpath.expandvars("$bar$bar")', "$bar$bar")
|
||||
finally:
|
||||
os.environ.clear()
|
||||
os.environ.update(oldenv)
|
||||
|
||||
# ntpath.abspath() can only be used on a system with the "nt" module
|
||||
# (reasonably), so we protect this test with "import nt". This allows
|
||||
# the rest of the tests for the ntpath module to be run to completion
|
||||
|
|
|
@ -374,6 +374,8 @@ class PosixPathTest(unittest.TestCase):
|
|||
self.assertEqual(posixpath.expandvars("$foo}bar"), "bar}bar")
|
||||
self.assertEqual(posixpath.expandvars("${foo"), "${foo")
|
||||
self.assertEqual(posixpath.expandvars("${{foo}}"), "baz1}")
|
||||
self.assertEqual(posixpath.expandvars("$foo$foo"), "barbar")
|
||||
self.assertEqual(posixpath.expandvars("$bar$bar"), "$bar$bar")
|
||||
finally:
|
||||
os.environ.clear()
|
||||
os.environ.update(oldenv)
|
||||
|
|
Loading…
Reference in New Issue