]> granicus.if.org Git - python/commitdiff
Fixed ntpath.expandvars to not replace references to non-existing
authorSjoerd Mullender <sjoerd@acm.org>
Tue, 16 Jan 2007 16:42:38 +0000 (16:42 +0000)
committerSjoerd Mullender <sjoerd@acm.org>
Tue, 16 Jan 2007 16:42:38 +0000 (16:42 +0000)
variables with nothing.  Also added tests.
This fixes bug #494589.

Lib/ntpath.py
Lib/test/test_ntpath.py
Lib/test/test_posixpath.py
Misc/NEWS

index b32ec164bb9d89c9b8072dbbe977632740ee4061..23d5127809fd4e7a312b985a7bb305131da347fd 100644 (file)
@@ -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
index 139aa1f28e06160dc72752c605872d2f37696dda..6bc2a054de5d2cb172976e9404ab1d009d3e0c4d 100644 (file)
@@ -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
index 3984157edf9c2b733edb3802e826482ca0a571f0..20a1fc5ec63d6a2bb0342e62cb00d1795b632a27 100644 (file)
@@ -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)
index b889b0991fbf90405ab2406b95bacc92f85a14ab..3d742f577aa28e7c8f1834be13885f770ffacb6b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -109,6 +109,8 @@ Core and builtins
 Library
 -------
 
+- Bug #494589: make ntpath.expandvars behave according to its docstring.
+
 - Changed platform module API python_version_tuple() to actually
   return a tuple (it used to return a list)