| # Ridiculously simple test of the winsound module for Windows. |
| |
| import functools |
| import os |
| import subprocess |
| import time |
| import unittest |
| |
| from test import support |
| |
| support.requires('audio') |
| winsound = support.import_module('winsound') |
| |
| |
| # Unless we actually have an ear in the room, we have no idea whether a sound |
| # actually plays, and it's incredibly flaky trying to figure out if a sound |
| # even *should* play. Instead of guessing, just call the function and assume |
| # it either passed or raised the RuntimeError we expect in case of failure. |
| def sound_func(func): |
| @functools.wraps(func) |
| def wrapper(*args, **kwargs): |
| try: |
| ret = func(*args, **kwargs) |
| except RuntimeError as e: |
| if support.verbose: |
| print(func.__name__, 'failed:', e) |
| else: |
| if support.verbose: |
| print(func.__name__, 'returned') |
| return ret |
| return wrapper |
| |
| |
| safe_Beep = sound_func(winsound.Beep) |
| safe_MessageBeep = sound_func(winsound.MessageBeep) |
| safe_PlaySound = sound_func(winsound.PlaySound) |
| |
| |
| class BeepTest(unittest.TestCase): |
| |
| def test_errors(self): |
| self.assertRaises(TypeError, winsound.Beep) |
| self.assertRaises(ValueError, winsound.Beep, 36, 75) |
| self.assertRaises(ValueError, winsound.Beep, 32768, 75) |
| |
| def test_extremes(self): |
| safe_Beep(37, 75) |
| safe_Beep(32767, 75) |
| |
| def test_increasingfrequency(self): |
| for i in range(100, 2000, 100): |
| safe_Beep(i, 75) |
| |
| def test_keyword_args(self): |
| safe_Beep(duration=75, frequency=2000) |
| |
| |
| class MessageBeepTest(unittest.TestCase): |
| |
| def tearDown(self): |
| time.sleep(0.5) |
| |
| def test_default(self): |
| self.assertRaises(TypeError, winsound.MessageBeep, "bad") |
| self.assertRaises(TypeError, winsound.MessageBeep, 42, 42) |
| safe_MessageBeep() |
| |
| def test_ok(self): |
| safe_MessageBeep(winsound.MB_OK) |
| |
| def test_asterisk(self): |
| safe_MessageBeep(winsound.MB_ICONASTERISK) |
| |
| def test_exclamation(self): |
| safe_MessageBeep(winsound.MB_ICONEXCLAMATION) |
| |
| def test_hand(self): |
| safe_MessageBeep(winsound.MB_ICONHAND) |
| |
| def test_question(self): |
| safe_MessageBeep(winsound.MB_ICONQUESTION) |
| |
| def test_keyword_args(self): |
| safe_MessageBeep(type=winsound.MB_OK) |
| |
| |
| class PlaySoundTest(unittest.TestCase): |
| |
| def test_errors(self): |
| self.assertRaises(TypeError, winsound.PlaySound) |
| self.assertRaises(TypeError, winsound.PlaySound, "bad", "bad") |
| self.assertRaises( |
| RuntimeError, |
| winsound.PlaySound, |
| "none", winsound.SND_ASYNC | winsound.SND_MEMORY |
| ) |
| self.assertRaises(TypeError, winsound.PlaySound, b"bad", 0) |
| self.assertRaises(TypeError, winsound.PlaySound, "bad", |
| winsound.SND_MEMORY) |
| self.assertRaises(TypeError, winsound.PlaySound, 1, 0) |
| |
| def test_keyword_args(self): |
| safe_PlaySound(flags=winsound.SND_ALIAS, sound="SystemExit") |
| |
| def test_snd_memory(self): |
| with open(support.findfile('pluck-pcm8.wav', |
| subdir='audiodata'), 'rb') as f: |
| audio_data = f.read() |
| safe_PlaySound(audio_data, winsound.SND_MEMORY) |
| audio_data = bytearray(audio_data) |
| safe_PlaySound(audio_data, winsound.SND_MEMORY) |
| |
| def test_snd_filename(self): |
| fn = support.findfile('pluck-pcm8.wav', subdir='audiodata') |
| safe_PlaySound(fn, winsound.SND_FILENAME | winsound.SND_NODEFAULT) |
| |
| def test_aliases(self): |
| aliases = [ |
| "SystemAsterisk", |
| "SystemExclamation", |
| "SystemExit", |
| "SystemHand", |
| "SystemQuestion", |
| ] |
| for alias in aliases: |
| with self.subTest(alias=alias): |
| safe_PlaySound(alias, winsound.SND_ALIAS) |
| |
| def test_alias_fallback(self): |
| safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS) |
| |
| def test_alias_nofallback(self): |
| safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS | winsound.SND_NODEFAULT) |
| |
| def test_stopasync(self): |
| safe_PlaySound( |
| 'SystemQuestion', |
| winsound.SND_ALIAS | winsound.SND_ASYNC | winsound.SND_LOOP |
| ) |
| time.sleep(0.5) |
| safe_PlaySound('SystemQuestion', winsound.SND_ALIAS | winsound.SND_NOSTOP) |
| # Issue 8367: PlaySound(None, winsound.SND_PURGE) |
| # does not raise on systems without a sound card. |
| winsound.PlaySound(None, winsound.SND_PURGE) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |