blob: e0aace495c861a5a7e62258af938e5b62ae0901b [file] [log] [blame]
Benjamin Petersonee8712c2008-05-20 21:35:26 +00001from test.support import TESTFN, run_unittest
Guido van Rossum3b0a3292002-08-09 16:38:32 +00002import os
Guido van Rossuma00afc12000-10-09 20:05:59 +00003import wave
Benjamin Peterson5efea042010-01-13 03:49:50 +00004import struct
Christian Heimes2202f872008-02-06 14:31:34 +00005import unittest
Guido van Rossuma00afc12000-10-09 20:05:59 +00006
7nchannels = 2
8sampwidth = 2
9framerate = 8000
10nframes = 100
11
Christian Heimes2202f872008-02-06 14:31:34 +000012class TestWave(unittest.TestCase):
Guido van Rossuma00afc12000-10-09 20:05:59 +000013
Christian Heimes2202f872008-02-06 14:31:34 +000014 def setUp(self):
15 self.f = None
Guido van Rossuma00afc12000-10-09 20:05:59 +000016
Christian Heimes2202f872008-02-06 14:31:34 +000017 def tearDown(self):
18 if self.f is not None:
19 self.f.close()
20 try:
21 os.remove(TESTFN)
22 except OSError:
23 pass
24
Mark Dickinson64a38c02010-08-28 17:22:16 +000025 def test_it(self, test_rounding=False):
Christian Heimes2202f872008-02-06 14:31:34 +000026 self.f = wave.open(TESTFN, 'wb')
27 self.f.setnchannels(nchannels)
28 self.f.setsampwidth(sampwidth)
Mark Dickinson64a38c02010-08-28 17:22:16 +000029 if test_rounding:
30 self.f.setframerate(framerate - 0.1)
31 else:
32 self.f.setframerate(framerate)
Christian Heimes2202f872008-02-06 14:31:34 +000033 self.f.setnframes(nframes)
34 output = b'\0' * nframes * nchannels * sampwidth
35 self.f.writeframes(output)
36 self.f.close()
37
38 self.f = wave.open(TESTFN, 'rb')
39 self.assertEqual(nchannels, self.f.getnchannels())
40 self.assertEqual(sampwidth, self.f.getsampwidth())
41 self.assertEqual(framerate, self.f.getframerate())
42 self.assertEqual(nframes, self.f.getnframes())
43 self.assertEqual(self.f.readframes(nframes), output)
44
Mark Dickinson64a38c02010-08-28 17:22:16 +000045 def test_fractional_framerate(self):
46 """
47 Addresses [ 1512791 ] module wave does no rounding
48 Floating point framerates should be rounded, rather than truncated.
49 """
50 self.test_it(test_rounding=True)
51
Benjamin Peterson5efea042010-01-13 03:49:50 +000052 def test_issue7681(self):
53 self.f = wave.open(TESTFN, 'wb')
54 self.f.setnchannels(nchannels)
55 self.f.setsampwidth(sampwidth)
56 self.f.setframerate(framerate)
57 # Don't call setnframes, make _write_header divide to figure it out
58 output = b'\0' * nframes * nchannels * sampwidth
59 self.f.writeframes(output)
60
61
Christian Heimes2202f872008-02-06 14:31:34 +000062def test_main():
63 run_unittest(TestWave)
64
65if __name__ == '__main__':
66 test_main()