Issue #8897: Fix sunau module, use bytes to write the header. Patch written by

Thomas Jollans.
This commit is contained in:
Victor Stinner 2010-06-07 20:14:04 +00:00
parent 7eeb5b5e50
commit 7f3652e371
4 changed files with 75 additions and 1 deletions

View File

@ -299,7 +299,7 @@ class Au_write:
self._nframeswritten = 0 self._nframeswritten = 0
self._datawritten = 0 self._datawritten = 0
self._datalength = 0 self._datalength = 0
self._info = '' self._info = b''
self._comptype = 'ULAW' # default is U-law self._comptype = 'ULAW' # default is U-law
def setnchannels(self, nchannels): def setnchannels(self, nchannels):

70
Lib/test/test_sunau.py Normal file
View File

@ -0,0 +1,70 @@
from test.support import run_unittest, TESTFN
import unittest
import os
import sunau
nchannels = 2
sampwidth = 2
framerate = 8000
nframes = 100
class SunAUTest(unittest.TestCase):
def setUp(self):
self.f = None
def tearDown(self):
if self.f is not None:
self.f.close()
try:
os.remove(TESTFN)
except OSError:
pass
def test_lin(self):
self.f = sunau.open(TESTFN, 'w')
self.f.setnchannels(nchannels)
self.f.setsampwidth(sampwidth)
self.f.setframerate(framerate)
self.f.setcomptype('NONE', 'not compressed')
output = b'\xff\x00\x12\xcc' * (nframes * nchannels * sampwidth // 4)
self.f.writeframes(output)
self.f.close()
self.f = sunau.open(TESTFN, 'rb')
self.assertEqual(nchannels, self.f.getnchannels())
self.assertEqual(sampwidth, self.f.getsampwidth())
self.assertEqual(framerate, self.f.getframerate())
self.assertEqual(nframes, self.f.getnframes())
self.assertEqual('NONE', self.f.getcomptype())
self.assertEqual(self.f.readframes(nframes), output)
self.f.close()
def test_ulaw(self):
self.f = sunau.open(TESTFN, 'w')
self.f.setnchannels(nchannels)
self.f.setsampwidth(sampwidth)
self.f.setframerate(framerate)
self.f.setcomptype('ULAW', '')
# u-law compression is lossy, therefore we can't expect non-zero data
# to come back unchanged.
output = b'\0' * nframes * nchannels * sampwidth
self.f.writeframes(output)
self.f.close()
self.f = sunau.open(TESTFN, 'rb')
self.assertEqual(nchannels, self.f.getnchannels())
self.assertEqual(sampwidth, self.f.getsampwidth())
self.assertEqual(framerate, self.f.getframerate())
self.assertEqual(nframes, self.f.getnframes())
self.assertEqual('ULAW', self.f.getcomptype())
self.assertEqual(self.f.readframes(nframes), output)
self.f.close()
def test_main():
run_unittest(SunAUTest)
if __name__ == "__main__":
unittest.main()

View File

@ -389,6 +389,7 @@ Orjan Johansen
Fredrik Johansson Fredrik Johansson
Gregory K. Johnson Gregory K. Johnson
Simon Johnston Simon Johnston
Thomas Jollans
Evan Jones Evan Jones
Jeremy Jones Jeremy Jones
Richard Jones Richard Jones

View File

@ -398,6 +398,9 @@ C-API
Library Library
------- -------
- Issue #8897: Fix sunau module, use bytes to write the header. Patch written
by Thomas Jollans.
- Issue #8899: time.struct_time now has class and atribute docstrings. - Issue #8899: time.struct_time now has class and atribute docstrings.
- Issue #6470: Drop UNC prefix in FixTk. - Issue #6470: Drop UNC prefix in FixTk.