mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-117860: Add tests for resolving names when import rebind names (GH-118176)
Add tests for "import", pkgutil.resolve_name() and unittest.mock.path() for cases when "import a.b as x" and "from a import b as x" give different results.
This commit is contained in:
parent
3b268f4edc
commit
c0eaa232f6
8 changed files with 149 additions and 0 deletions
|
@ -12,6 +12,9 @@ import tempfile
|
|||
import shutil
|
||||
import zipfile
|
||||
|
||||
from test.support.import_helper import DirsOnSysPath
|
||||
from test.test_importlib.util import uncache
|
||||
|
||||
# Note: pkgutil.walk_packages is currently tested in test_runpy. This is
|
||||
# a hack to get a major issue resolved for 3.3b2. Longer term, it should
|
||||
# be moved back here, perhaps by factoring out the helper code for
|
||||
|
@ -318,6 +321,38 @@ class PkgutilTests(unittest.TestCase):
|
|||
with self.assertRaises(exc):
|
||||
pkgutil.resolve_name(s)
|
||||
|
||||
def test_name_resolution_import_rebinding(self):
|
||||
# The same data is also used for testing import in test_import and
|
||||
# mock.patch in test_unittest.
|
||||
path = os.path.join(os.path.dirname(__file__), 'test_import', 'data')
|
||||
with uncache('package3', 'package3.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package3.submodule.attr'), 'submodule')
|
||||
with uncache('package3', 'package3.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package3.submodule:attr'), 'submodule')
|
||||
with uncache('package3', 'package3.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package3:submodule.attr'), 'rebound')
|
||||
self.assertEqual(pkgutil.resolve_name('package3.submodule.attr'), 'submodule')
|
||||
self.assertEqual(pkgutil.resolve_name('package3:submodule.attr'), 'rebound')
|
||||
with uncache('package3', 'package3.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package3:submodule.attr'), 'rebound')
|
||||
self.assertEqual(pkgutil.resolve_name('package3.submodule:attr'), 'submodule')
|
||||
self.assertEqual(pkgutil.resolve_name('package3:submodule.attr'), 'rebound')
|
||||
|
||||
def test_name_resolution_import_rebinding2(self):
|
||||
path = os.path.join(os.path.dirname(__file__), 'test_import', 'data')
|
||||
with uncache('package4', 'package4.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package4.submodule.attr'), 'submodule')
|
||||
with uncache('package4', 'package4.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package4.submodule:attr'), 'submodule')
|
||||
with uncache('package4', 'package4.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package4:submodule.attr'), 'origin')
|
||||
self.assertEqual(pkgutil.resolve_name('package4.submodule.attr'), 'submodule')
|
||||
self.assertEqual(pkgutil.resolve_name('package4:submodule.attr'), 'submodule')
|
||||
with uncache('package4', 'package4.submodule'), DirsOnSysPath(path):
|
||||
self.assertEqual(pkgutil.resolve_name('package4:submodule.attr'), 'origin')
|
||||
self.assertEqual(pkgutil.resolve_name('package4.submodule:attr'), 'submodule')
|
||||
self.assertEqual(pkgutil.resolve_name('package4:submodule.attr'), 'submodule')
|
||||
|
||||
|
||||
class PkgutilPEP302Tests(unittest.TestCase):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue