diff options
| author | INADA Naoki <methane@users.noreply.github.com> | 2017-02-26 19:35:00 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-26 19:35:00 (GMT) |
| commit | b7fb1e25c89a9eb85b95027f4167bc0977687c43 (patch) | |
| tree | ee7ef376531c97f9cbd3a634d76ac9a2b9f495ef /Lib/test | |
| parent | 21c697fd1073d6ab59e2ba82ea80bc81b9c4125c (diff) | |
| download | cpython-b7fb1e25c89a9eb85b95027f4167bc0977687c43.zip cpython-b7fb1e25c89a9eb85b95027f4167bc0977687c43.tar.gz cpython-b7fb1e25c89a9eb85b95027f4167bc0977687c43.tar.bz2 | |
bpo-29110: Fix file object leak in `aifc.open` (GH-311)
(cherry picked from commit 03f68b6) (GH-162)
(cherry picked from commit 5dc33ee) (GH-293)
Diffstat (limited to 'Lib/test')
| -rw-r--r-- | Lib/test/test_aifc.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py index ab51437..eaa24b6 100644 --- a/Lib/test/test_aifc.py +++ b/Lib/test/test_aifc.py @@ -1,5 +1,6 @@ -from test.support import findfile, TESTFN, unlink +from test.support import check_no_resource_warning, findfile, TESTFN, unlink import unittest +from unittest import mock from test import audiotests from audioop import byteswap import os @@ -150,6 +151,21 @@ class AifcMiscTest(audiotests.AudioTests, unittest.TestCase): #This file contains chunk types aifc doesn't recognize. self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif')) + def test_close_opened_files_on_error(self): + non_aifc_file = findfile('pluck-pcm8.wav', subdir='audiodata') + with check_no_resource_warning(self): + with self.assertRaises(aifc.Error): + # Try opening a non-AIFC file, with the expectation that + # `aifc.open` will fail (without raising a ResourceWarning) + self.f = aifc.open(non_aifc_file, 'rb') + + # Aifc_write.initfp() won't raise in normal case. But some errors + # (e.g. MemoryError, KeyboardInterrupt, etc..) can happen. + with mock.patch.object(aifc.Aifc_write, 'initfp', + side_effect=RuntimeError): + with self.assertRaises(RuntimeError): + self.fout = aifc.open(TESTFN, 'wb') + def test_params_added(self): f = self.f = aifc.open(TESTFN, 'wb') f.aiff() |
