diff options
author | Samet YASLAN <sametyaslan@gmail.com> | 2023-06-11 18:51:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-11 18:51:21 (GMT) |
commit | 3f7c0810f6158a7ff37be432f8d7f9511427489f (patch) | |
tree | 2d7aa6981b6b921ac8da80696cc568bf4e712c70 | |
parent | 18d16e93b6d4b7b10c5145890daa92b760fe962a (diff) | |
download | cpython-3f7c0810f6158a7ff37be432f8d7f9511427489f.zip cpython-3f7c0810f6158a7ff37be432f8d7f9511427489f.tar.gz cpython-3f7c0810f6158a7ff37be432f8d7f9511427489f.tar.bz2 |
bpo-44185: Added close() to mock_open __exit__ (#26902)
-rw-r--r-- | Lib/test/test_unittest/testmock/testwith.py | 6 | ||||
-rw-r--r-- | Lib/unittest/mock.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-06-24-20-45-03.bpo-44185.ZHb8yJ.rst | 3 |
3 files changed, 10 insertions, 3 deletions
diff --git a/Lib/test/test_unittest/testmock/testwith.py b/Lib/test/test_unittest/testmock/testwith.py index 8dc8eb1..56cb163 100644 --- a/Lib/test/test_unittest/testmock/testwith.py +++ b/Lib/test/test_unittest/testmock/testwith.py @@ -158,7 +158,7 @@ class TestMockOpen(unittest.TestCase): f.read() expected_calls = [call('foo'), call().__enter__(), call().read(), - call().__exit__(None, None, None)] + call().__exit__(None, None, None), call().close()] self.assertEqual(mock.mock_calls, expected_calls) self.assertIs(f, handle) @@ -172,9 +172,9 @@ class TestMockOpen(unittest.TestCase): expected_calls = [ call('foo'), call().__enter__(), call().read(), - call().__exit__(None, None, None), + call().__exit__(None, None, None), call().close(), call('bar'), call().__enter__(), call().read(), - call().__exit__(None, None, None)] + call().__exit__(None, None, None), call().close()] self.assertEqual(mock.mock_calls, expected_calls) def test_explicit_mock(self): diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 4ca7062..f10f9b0 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -2941,6 +2941,9 @@ def mock_open(mock=None, read_data=''): return handle.readline.return_value return next(_state[0]) + def _exit_side_effect(exctype, excinst, exctb): + handle.close() + global file_spec if file_spec is None: import _io @@ -2967,6 +2970,7 @@ def mock_open(mock=None, read_data=''): handle.readlines.side_effect = _readlines_side_effect handle.__iter__.side_effect = _iter_side_effect handle.__next__.side_effect = _next_side_effect + handle.__exit__.side_effect = _exit_side_effect def reset_data(*args, **kwargs): _state[0] = _to_stream(read_data) diff --git a/Misc/NEWS.d/next/Library/2021-06-24-20-45-03.bpo-44185.ZHb8yJ.rst b/Misc/NEWS.d/next/Library/2021-06-24-20-45-03.bpo-44185.ZHb8yJ.rst new file mode 100644 index 0000000..056ab8d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-24-20-45-03.bpo-44185.ZHb8yJ.rst @@ -0,0 +1,3 @@ +:func:`unittest.mock.mock_open` will call the :func:`close` method of the file +handle mock when it is exiting from the context manager. +Patch by Samet Yaslan. |