[Python-checkins] cpython: Fixes #19711: Add tests for reloading namespace packages.

eric.snow python-checkins at python.org
Tue May 10 17:33:08 EDT 2016


https://hg.python.org/cpython/rev/c22ec7a45114
changeset:   101292:c22ec7a45114
parent:      101289:909099686e6e
user:        Eric Snow <ericsnowcurrently at gmail.com>
date:        Tue May 10 15:29:05 2016 -0600
summary:
  Fixes #19711: Add tests for reloading namespace packages.

files:
  Lib/test/test_importlib/test_namespace_pkgs.py |  34 +++++++++-
  Misc/NEWS                                      |   2 +
  2 files changed, 35 insertions(+), 1 deletions(-)


diff --git a/Lib/test/test_importlib/test_namespace_pkgs.py b/Lib/test/test_importlib/test_namespace_pkgs.py
--- a/Lib/test/test_importlib/test_namespace_pkgs.py
+++ b/Lib/test/test_importlib/test_namespace_pkgs.py
@@ -1,4 +1,5 @@
 import contextlib
+import importlib
 import os
 import sys
 import unittest
@@ -67,6 +68,7 @@
         # TODO: will we ever want to pass exc_info to __exit__?
         self.ctx.__exit__(None, None, None)
 
+
 class SingleNamespacePackage(NamespacePackageTest):
     paths = ['portion1']
 
@@ -83,7 +85,7 @@
         self.assertEqual(repr(foo), "<module 'foo' (namespace)>")
 
 
-class DynamicPatheNamespacePackage(NamespacePackageTest):
+class DynamicPathNamespacePackage(NamespacePackageTest):
     paths = ['portion1']
 
     def test_dynamic_path(self):
@@ -285,5 +287,35 @@
         self.assertEqual(a_test.attr, 'in module')
 
 
+class ReloadTests(NamespacePackageTest):
+    paths = ['portion1']
+
+    def test_simple_package(self):
+        import foo.one
+        foo = importlib.reload(foo)
+        self.assertEqual(foo.one.attr, 'portion1 foo one')
+
+    def test_cant_import_other(self):
+        import foo
+        with self.assertRaises(ImportError):
+            import foo.two
+        foo = importlib.reload(foo)
+        with self.assertRaises(ImportError):
+            import foo.two
+
+    def test_dynamic_path(self):
+        import foo.one
+        with self.assertRaises(ImportError):
+            import foo.two
+
+        # Now modify sys.path and reload.
+        sys.path.append(os.path.join(self.root, 'portion2'))
+        foo = importlib.reload(foo)
+
+        # And make sure foo.two is now importable
+        import foo.two
+        self.assertEqual(foo.two.attr, 'portion2 foo two')
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -52,6 +52,8 @@
 - Issue #26581: If coding cookie is specified multiple times on a line in
   Python source code file, only the first one is taken to account.
 
+- Issue #19711: Add tests for reloading namespace packages.
+
 - Issue #26563: Debug hooks on Python memory allocators now raise a fatal
   error if functions of the :c:func:`PyMem_Malloc` family are called without
   holding the GIL.

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


More information about the Python-checkins mailing list