diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py index 608ec01f140..093ea2f99ec 100644 --- a/Lib/test/test___all__.py +++ b/Lib/test/test___all__.py @@ -29,17 +29,20 @@ class AllTest(unittest.TestCase): if not hasattr(sys.modules[modname], "__all__"): raise NoAll(modname) names = {} - try: - exec("from %s import *" % modname, names) - except Exception as e: - # Include the module name in the exception string - self.fail("__all__ failure in {}: {}: {}".format( - modname, e.__class__.__name__, e)) - if "__builtins__" in names: - del names["__builtins__"] - keys = set(names) - all = set(sys.modules[modname].__all__) - self.assertEqual(keys, all) + with self.subTest(module=modname): + try: + exec("from %s import *" % modname, names) + except Exception as e: + # Include the module name in the exception string + self.fail("__all__ failure in {}: {}: {}".format( + modname, e.__class__.__name__, e)) + if "__builtins__" in names: + del names["__builtins__"] + keys = set(names) + all_list = sys.modules[modname].__all__ + all_set = set(all_list) + self.assertCountEqual(all_set, all_list, "in module {}".format(modname)) + self.assertEqual(keys, all_set, "in module {}".format(modname)) def walk_modules(self, basedir, modpath): for fn in sorted(os.listdir(basedir)): diff --git a/Misc/NEWS b/Misc/NEWS index f50d23a1f7b..ee4c73a900e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -176,6 +176,9 @@ Library Tests ----- +- Issue #11078: test___all__ now checks for duplicates in __all__. + Initial patch by R. David Murray. + - Issue #17712: Fix test_gdb failures on Ubuntu 13.04. - Issue #17835: Fix test_io when the default OS pipe buffer size is larger