]> granicus.if.org Git - python/commitdiff
Fixes #19711: Add tests for reloading namespace packages.
authorEric Snow <ericsnowcurrently@gmail.com>
Tue, 10 May 2016 21:29:05 +0000 (15:29 -0600)
committerEric Snow <ericsnowcurrently@gmail.com>
Tue, 10 May 2016 21:29:05 +0000 (15:29 -0600)
Lib/test/test_importlib/test_namespace_pkgs.py
Misc/NEWS

index 116eb75c15090f294ba7f4b58e2563f43a33699d..e37d8a18f4ac553672eacb171bc375a0dfebd76f 100644 (file)
@@ -1,4 +1,5 @@
 import contextlib
+import importlib
 import os
 import sys
 import unittest
@@ -67,6 +68,7 @@ class NamespacePackageTest(unittest.TestCase):
         # 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 @@ class SingleNamespacePackage(NamespacePackageTest):
         self.assertEqual(repr(foo), "<module 'foo' (namespace)>")
 
 
-class DynamicPatheNamespacePackage(NamespacePackageTest):
+class DynamicPathNamespacePackage(NamespacePackageTest):
     paths = ['portion1']
 
     def test_dynamic_path(self):
@@ -285,5 +287,35 @@ class ModuleAndNamespacePackageInSameDir(NamespacePackageTest):
         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()
index 55963b03ba0add3081d9e5eca630ec9dc163471f..07d36ec51d3b8795cc39e8d2a197827f88379a7b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -52,6 +52,8 @@ Core and Builtins
 - 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.