mirror of
https://github.com/python/cpython.git
synced 2025-09-02 15:07:53 +00:00
Merged revisions 72100-72101 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r72100 | r.david.murray | 2009-04-29 09:17:37 -0400 (Wed, 29 Apr 2009) | 7 lines Fix issue 2245. aifc now skips any chunk type it doesn't actually process instead of throwing errors for anything not in an explicit skip list. This is per this spec: http://www.cnpbagwell.com/aiff-c.txt. Spec reference and test sound file provided by Santiago Peresón, fix based on patch by Hiroaki Kawai. ........ r72101 | r.david.murray | 2009-04-29 09:51:44 -0400 (Wed, 29 Apr 2009) | 2 lines Now that we've got a test_aifc, add a few tests. ........
This commit is contained in:
parent
aa17a7fc98
commit
b507d2e07d
6 changed files with 63 additions and 9 deletions
|
@ -144,9 +144,6 @@ class Error(Exception):
|
||||||
|
|
||||||
_AIFC_version = 0xA2805140 # Version 1 of AIFF-C
|
_AIFC_version = 0xA2805140 # Version 1 of AIFF-C
|
||||||
|
|
||||||
_skiplist = b'COMT', b'INST', b'MIDI', b'AESD', \
|
|
||||||
b'APPL', b'NAME', b'AUTH', b'(c) ', b'ANNO'
|
|
||||||
|
|
||||||
def _read_long(file):
|
def _read_long(file):
|
||||||
try:
|
try:
|
||||||
return struct.unpack('>l', file.read(4))[0]
|
return struct.unpack('>l', file.read(4))[0]
|
||||||
|
@ -313,11 +310,6 @@ class Aifc_read:
|
||||||
self._version = _read_ulong(chunk)
|
self._version = _read_ulong(chunk)
|
||||||
elif chunkname == b'MARK':
|
elif chunkname == b'MARK':
|
||||||
self._readmark(chunk)
|
self._readmark(chunk)
|
||||||
elif chunkname in _skiplist:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise Error('unrecognized chunk type ' +
|
|
||||||
chunkname.decode('latin1'))
|
|
||||||
chunk.skip()
|
chunk.skip()
|
||||||
if not self._comm_chunk_read or not self._ssnd_chunk:
|
if not self._comm_chunk_read or not self._ssnd_chunk:
|
||||||
raise Error('COMM chunk and/or SSND chunk missing')
|
raise Error('COMM chunk and/or SSND chunk missing')
|
||||||
|
|
BIN
Lib/test/Sine-1000Hz-300ms.aif
Normal file
BIN
Lib/test/Sine-1000Hz-300ms.aif
Normal file
Binary file not shown.
59
Lib/test/test_aifc.py
Normal file
59
Lib/test/test_aifc.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
from test.support import findfile, run_unittest
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
import aifc
|
||||||
|
|
||||||
|
|
||||||
|
class AIFCTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.sndfilepath = findfile('Sine-1000Hz-300ms.aif')
|
||||||
|
|
||||||
|
def test_skipunknown(self):
|
||||||
|
#Issue 2245
|
||||||
|
#This file contains chunk types aifc doesn't recognize.
|
||||||
|
f = aifc.open(self.sndfilepath)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def test_params(self):
|
||||||
|
f = aifc.open(self.sndfilepath)
|
||||||
|
self.assertEqual(f.getnchannels(), 2)
|
||||||
|
self.assertEqual(f.getsampwidth(), 2)
|
||||||
|
self.assertEqual(f.getframerate(), 48000)
|
||||||
|
self.assertEqual(f.getnframes(), 14400)
|
||||||
|
# XXX: are the next two correct? The docs say/imply they are supposed
|
||||||
|
# to be strings.
|
||||||
|
self.assertEqual(f.getcomptype(), b'NONE')
|
||||||
|
self.assertEqual(f.getcompname(), b'not compressed')
|
||||||
|
self.assertEqual(
|
||||||
|
f.getparams(),
|
||||||
|
(2, 2, 48000, 14400, b'NONE', b'not compressed'),
|
||||||
|
)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def test_read(self):
|
||||||
|
f = aifc.open(self.sndfilepath)
|
||||||
|
self.assertEqual(f.tell(), 0)
|
||||||
|
self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4')
|
||||||
|
f.rewind()
|
||||||
|
pos0 = f.tell()
|
||||||
|
self.assertEqual(pos0, 0)
|
||||||
|
self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4')
|
||||||
|
pos2 = f.tell()
|
||||||
|
self.assertEqual(pos2, 2)
|
||||||
|
self.assertEqual(f.readframes(2), b'\x17t\x17t"\xad"\xad')
|
||||||
|
f.setpos(pos2)
|
||||||
|
self.assertEqual(f.readframes(2), b'\x17t\x17t"\xad"\xad')
|
||||||
|
f.setpos(pos0)
|
||||||
|
self.assertEqual(f.readframes(2), b'\x00\x00\x00\x00\x0b\xd4\x0b\xd4')
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
#XXX Need more tests!
|
||||||
|
|
||||||
|
|
||||||
|
def test_main():
|
||||||
|
run_unittest(AIFCTest)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
|
@ -9,7 +9,6 @@ class TestUntestedModules(unittest.TestCase):
|
||||||
def test_at_least_import_untested_modules(self):
|
def test_at_least_import_untested_modules(self):
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
warnings.simplefilter("ignore")
|
warnings.simplefilter("ignore")
|
||||||
import aifc
|
|
||||||
import bdb
|
import bdb
|
||||||
import cgitb
|
import cgitb
|
||||||
import code
|
import code
|
||||||
|
|
|
@ -372,6 +372,7 @@ Tamito Kajiyama
|
||||||
Peter van Kampen
|
Peter van Kampen
|
||||||
Jacob Kaplan-Moss
|
Jacob Kaplan-Moss
|
||||||
Lou Kates
|
Lou Kates
|
||||||
|
Hiroaki Kawai
|
||||||
Sebastien Keim
|
Sebastien Keim
|
||||||
Robert Kern
|
Robert Kern
|
||||||
Randall Kern
|
Randall Kern
|
||||||
|
@ -545,6 +546,7 @@ Randy Pausch
|
||||||
Samuele Pedroni
|
Samuele Pedroni
|
||||||
Marcel van der Peijl
|
Marcel van der Peijl
|
||||||
Steven Pemberton
|
Steven Pemberton
|
||||||
|
Santiago Peresón
|
||||||
Mark Perrego
|
Mark Perrego
|
||||||
Trevor Perrin
|
Trevor Perrin
|
||||||
Tim Peters
|
Tim Peters
|
||||||
|
|
|
@ -473,6 +473,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #2245: aifc now skips chunk types it doesn't recognize, per spec.
|
||||||
|
|
||||||
- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive
|
- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive
|
||||||
anymore.
|
anymore.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue