| from test.test_support import findfile, run_unittest, TESTFN | |
| import unittest | |
| import os | |
| import aifc | |
| class AIFCTest(unittest.TestCase): | |
| def setUp(self): | |
| self.f = self.fout = None | |
| self.sndfilepath = findfile('Sine-1000Hz-300ms.aif') | |
| def tearDown(self): | |
| if self.f is not None: | |
| self.f.close() | |
| if self.fout is not None: | |
| try: | |
| self.fout.close() | |
| except (aifc.Error, AttributeError): | |
| pass | |
| try: | |
| os.remove(TESTFN) | |
| except OSError: | |
| pass | |
| def test_skipunknown(self): | |
| #Issue 2245 | |
| #This file contains chunk types aifc doesn't recognize. | |
| self.f = aifc.open(self.sndfilepath) | |
| def test_params(self): | |
| f = 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) | |
| self.assertEqual(f.getcomptype(), 'NONE') | |
| self.assertEqual(f.getcompname(), 'not compressed') | |
| self.assertEqual(f.getparams(), (2, 2, 48000, 14400, 'NONE', 'not compressed')) | |
| def test_read(self): | |
| f = self.f = aifc.open(self.sndfilepath) | |
| self.assertEqual(f.tell(), 0) | |
| self.assertEqual(f.readframes(2), '\x00\x00\x00\x00\x0b\xd4\x0b\xd4') | |
| f.rewind() | |
| pos0 = f.tell() | |
| self.assertEqual(pos0, 0) | |
| self.assertEqual(f.readframes(2), '\x00\x00\x00\x00\x0b\xd4\x0b\xd4') | |
| pos2 = f.tell() | |
| self.assertEqual(pos2, 2) | |
| self.assertEqual(f.readframes(2), '\x17t\x17t"\xad"\xad') | |
| f.setpos(pos2) | |
| self.assertEqual(f.readframes(2), '\x17t\x17t"\xad"\xad') | |
| f.setpos(pos0) | |
| self.assertEqual(f.readframes(2), '\x00\x00\x00\x00\x0b\xd4\x0b\xd4') | |
| def test_write(self): | |
| f = self.f = aifc.open(self.sndfilepath) | |
| fout = self.fout = aifc.open(TESTFN, 'wb') | |
| fout.aifc() | |
| fout.setparams(f.getparams()) | |
| for frame in range(f.getnframes()): | |
| fout.writeframes(f.readframes(1)) | |
| fout.close() | |
| fout = self.fout = aifc.open(TESTFN, 'rb') | |
| f.rewind() | |
| self.assertEqual(f.getparams(), fout.getparams()) | |
| self.assertEqual(f.readframes(5), fout.readframes(5)) | |
| def test_compress(self): | |
| f = self.f = aifc.open(self.sndfilepath) | |
| fout = self.fout = aifc.open(TESTFN, 'wb') | |
| fout.aifc() | |
| fout.setnchannels(f.getnchannels()) | |
| fout.setsampwidth(f.getsampwidth()) | |
| fout.setframerate(f.getframerate()) | |
| fout.setcomptype('ULAW', 'foo') | |
| for frame in range(f.getnframes()): | |
| fout.writeframes(f.readframes(1)) | |
| fout.close() | |
| self.assertLess( | |
| os.stat(TESTFN).st_size, | |
| os.stat(self.sndfilepath).st_size*0.75, | |
| ) | |
| fout = self.fout = aifc.open(TESTFN, 'rb') | |
| f.rewind() | |
| self.assertEqual(f.getparams()[0:3], fout.getparams()[0:3]) | |
| self.assertEqual(fout.getcomptype(), 'ULAW') | |
| self.assertEqual(fout.getcompname(), 'foo') | |
| # 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, 'rb') | |
| 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) | |
| if __name__ == "__main__": | |
| unittest.main() |