[Python-checkins] cpython: Adding test from issue6727 demonstrating that symlink import issue does not

jason.coombs python-checkins at python.org
Sun Jun 17 09:54:28 CEST 2012


http://hg.python.org/cpython/rev/afe67ea94bc6
changeset:   77480:afe67ea94bc6
user:        Jason R. Coombs <jaraco at jaraco.com>
date:        Sun Jun 17 03:53:47 2012 -0400
summary:
  Adding test from issue6727 demonstrating that symlink import issue does not occur here in 3.3

files:
  Lib/test/test_import.py |  53 +++++++++++++++++++++++++++++
  1 files changed, 53 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -13,7 +13,9 @@
 import unittest
 import textwrap
 import errno
+import shutil
 
+import test.support
 from test.support import (
     EnvironmentVarGuard, TESTFN, check_warnings, forget, is_jython,
     make_legacy_pyc, rmtree, run_unittest, swap_attr, swap_item, temp_umask,
@@ -690,6 +692,56 @@
         self.assertEqual(m.x, 5)
 
 
+class TestSymbolicallyLinkedPackage(unittest.TestCase):
+    package_name = 'sample'
+
+    def setUp(self):
+        if os.path.exists(self.tagged):
+            shutil.rmtree(self.tagged)
+        if os.path.exists(self.package_name):
+            os.remove(self.package_name)
+        self.orig_sys_path = sys.path[:]
+
+        # create a sample package; imagine you have a package with a tag and
+        #  you want to symbolically link it from its untagged name.
+        os.mkdir(self.tagged)
+        init_file = os.path.join(self.tagged, '__init__.py')
+        open(init_file, 'w').close()
+        assert os.path.exists(init_file)
+
+        # now create a symlink to the tagged package
+        # sample -> sample-tagged
+        os.symlink(self.tagged, self.package_name)
+
+        # assert os.path.isdir(self.package_name) # currently fails
+        assert os.path.isfile(os.path.join(self.package_name, '__init__.py'))
+
+    @property
+    def tagged(self):
+        return self.package_name + '-tagged'
+
+    # regression test for issue6727
+    @unittest.skipUnless(
+        not hasattr(sys, 'getwindowsversion')
+        or sys.getwindowsversion() >= (6, 0),
+        "Windows Vista or later required")
+    @test.support.skip_unless_symlink
+    def test_symlinked_dir_importable(self):
+        # make sure sample can only be imported from the current directory.
+        sys.path[:] = ['.']
+
+        # and try to import the package
+        __import__(self.package_name)
+
+    def tearDown(self):
+        # now cleanup
+        if os.path.exists(self.package_name):
+            os.remove(self.package_name)
+        if os.path.exists(self.tagged):
+            shutil.rmtree(self.tagged)
+        sys.path[:] = self.orig_sys_path
+
+
 def test_main(verbose=None):
     flag = importlib_util.using___import__
     try:
@@ -697,6 +749,7 @@
         run_unittest(ImportTests, PycacheTests,
                      PycRewritingTests, PathsTests, RelativeImportTests,
                      OverridingImportBuiltinTests,
+                     TestSymbolicallyLinkedPackage,
                      importlib_import_test_suite())
     finally:
         importlib_util.using___import__ = flag

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list