From: R. David Murray Date: Thu, 7 May 2009 16:27:02 +0000 (+0000) Subject: Issue5955: aifc's close method did not close the file it wrapped, X-Git-Tag: v2.7a1~1255 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8fd522fb5f45aa05252c32063dc9c624f2e788b3;p=python Issue5955: aifc's close method did not close the file it wrapped, now it does. This also means getfp method now returns the real fp. --- diff --git a/Lib/aifc.py b/Lib/aifc.py index 197e755210..b4123ca90f 100644 --- a/Lib/aifc.py +++ b/Lib/aifc.py @@ -282,10 +282,11 @@ class Aifc_read: self._convert = None self._markers = [] self._soundpos = 0 - self._file = Chunk(file) - if self._file.getname() != 'FORM': + self._file = file + chunk = Chunk(file) + if chunk.getname() != 'FORM': raise Error, 'file does not start with FORM id' - formdata = self._file.read(4) + formdata = chunk.read(4) if formdata == 'AIFF': self._aifc = 0 elif formdata == 'AIFC': diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py index 0aed908005..54694ea2d9 100644 --- a/Lib/test/test_aifc.py +++ b/Lib/test/test_aifc.py @@ -91,6 +91,21 @@ class AIFCTest(unittest.TestCase): # XXX: this test fails, not sure if it should succeed or not # self.assertEqual(f.readframes(5), fout.readframes(5)) + def test_close(self): + class Wrapfile(object): + def __init__(self, file): + self.file = open(file) + self.closed = False + def close(self): + self.file.close() + self.closed = True + def __getattr__(self, attr): return getattr(self.file, attr) + testfile = Wrapfile(self.sndfilepath) + f = self.f = aifc.open(testfile) + self.assertEqual(testfile.closed, False) + f.close() + self.assertEqual(testfile.closed, True) + def test_main(): run_unittest(AIFCTest)