]> granicus.if.org Git - python/commitdiff
bpo-29110: add test for Aifc_write. (GH-293)
authorINADA Naoki <methane@users.noreply.github.com>
Sun, 26 Feb 2017 12:11:58 +0000 (21:11 +0900)
committerGitHub <noreply@github.com>
Sun, 26 Feb 2017 12:11:58 +0000 (21:11 +0900)
follow up of GH-162

Lib/aifc.py
Lib/test/test_aifc.py

index 380adc8d0da619556ebd56bd9a04513115d40264..13ad7dc5ca3d62d20dd6500053af77298d52eccf 100644 (file)
@@ -303,6 +303,8 @@ class Aifc_read:
     # _ssnd_chunk -- instantiation of a chunk class for the SSND chunk
     # _framesize -- size of one frame in the file
 
+    _file = None  # Set here since __del__ checks it
+
     def initfp(self, file):
         self._version = 0
         self._convert = None
@@ -547,6 +549,8 @@ class Aifc_write:
     # _datalength -- the size of the audio samples written to the header
     # _datawritten -- the size of the audio samples actually written
 
+    _file = None  # Set here since __del__ checks it
+
     def __init__(self, f):
         if isinstance(f, str):
             file_object = builtins.open(f, 'wb')
index 989df93a3a5741bc9f1ef7d8bacdbb614de3c1c0..a731a5136ba5fd9992a628328253beddd5116423 100644 (file)
@@ -1,5 +1,6 @@
 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
@@ -155,7 +156,14 @@ class AifcMiscTest(audiotests.AudioTests, unittest.TestCase):
             with self.assertRaises(aifc.Error):
                 # Try opening a non-AIFC file, with the expectation that
                 # `aifc.open` will fail (without raising a ResourceWarning)
-                f = self.f = aifc.open(non_aifc_file, 'rb')
+                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')