| from test import test_support | 
 | test_support.requires('audio') | 
 |  | 
 | from test.test_support import findfile, run_unittest | 
 |  | 
 | import errno | 
 | import sys | 
 | import audioop | 
 | import unittest | 
 |  | 
 | linuxaudiodev = test_support.import_module('linuxaudiodev', deprecated=True) | 
 | sunaudio = test_support.import_module('sunaudio', deprecated=True) | 
 |  | 
 | SND_FORMAT_MULAW_8 = 1 | 
 |  | 
 | class LinuxAudioDevTests(unittest.TestCase): | 
 |  | 
 |     def setUp(self): | 
 |         self.dev = linuxaudiodev.open('w') | 
 |  | 
 |     def tearDown(self): | 
 |         self.dev.close() | 
 |  | 
 |     def test_methods(self): | 
 |         # at least check that these methods can be invoked | 
 |         self.dev.bufsize() | 
 |         self.dev.obufcount() | 
 |         self.dev.obuffree() | 
 |         self.dev.getptr() | 
 |         self.dev.fileno() | 
 |  | 
 |     def test_play_sound_file(self): | 
 |         path = findfile("audiotest.au") | 
 |         fp = open(path, 'r') | 
 |         size, enc, rate, nchannels, extra = sunaudio.gethdr(fp) | 
 |         data = fp.read() | 
 |         fp.close() | 
 |  | 
 |         if enc != SND_FORMAT_MULAW_8: | 
 |             self.fail("Expect .au file with 8-bit mu-law samples") | 
 |  | 
 |         # convert the data to 16-bit signed | 
 |         data = audioop.ulaw2lin(data, 2) | 
 |  | 
 |         # set the data format | 
 |         if sys.byteorder == 'little': | 
 |             fmt = linuxaudiodev.AFMT_S16_LE | 
 |         else: | 
 |             fmt = linuxaudiodev.AFMT_S16_BE | 
 |  | 
 |         # set parameters based on .au file headers | 
 |         self.dev.setparameters(rate, 16, nchannels, fmt) | 
 |         self.dev.write(data) | 
 |         self.dev.flush() | 
 |  | 
 |     def test_errors(self): | 
 |         size = 8 | 
 |         fmt = linuxaudiodev.AFMT_U8 | 
 |         rate = 8000 | 
 |         nchannels = 1 | 
 |         try: | 
 |             self.dev.setparameters(-1, size, nchannels, fmt) | 
 |         except ValueError, err: | 
 |             self.assertEqual(err.args[0], "expected rate >= 0, not -1") | 
 |         try: | 
 |             self.dev.setparameters(rate, -2, nchannels, fmt) | 
 |         except ValueError, err: | 
 |             self.assertEqual(err.args[0], "expected sample size >= 0, not -2") | 
 |         try: | 
 |             self.dev.setparameters(rate, size, 3, fmt) | 
 |         except ValueError, err: | 
 |             self.assertEqual(err.args[0], "nchannels must be 1 or 2, not 3") | 
 |         try: | 
 |             self.dev.setparameters(rate, size, nchannels, 177) | 
 |         except ValueError, err: | 
 |             self.assertEqual(err.args[0], "unknown audio encoding: 177") | 
 |         try: | 
 |             self.dev.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE) | 
 |         except ValueError, err: | 
 |             self.assertEqual(err.args[0], "for linear unsigned 16-bit little-endian " | 
 |                              "audio, expected sample size 16, not 8") | 
 |         try: | 
 |             self.dev.setparameters(rate, 16, nchannels, fmt) | 
 |         except ValueError, err: | 
 |             self.assertEqual(err.args[0], "for linear unsigned 8-bit audio, expected " | 
 |                              "sample size 8, not 16") | 
 |  | 
 | def test_main(): | 
 |     try: | 
 |         dsp = linuxaudiodev.open('w') | 
 |     except linuxaudiodev.error, msg: | 
 |         if msg.args[0] in (errno.EACCES, errno.ENOENT, errno.ENODEV, errno.EBUSY): | 
 |             raise unittest.SkipTest(msg) | 
 |         raise | 
 |     dsp.close() | 
 |     run_unittest(LinuxAudioDevTests) | 
 |  | 
 | if __name__ == '__main__': | 
 |     test_main() |