| from test.support import TESTFN, unlink |
| import unittest |
| import pickle |
| 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() |
| unlink(TESTFN) |
| |
| 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_getparams(self): |
| self.f = sunau.open(TESTFN, 'w') |
| self.f.setnchannels(nchannels) |
| self.f.setsampwidth(sampwidth) |
| self.f.setframerate(framerate) |
| self.f.setcomptype('ULAW', '') |
| output = b'\0' * nframes * nchannels * sampwidth |
| self.f.writeframes(output) |
| self.f.close() |
| |
| self.f = sunau.open(TESTFN, 'rb') |
| params = self.f.getparams() |
| self.assertEqual(params.nchannels, nchannels) |
| self.assertEqual(params.sampwidth, sampwidth) |
| self.assertEqual(params.framerate, framerate) |
| self.assertEqual(params.nframes, nframes) |
| self.assertEqual(params.comptype, 'ULAW') |
| |
| dump = pickle.dumps(params) |
| self.assertEqual(pickle.loads(dump), params) |
| |
| def test_write_context_manager_calls_close(self): |
| # Close checks for a minimum header and will raise an error |
| # if it is not set, so this proves that close is called. |
| with self.assertRaises(sunau.Error): |
| with sunau.open(TESTFN, 'wb') as f: |
| pass |
| with self.assertRaises(sunau.Error): |
| with open(TESTFN, 'wb') as testfile: |
| with sunau.open(testfile): |
| pass |
| |
| def test_context_manager_with_open_file(self): |
| with open(TESTFN, 'wb') as testfile: |
| with sunau.open(testfile) as f: |
| f.setnchannels(nchannels) |
| f.setsampwidth(sampwidth) |
| f.setframerate(framerate) |
| self.assertFalse(testfile.closed) |
| with open(TESTFN, 'rb') as testfile: |
| with sunau.open(testfile) as f: |
| self.assertFalse(f.getfp().closed) |
| params = f.getparams() |
| self.assertEqual(params[0], nchannels) |
| self.assertEqual(params[1], sampwidth) |
| self.assertEqual(params[2], framerate) |
| self.assertIsNone(f.getfp()) |
| self.assertFalse(testfile.closed) |
| |
| def test_context_manager_with_filename(self): |
| # If the file doesn't get closed, this test won't fail, but it will |
| # produce a resource leak warning. |
| with sunau.open(TESTFN, 'wb') as f: |
| f.setnchannels(nchannels) |
| f.setsampwidth(sampwidth) |
| f.setframerate(framerate) |
| with sunau.open(TESTFN) as f: |
| self.assertFalse(f.getfp().closed) |
| params = f.getparams() |
| self.assertEqual(params[0], nchannels) |
| self.assertEqual(params[1], sampwidth) |
| self.assertEqual(params[2], framerate) |
| self.assertIsNone(f.getfp()) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |