summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2017-02-26 19:09:32 (GMT)
committerGitHub <noreply@github.com>2017-02-26 19:09:32 (GMT)
commitc9131b61fa060a51ec181053cade9f0a7ee91e4f (patch)
tree498e94e480b82021f1fcad2cb068f4f13f66d973 /Lib/test
parent6b81003bdbd9375886bae54f876650bcdccfe6c7 (diff)
downloadcpython-c9131b61fa060a51ec181053cade9f0a7ee91e4f.zip
cpython-c9131b61fa060a51ec181053cade9f0a7ee91e4f.tar.gz
cpython-c9131b61fa060a51ec181053cade9f0a7ee91e4f.tar.bz2
[3.6] bpo-29110: Fix file object leak in `aifc.open` (#310)
(cherry picked from commit 03f68b60e17b57f6f13729ff73245dbb37b30a4c) (GH-162) (cherry picked from commit 5dc33eea538361f8a218255f83db2e9298dd8c53) (GH-293)
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_aifc.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index 1bd1f89..a731a51 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 io
@@ -149,6 +150,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()