From 5143e745931fdb4855eedb7110d733251a0573db Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Wed, 5 May 2021 15:33:20 +0900 Subject: [PATCH 01/19] bpo-25872: add test_oserror --- Lib/test/test_linecache.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 59e00da242ad63..83559a7aa124c2 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -38,6 +38,10 @@ def f(): return 3''' # No ending newline +SOURCE_4 = ''' +raise OSError +''' + class TempFile: def setUp(self): @@ -181,6 +185,39 @@ def test_checkcache(self): self.assertEqual(line, getline(source_name, index + 1)) source_list.append(line) + def test_checkcache_oserror(self): + linecache.clearcache() + _ = linecache.getlines(FILENAME) + self.assertTrue(_) + self.assertEqual(1, len(linecache.cache.keys())) + def raise_oserror(*args, **kwargs): + raise OSError + with support.swap_attr(os, 'stat', raise_oserror): + # pop all cache + _ = linecache.checkcache() + self.assertEqual(0, len(linecache.cache.keys())) + + def test_updatecache_oserror(self): + linecache.clearcache() + def raise_oserror(*args, **kwargs): + raise OSError + source_name = os_helper.TESTFN + self.addCleanup(os_helper.unlink, os_helper.TESTFN) + with open(source_name, 'w', encoding='utf-8') as source: + source.write(SOURCE_4) + _ = linecache.getlines(source_name) + self.assertEqual(1, len(linecache.cache.keys())) + + with support.swap_attr(os, 'stat', raise_oserror): + # Trace OSError with no pop cache + _ = linecache.updatecache('dummy') + self.assertEqual(1, len(linecache.cache.keys())) + + with support.swap_attr(os, 'stat', raise_oserror): + # Trace OSError with pop cache + _ = linecache.updatecache(source_name) + self.assertEqual(0, len(linecache.cache.keys())) + def test_lazycache_no_globals(self): lines = linecache.getlines(FILENAME) linecache.clearcache() From fc1f92d7c4be1a1f02fed8f40ce540775b3ddcac Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Wed, 5 May 2021 16:18:29 +0900 Subject: [PATCH 02/19] refactor linecache --- Lib/test/test_linecache.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 83559a7aa124c2..7abf7034a454b8 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -199,15 +199,16 @@ def raise_oserror(*args, **kwargs): def test_updatecache_oserror(self): linecache.clearcache() - def raise_oserror(*args, **kwargs): - raise OSError source_name = os_helper.TESTFN self.addCleanup(os_helper.unlink, os_helper.TESTFN) + + def raise_oserror(*args, **kwargs): + raise OSError with open(source_name, 'w', encoding='utf-8') as source: source.write(SOURCE_4) _ = linecache.getlines(source_name) self.assertEqual(1, len(linecache.cache.keys())) - + with support.swap_attr(os, 'stat', raise_oserror): # Trace OSError with no pop cache _ = linecache.updatecache('dummy') From fc4df5dffbc054200d3714da365075ba8dbbc416 Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Wed, 5 May 2021 16:19:57 +0900 Subject: [PATCH 03/19] add test_multithread_modify_file() --- Lib/test/test_threading.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 546773e3329afa..d97a4b1ecce407 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1338,6 +1338,20 @@ def run(self): # explicitly break the reference cycle to not leak a dangling thread thread.exc = None + def test_multithread_modify_file(self): + import traceback + def modify_file(): + with open(__file__, 'a') as fp: + fp.write(' ') + traceback.format_stack() + + threads = [ + threading.Thread(target=modify_file) + for i in range(100) + ] + [t.start() for t in threads] + [t.join() for t in threads] + class ThreadRunFail(threading.Thread): def run(self): @@ -1634,3 +1648,4 @@ def run_last(): if __name__ == "__main__": unittest.main() + \ No newline at end of file From a9779223a268219f16ff07cdfaaa50648a88eb17 Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Wed, 5 May 2021 16:48:06 +0900 Subject: [PATCH 04/19] refactor test_threading --- Lib/test/test_threading.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index d97a4b1ecce407..9cb28b737ae337 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1648,4 +1648,3 @@ def run_last(): if __name__ == "__main__": unittest.main() - \ No newline at end of file From 759de2b51f0c8a747505e930729c89be035b6175 Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Wed, 5 May 2021 17:03:24 +0900 Subject: [PATCH 05/19] refactor test_multithread_modify_file_noerror() --- Lib/test/test_threading.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 9cb28b737ae337..13d77af8b01ffe 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1338,7 +1338,7 @@ def run(self): # explicitly break the reference cycle to not leak a dangling thread thread.exc = None - def test_multithread_modify_file(self): + def test_multithread_modify_file_noerror(self): import traceback def modify_file(): with open(__file__, 'a') as fp: @@ -1349,8 +1349,13 @@ def modify_file(): threading.Thread(target=modify_file) for i in range(100) ] - [t.start() for t in threads] - [t.join() for t in threads] + try: + for t in threads: + t.start() + for t in threads: + t.join() + finally: + pass class ThreadRunFail(threading.Thread): From 5666a1dbf04d8a6da50a21962e985cd799da25d9 Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Wed, 5 May 2021 17:15:05 +0900 Subject: [PATCH 06/19] refactor raise_oserror() --- Lib/test/test_linecache.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 7abf7034a454b8..f92db10f0b6318 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -37,11 +37,14 @@ def f(): def f(): return 3''' # No ending newline - SOURCE_4 = ''' raise OSError ''' +def raise_oserror(*args, **kwargs): + raise OSError + + class TempFile: def setUp(self): @@ -190,8 +193,7 @@ def test_checkcache_oserror(self): _ = linecache.getlines(FILENAME) self.assertTrue(_) self.assertEqual(1, len(linecache.cache.keys())) - def raise_oserror(*args, **kwargs): - raise OSError + with support.swap_attr(os, 'stat', raise_oserror): # pop all cache _ = linecache.checkcache() @@ -202,8 +204,6 @@ def test_updatecache_oserror(self): source_name = os_helper.TESTFN self.addCleanup(os_helper.unlink, os_helper.TESTFN) - def raise_oserror(*args, **kwargs): - raise OSError with open(source_name, 'w', encoding='utf-8') as source: source.write(SOURCE_4) _ = linecache.getlines(source_name) From 451385948d4064a74bb25865599594595c3771bf Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Sat, 8 May 2021 15:09:23 +0900 Subject: [PATCH 07/19] Change black box tests and refactoring --- Lib/test/test_linecache.py | 80 ++++++++++++++++++++------------------ Lib/test/test_threading.py | 2 +- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index f92db10f0b6318..78729e1561a174 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -37,13 +37,6 @@ def f(): def f(): return 3''' # No ending newline -SOURCE_4 = ''' -raise OSError -''' - -def raise_oserror(*args, **kwargs): - raise OSError - class TempFile: @@ -188,37 +181,6 @@ def test_checkcache(self): self.assertEqual(line, getline(source_name, index + 1)) source_list.append(line) - def test_checkcache_oserror(self): - linecache.clearcache() - _ = linecache.getlines(FILENAME) - self.assertTrue(_) - self.assertEqual(1, len(linecache.cache.keys())) - - with support.swap_attr(os, 'stat', raise_oserror): - # pop all cache - _ = linecache.checkcache() - self.assertEqual(0, len(linecache.cache.keys())) - - def test_updatecache_oserror(self): - linecache.clearcache() - source_name = os_helper.TESTFN - self.addCleanup(os_helper.unlink, os_helper.TESTFN) - - with open(source_name, 'w', encoding='utf-8') as source: - source.write(SOURCE_4) - _ = linecache.getlines(source_name) - self.assertEqual(1, len(linecache.cache.keys())) - - with support.swap_attr(os, 'stat', raise_oserror): - # Trace OSError with no pop cache - _ = linecache.updatecache('dummy') - self.assertEqual(1, len(linecache.cache.keys())) - - with support.swap_attr(os, 'stat', raise_oserror): - # Trace OSError with pop cache - _ = linecache.updatecache(source_name) - self.assertEqual(0, len(linecache.cache.keys())) - def test_lazycache_no_globals(self): lines = linecache.getlines(FILENAME) linecache.clearcache() @@ -276,6 +238,48 @@ def raise_memoryerror(*args, **kwargs): self.assertEqual(lines3, []) self.assertEqual(linecache.getlines(FILENAME), lines) + def test_oserror(self): + def _oserror_helper(): + linecache.clearcache() + be_deleted_file = os_helper.TESTFN + '.1' + be_modified_file = os_helper.TESTFN + '.2' + unchange_file = os_helper.TESTFN + '.3' + self.addCleanup(os_helper.unlink, be_deleted_file) + self.addCleanup(os_helper.unlink, be_modified_file) + self.addCleanup(os_helper.unlink, unchange_file) + with open(be_deleted_file, 'w', encoding='utf-8') as source: + source.write('print("will be deleted")') + with open(be_modified_file, 'w', encoding='utf-8') as source: + source.write('print("will be modified")') + with open(unchange_file, 'w', encoding='utf-8') as source: + source.write('print("unchange")') + + _ = linecache.getlines(be_deleted_file) + _ = linecache.getlines(be_modified_file) + _ = linecache.getlines(unchange_file) + self.assertEqual(3, len(linecache.cache.keys())) + + os.remove(be_deleted_file) + with open(be_modified_file, 'w', encoding='utf-8') as source: + source.write('print("was modified")') + return (be_deleted_file, be_modified_file, unchange_file) + + deleted_file, modified_file, unchange_file = _oserror_helper() + _ = linecache.checkcache(deleted_file) + self.assertEqual(2, len(linecache.cache.keys())) + _ = linecache.checkcache(modified_file) + self.assertEqual(1, len(linecache.cache.keys())) + _ = linecache.checkcache(unchange_file) + self.assertEqual(1, len(linecache.cache.keys())) + + deleted_file, modified_file, unchange_file = _oserror_helper() + _ = linecache.updatecache(deleted_file) + self.assertEqual(2, len(linecache.cache.keys())) + _ = linecache.updatecache(modified_file) + self.assertEqual(2, len(linecache.cache.keys())) + _ = linecache.updatecache(unchange_file) + self.assertEqual(2, len(linecache.cache.keys())) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 13d77af8b01ffe..bb76c41f9a040c 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -19,6 +19,7 @@ import subprocess import signal import textwrap +import traceback from unittest import mock from test import lock_tests @@ -1339,7 +1340,6 @@ def run(self): thread.exc = None def test_multithread_modify_file_noerror(self): - import traceback def modify_file(): with open(__file__, 'a') as fp: fp.write(' ') From 8376d21502d7ea88c7b263bcdedd7f461a7ef12d Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Sun, 9 May 2021 11:16:32 +0900 Subject: [PATCH 08/19] refactor LineCacheInvalidationTests --- Lib/test/test_linecache.py | 83 +++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 78729e1561a174..5e11474dc66564 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -238,47 +238,48 @@ def raise_memoryerror(*args, **kwargs): self.assertEqual(lines3, []) self.assertEqual(linecache.getlines(FILENAME), lines) - def test_oserror(self): - def _oserror_helper(): - linecache.clearcache() - be_deleted_file = os_helper.TESTFN + '.1' - be_modified_file = os_helper.TESTFN + '.2' - unchange_file = os_helper.TESTFN + '.3' - self.addCleanup(os_helper.unlink, be_deleted_file) - self.addCleanup(os_helper.unlink, be_modified_file) - self.addCleanup(os_helper.unlink, unchange_file) - with open(be_deleted_file, 'w', encoding='utf-8') as source: - source.write('print("will be deleted")') - with open(be_modified_file, 'w', encoding='utf-8') as source: - source.write('print("will be modified")') - with open(unchange_file, 'w', encoding='utf-8') as source: - source.write('print("unchange")') - - _ = linecache.getlines(be_deleted_file) - _ = linecache.getlines(be_modified_file) - _ = linecache.getlines(unchange_file) - self.assertEqual(3, len(linecache.cache.keys())) - - os.remove(be_deleted_file) - with open(be_modified_file, 'w', encoding='utf-8') as source: - source.write('print("was modified")') - return (be_deleted_file, be_modified_file, unchange_file) - - deleted_file, modified_file, unchange_file = _oserror_helper() - _ = linecache.checkcache(deleted_file) - self.assertEqual(2, len(linecache.cache.keys())) - _ = linecache.checkcache(modified_file) - self.assertEqual(1, len(linecache.cache.keys())) - _ = linecache.checkcache(unchange_file) - self.assertEqual(1, len(linecache.cache.keys())) - - deleted_file, modified_file, unchange_file = _oserror_helper() - _ = linecache.updatecache(deleted_file) - self.assertEqual(2, len(linecache.cache.keys())) - _ = linecache.updatecache(modified_file) - self.assertEqual(2, len(linecache.cache.keys())) - _ = linecache.updatecache(unchange_file) - self.assertEqual(2, len(linecache.cache.keys())) + +class LineCacheInvalidationTests(unittest.TestCase): + def setUp(self): + super().setUp() + linecache.clearcache() + self.deleted_file = os_helper.TESTFN + '.1' + self.modified_file = os_helper.TESTFN + '.2' + self.unchange_file = os_helper.TESTFN + '.3' + self.addCleanup(os_helper.unlink, self.deleted_file) + self.addCleanup(os_helper.unlink, self.modified_file) + self.addCleanup(os_helper.unlink, self.unchange_file) + with open(self.deleted_file, 'w', encoding='utf-8') as source: + source.write('print("will be deleted")') + with open(self.modified_file, 'w', encoding='utf-8') as source: + source.write('print("will be modified")') + with open(self.unchange_file, 'w', encoding='utf-8') as source: + source.write('print("unchange")') + + linecache.getlines(self.deleted_file) + linecache.getlines(self.modified_file) + linecache.getlines(self.unchange_file) + + os.remove(self.deleted_file) + with open(self.modified_file, 'w', encoding='utf-8') as source: + source.write('print("was modified")') + + def test_checkcache_with_oserror(self): + self.assertEqual(3, len(linecache.cache.keys())) + linecache.checkcache(self.deleted_file) + self.assertTrue(2 == len(linecache.cache.keys()) and + self.deleted_file not in linecache.cache.keys()) + + def test_checkcache_with_not_match_size_or_timestamp(self): + self.assertEqual(3, len(linecache.cache.keys())) + linecache.checkcache(self.modified_file) + self.assertTrue(2 == len(linecache.cache.keys()) and + self.modified_file not in linecache.cache.keys()) + + def test_checkcache_with_no_parameters(self): + self.assertEqual(3, len(linecache.cache.keys())) + linecache.checkcache() + self.assertTrue([self.unchange_file] == list(linecache.cache.keys())) if __name__ == "__main__": From 708e34836f06c0fad5bc35e884cdc2b282bd2fcc Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Sun, 9 May 2021 11:17:36 +0900 Subject: [PATCH 09/19] refactor test_multithread_modify_file_noerror --- Lib/test/test_threading.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index bb76c41f9a040c..6bc9b6db77e619 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1349,13 +1349,9 @@ def modify_file(): threading.Thread(target=modify_file) for i in range(100) ] - try: - for t in threads: - t.start() - for t in threads: - t.join() - finally: - pass + for t in threads: + t.start() + t.join() class ThreadRunFail(threading.Thread): From f021de2b942b2adf9790d4e0aa2e587ea7884fea Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Sun, 9 May 2021 19:28:04 +0900 Subject: [PATCH 10/19] refactor assertions --- Lib/test/test_linecache.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 5e11474dc66564..b7061928ced2fd 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -267,19 +267,19 @@ def setUp(self): def test_checkcache_with_oserror(self): self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache(self.deleted_file) - self.assertTrue(2 == len(linecache.cache.keys()) and - self.deleted_file not in linecache.cache.keys()) + self.assertEqual(2, len(linecache.cache.keys())) + self.assertNotIn(self.deleted_file, linecache.cache.keys()) def test_checkcache_with_not_match_size_or_timestamp(self): self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache(self.modified_file) - self.assertTrue(2 == len(linecache.cache.keys()) and - self.modified_file not in linecache.cache.keys()) + self.assertEqual(2, len(linecache.cache.keys())) + self.assertNotIn(self.modified_file, linecache.cache.keys()) - def test_checkcache_with_no_parameters(self): + def test_checkcache_with_no_parameter(self): self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache() - self.assertTrue([self.unchange_file] == list(linecache.cache.keys())) + self.assertEqual([self.unchange_file], list(linecache.cache.keys())) if __name__ == "__main__": From a396fadba9ae1e8d193a331c9c22b27b19a0f806 Mon Sep 17 00:00:00 2001 From: uniocto Date: Sun, 9 May 2021 19:42:58 +0900 Subject: [PATCH 11/19] Update Lib/test/test_linecache.py Co-authored-by: Irit Katriel --- Lib/test/test_linecache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index b7061928ced2fd..c4e4d7b04e7666 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -264,7 +264,7 @@ def setUp(self): with open(self.modified_file, 'w', encoding='utf-8') as source: source.write('print("was modified")') - def test_checkcache_with_oserror(self): + def test_checkcache_for_deleted_file(self): self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache(self.deleted_file) self.assertEqual(2, len(linecache.cache.keys())) From 833c9b995784040919b382aee5dd4c50eb9042d9 Mon Sep 17 00:00:00 2001 From: uniocto Date: Sun, 9 May 2021 19:43:10 +0900 Subject: [PATCH 12/19] Update Lib/test/test_linecache.py Co-authored-by: Irit Katriel --- Lib/test/test_linecache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index c4e4d7b04e7666..260ba9c209ad0e 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -270,7 +270,7 @@ def test_checkcache_for_deleted_file(self): self.assertEqual(2, len(linecache.cache.keys())) self.assertNotIn(self.deleted_file, linecache.cache.keys()) - def test_checkcache_with_not_match_size_or_timestamp(self): + def test_checkcache_for_modified_file(self): self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache(self.modified_file) self.assertEqual(2, len(linecache.cache.keys())) From bcc20abc7e0f41abf6413ebca5916fbc83fb546b Mon Sep 17 00:00:00 2001 From: uniocto Date: Sun, 9 May 2021 19:43:56 +0900 Subject: [PATCH 13/19] Update Lib/test/test_threading.py Co-authored-by: Irit Katriel --- Lib/test/test_threading.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 6bc9b6db77e619..5bca44d9fcb3db 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1340,6 +1340,7 @@ def run(self): thread.exc = None def test_multithread_modify_file_noerror(self): + # See issue25872 def modify_file(): with open(__file__, 'a') as fp: fp.write(' ') From ba62b834d89c3b58ed59bddbe7d36962789caea2 Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Thu, 13 May 2021 22:09:13 +0900 Subject: [PATCH 14/19] change __file__ and rm traceback.format_stack --- Lib/test/test_threading.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 5bca44d9fcb3db..16b16aae5e8ef0 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -4,7 +4,7 @@ import test.support from test.support import threading_helper -from test.support import verbose, cpython_only +from test.support import verbose, cpython_only, os_helper from test.support.import_helper import import_module from test.support.script_helper import assert_python_ok, assert_python_failure @@ -19,7 +19,6 @@ import subprocess import signal import textwrap -import traceback from unittest import mock from test import lock_tests @@ -1342,9 +1341,9 @@ def run(self): def test_multithread_modify_file_noerror(self): # See issue25872 def modify_file(): - with open(__file__, 'a') as fp: + with open(os_helper.TESTFN, 'w', encoding='utf-8') as fp: fp.write(' ') - traceback.format_stack() + self.addCleanup(os_helper.unlink, os_helper.TESTFN) threads = [ threading.Thread(target=modify_file) From 420a6381dd7470183ce12b436e9127bf702bb21e Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Fri, 14 May 2021 08:12:29 +0900 Subject: [PATCH 15/19] add traceback --- Lib/test/test_threading.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 16b16aae5e8ef0..e3c00bba371c91 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -19,6 +19,7 @@ import subprocess import signal import textwrap +import traceback from unittest import mock from test import lock_tests @@ -1343,6 +1344,7 @@ def test_multithread_modify_file_noerror(self): def modify_file(): with open(os_helper.TESTFN, 'w', encoding='utf-8') as fp: fp.write(' ') + traceback.format_stack() self.addCleanup(os_helper.unlink, os_helper.TESTFN) threads = [ From 2c8269b7f31177d85f5c42fb5c38aeca98be1b85 Mon Sep 17 00:00:00 2001 From: Irit Katriel Date: Fri, 14 May 2021 16:24:02 +0100 Subject: [PATCH 16/19] fix type in field name --- Lib/test/test_linecache.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 260ba9c209ad0e..f7477c263f95da 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -245,20 +245,20 @@ def setUp(self): linecache.clearcache() self.deleted_file = os_helper.TESTFN + '.1' self.modified_file = os_helper.TESTFN + '.2' - self.unchange_file = os_helper.TESTFN + '.3' + self.unchanged_file = os_helper.TESTFN + '.3' self.addCleanup(os_helper.unlink, self.deleted_file) self.addCleanup(os_helper.unlink, self.modified_file) - self.addCleanup(os_helper.unlink, self.unchange_file) + self.addCleanup(os_helper.unlink, self.unchanged_file) with open(self.deleted_file, 'w', encoding='utf-8') as source: source.write('print("will be deleted")') with open(self.modified_file, 'w', encoding='utf-8') as source: source.write('print("will be modified")') - with open(self.unchange_file, 'w', encoding='utf-8') as source: + with open(self.unchanged_file, 'w', encoding='utf-8') as source: source.write('print("unchange")') linecache.getlines(self.deleted_file) linecache.getlines(self.modified_file) - linecache.getlines(self.unchange_file) + linecache.getlines(self.unchanged_file) os.remove(self.deleted_file) with open(self.modified_file, 'w', encoding='utf-8') as source: @@ -279,7 +279,7 @@ def test_checkcache_for_modified_file(self): def test_checkcache_with_no_parameter(self): self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache() - self.assertEqual([self.unchange_file], list(linecache.cache.keys())) + self.assertEqual([self.unchanged_file], list(linecache.cache.keys())) if __name__ == "__main__": From 8efe040dba134d6d27e590a887feb07e376ff401 Mon Sep 17 00:00:00 2001 From: Irit Katriel Date: Fri, 14 May 2021 16:43:55 +0100 Subject: [PATCH 17/19] reduce repetition in setUp --- Lib/test/test_linecache.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index f7477c263f95da..1baafc9862cf80 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -246,19 +246,14 @@ def setUp(self): self.deleted_file = os_helper.TESTFN + '.1' self.modified_file = os_helper.TESTFN + '.2' self.unchanged_file = os_helper.TESTFN + '.3' - self.addCleanup(os_helper.unlink, self.deleted_file) - self.addCleanup(os_helper.unlink, self.modified_file) - self.addCleanup(os_helper.unlink, self.unchanged_file) - with open(self.deleted_file, 'w', encoding='utf-8') as source: - source.write('print("will be deleted")') - with open(self.modified_file, 'w', encoding='utf-8') as source: - source.write('print("will be modified")') - with open(self.unchanged_file, 'w', encoding='utf-8') as source: - source.write('print("unchange")') - linecache.getlines(self.deleted_file) - linecache.getlines(self.modified_file) - linecache.getlines(self.unchanged_file) + for fname in (self.deleted_file, + self.modified_file, + self.unchanged_file): + self.addCleanup(os_helper.unlink, fname) + with open(fname, 'w', encoding='utf-8') as source: + source.write(f'print("I am {fname}")') + linecache.getlines(fname) os.remove(self.deleted_file) with open(self.modified_file, 'w', encoding='utf-8') as source: From 240eb9af7e3ee167373323398dd01f6beb212767 Mon Sep 17 00:00:00 2001 From: Irit Katriel Date: Fri, 14 May 2021 17:40:09 +0100 Subject: [PATCH 18/19] check cache keys directly, not count --- Lib/test/test_linecache.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 1baafc9862cf80..c6e2dadbb25e1f 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -253,28 +253,32 @@ def setUp(self): self.addCleanup(os_helper.unlink, fname) with open(fname, 'w', encoding='utf-8') as source: source.write(f'print("I am {fname}")') + + self.assertNotIn(fname, linecache.cache) linecache.getlines(fname) + self.assertIn(fname, linecache.cache) os.remove(self.deleted_file) with open(self.modified_file, 'w', encoding='utf-8') as source: source.write('print("was modified")') def test_checkcache_for_deleted_file(self): - self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache(self.deleted_file) - self.assertEqual(2, len(linecache.cache.keys())) - self.assertNotIn(self.deleted_file, linecache.cache.keys()) + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) def test_checkcache_for_modified_file(self): - self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache(self.modified_file) - self.assertEqual(2, len(linecache.cache.keys())) - self.assertNotIn(self.modified_file, linecache.cache.keys()) + self.assertIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) def test_checkcache_with_no_parameter(self): - self.assertEqual(3, len(linecache.cache.keys())) linecache.checkcache() - self.assertEqual([self.unchanged_file], list(linecache.cache.keys())) + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) if __name__ == "__main__": From 78897e772b379b605ebe21eb3099a383fbb94fc1 Mon Sep 17 00:00:00 2001 From: So Ukiyama Date: Sat, 15 May 2021 21:18:18 +0900 Subject: [PATCH 19/19] addCleanup to outside of the mofidy_file() --- Lib/test/test_threading.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index e3c00bba371c91..5acb7b7e47870e 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -1345,8 +1345,8 @@ def modify_file(): with open(os_helper.TESTFN, 'w', encoding='utf-8') as fp: fp.write(' ') traceback.format_stack() - self.addCleanup(os_helper.unlink, os_helper.TESTFN) + self.addCleanup(os_helper.unlink, os_helper.TESTFN) threads = [ threading.Thread(target=modify_file) for i in range(100) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy