Commit 2a3018ab authored by R. David Murray's avatar R. David Murray

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.
........
parent 828ffebc
...@@ -144,9 +144,6 @@ class Error(Exception): ...@@ -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: ...@@ -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')
......
This diff was suppressed by a .gitattributes entry.
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): ...@@ -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 ...@@ -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 ...@@ -545,6 +546,7 @@ Randy Pausch
Samuele Pedroni Samuele Pedroni
Marcel van der Peijl Marcel van der Peijl
Steven Pemberton Steven Pemberton
Santiago Peresn
Mark Perrego Mark Perrego
Trevor Perrin Trevor Perrin
Tim Peters Tim Peters
......
...@@ -473,6 +473,8 @@ Core and Builtins ...@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment