From a793037d803abf098d172f686e2b95d27863c54d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 3 Jul 2016 22:27:26 +0300 Subject: Issue #19527: Fixed tests with defined COUNT_ALLOCS. --- Lib/test/support/__init__.py | 3 +++ Lib/test/test_gc.py | 7 +++++-- Lib/test/test_io.py | 2 ++ Lib/test/test_logging.py | 1 + Lib/test/test_module.py | 4 +++- Lib/test/test_sys.py | 8 ++++++-- Lib/test/test_threading.py | 4 +++- Lib/test/test_traceback.py | 1 + Lib/test/test_warnings/__init__.py | 1 + Lib/test/test_weakref.py | 1 + 10 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index c9e36fb..867dc2f 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2069,6 +2069,9 @@ def strip_python_stderr(stderr): stderr = re.sub(br"\[\d+ refs, \d+ blocks\]\r?\n?", b"", stderr).strip() return stderr +requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'), + 'types are immortal if COUNT_ALLOCS is defined') + def args_from_interpreter_flags(): """Return a list of command-line arguments reproducing the current settings in sys.flags and sys.warnoptions.""" diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index 1f0867d..a4d684b 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -1,7 +1,7 @@ import unittest from test.support import (verbose, refcount_test, run_unittest, - strip_python_stderr, cpython_only, start_threads, - temp_dir) + strip_python_stderr, cpython_only, start_threads, + temp_dir, requires_type_collecting) from test.support.script_helper import assert_python_ok, make_script import sys @@ -118,6 +118,7 @@ class GCTests(unittest.TestCase): del a self.assertNotEqual(gc.collect(), 0) + @requires_type_collecting def test_newinstance(self): class A(object): pass @@ -678,6 +679,7 @@ class GCTests(unittest.TestCase): stderr = run_command(code % "gc.DEBUG_SAVEALL") self.assertNotIn(b"uncollectable objects at shutdown", stderr) + @requires_type_collecting def test_gc_main_module_at_shutdown(self): # Create a reference cycle through the __main__ module and check # it gets collected at interpreter shutdown. @@ -692,6 +694,7 @@ class GCTests(unittest.TestCase): rc, out, err = assert_python_ok('-c', code) self.assertEqual(out.strip(), b'__del__ called') + @requires_type_collecting def test_gc_ordinary_module_at_shutdown(self): # Same as above, but with a non-__main__ module. with temp_dir() as script_dir: diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 000b525..5111882 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -3135,6 +3135,7 @@ class TextIOWrapperTest(unittest.TestCase): """.format(iomod=iomod, kwargs=kwargs) return assert_python_ok("-c", code) + @support.requires_type_collecting def test_create_at_shutdown_without_encoding(self): rc, out, err = self._check_create_at_shutdown() if err: @@ -3144,6 +3145,7 @@ class TextIOWrapperTest(unittest.TestCase): else: self.assertEqual("ok", out.decode().strip()) + @support.requires_type_collecting def test_create_at_shutdown_with_encoding(self): rc, out, err = self._check_create_at_shutdown(encoding='utf-8', errors='strict') diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 84fd8b5..cb6a628 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -3389,6 +3389,7 @@ class ModuleLevelMiscTest(BaseTest): logging.setLoggerClass(logging.Logger) self.assertEqual(logging.getLoggerClass(), logging.Logger) + @support.requires_type_collecting def test_logging_at_shutdown(self): # Issue #20037 code = """if 1: diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py index ea6e897..6d0d594 100644 --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -1,7 +1,7 @@ # Test the module type import unittest import weakref -from test.support import gc_collect +from test.support import gc_collect, requires_type_collecting from test.support.script_helper import assert_python_ok import sys @@ -101,6 +101,7 @@ class ModuleTests(unittest.TestCase): gc_collect() self.assertEqual(f().__dict__["bar"], 4) + @requires_type_collecting def test_clear_dict_in_ref_cycle(self): destroyed = [] m = ModuleType("foo") @@ -214,6 +215,7 @@ a = A(destroyed)""" self.assertEqual(r[-len(ends_with):], ends_with, '{!r} does not end with {!r}'.format(r, ends_with)) + @requires_type_collecting def test_module_finalization_at_shutdown(self): # Module globals and builtins should still be available during shutdown rc, out, err = assert_python_ok("-c", "from test import final_a") diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index a531879..4435d69 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -803,6 +803,7 @@ class SysModuleTest(unittest.TestCase): c = sys.getallocatedblocks() self.assertIn(c, range(b - 50, b + 50)) + @test.support.requires_type_collecting def test_is_finalizing(self): self.assertIs(sys.is_finalizing(), False) # Don't use the atexit module because _Py_Finalizing is only set @@ -1083,9 +1084,12 @@ class SizeofTest(unittest.TestCase): check((1,2,3), vsize('') + 3*self.P) # type # static type: PyTypeObject - s = vsize('P2n15Pl4Pn9Pn11PIP') + fmt = 'P2n15Pl4Pn9Pn11PIP' + if hasattr(sys, 'getcounts'): + fmt += '3n2P' + s = vsize(fmt) check(int, s) - s = vsize('P2n15Pl4Pn9Pn11PIP' # PyTypeObject + s = vsize(fmt + # PyTypeObject '3P' # PyAsyncMethods '36P' # PyNumberMethods '3P' # PyMappingMethods diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index b49a961..1c9c1ea 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -3,7 +3,8 @@ Tests for the threading module. """ import test.support -from test.support import verbose, strip_python_stderr, import_module, cpython_only +from test.support import (verbose, import_module, cpython_only, + requires_type_collecting) from test.support.script_helper import assert_python_ok, assert_python_failure import random @@ -987,6 +988,7 @@ class ThreadingExceptionTests(BaseTestCase): self.assertIn("ZeroDivisionError", err) self.assertNotIn("Unhandled exception", err) + @requires_type_collecting def test_print_exception_stderr_is_none_1(self): script = r"""if True: import sys diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index b7695d6..549d8d1 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -178,6 +178,7 @@ class SyntaxTracebackCases(unittest.TestCase): # Issue #18960: coding spec should has no effect do_test("0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5) + @support.requires_type_collecting def test_print_traceback_at_exit(self): # Issue #22599: Ensure that it is possible to use the traceback module # to display an exception at Python exit diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index 72fcc73..a33404e 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -990,6 +990,7 @@ class BootstrapTest(unittest.TestCase): class FinalizationTest(unittest.TestCase): + @support.requires_type_collecting def test_finalization(self): # Issue #19421: warnings.warn() should not crash # during Python finalization diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py index f49cb7e..6d50a66 100644 --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -589,6 +589,7 @@ class ReferencesTestCase(TestBase): del c1, c2, C, D gc.collect() + @support.requires_type_collecting def test_callback_in_cycle_resurrection(self): import gc -- cgit v0.12