changeset: 101292:c22ec7a45114 parent: 101289:909099686e6e user: Eric Snow date: Tue May 10 15:29:05 2016 -0600 files: Lib/test/test_importlib/test_namespace_pkgs.py Misc/NEWS description: Fixes #19711: Add tests for reloading namespace packages. diff -r 909099686e6e -r c22ec7a45114 Lib/test/test_importlib/test_namespace_pkgs.py --- a/Lib/test/test_importlib/test_namespace_pkgs.py Tue May 10 12:01:56 2016 +0300 +++ b/Lib/test/test_importlib/test_namespace_pkgs.py Tue May 10 15:29:05 2016 -0600 @@ -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), "") -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 -r 909099686e6e -r c22ec7a45114 Misc/NEWS --- a/Misc/NEWS Tue May 10 12:01:56 2016 +0300 +++ b/Misc/NEWS Tue May 10 15:29:05 2016 -0600 @@ -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.