summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_import.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2012-06-17 07:53:47 (GMT)
committerJason R. Coombs <jaraco@jaraco.com>2012-06-17 07:53:47 (GMT)
commit71fde31da3d3630b8dc271d3548cba693892509e (patch)
treecc8ca5b4c23ca7ac799d4391ae5949380b633ffe /Lib/test/test_import.py
parent9680bdb567aeafa94d75ffbdb7e5e8b24c605b13 (diff)
downloadcpython-71fde31da3d3630b8dc271d3548cba693892509e.zip
cpython-71fde31da3d3630b8dc271d3548cba693892509e.tar.gz
cpython-71fde31da3d3630b8dc271d3548cba693892509e.tar.bz2
Adding test from issue6727 demonstrating that symlink import issue does not occur here in 3.3
Diffstat (limited to 'Lib/test/test_import.py')
-rw-r--r--Lib/test/test_import.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index a90e627..140bd96 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -13,7 +13,9 @@ import sys
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 @@ class PycacheTests(unittest.TestCase):
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 @@ def test_main(verbose=None):
run_unittest(ImportTests, PycacheTests,
PycRewritingTests, PathsTests, RelativeImportTests,
OverridingImportBuiltinTests,
+ TestSymbolicallyLinkedPackage,
importlib_import_test_suite())
finally:
importlib_util.using___import__ = flag