17db96d56Sopenharmony_ci# Ridiculously simple test of the winsound module for Windows. 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ciimport functools 47db96d56Sopenharmony_ciimport time 57db96d56Sopenharmony_ciimport unittest 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_cifrom test import support 87db96d56Sopenharmony_cifrom test.support import import_helper 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_cisupport.requires('audio') 127db96d56Sopenharmony_ciwinsound = import_helper.import_module('winsound') 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci# Unless we actually have an ear in the room, we have no idea whether a sound 167db96d56Sopenharmony_ci# actually plays, and it's incredibly flaky trying to figure out if a sound 177db96d56Sopenharmony_ci# even *should* play. Instead of guessing, just call the function and assume 187db96d56Sopenharmony_ci# it either passed or raised the RuntimeError we expect in case of failure. 197db96d56Sopenharmony_cidef sound_func(func): 207db96d56Sopenharmony_ci @functools.wraps(func) 217db96d56Sopenharmony_ci def wrapper(*args, **kwargs): 227db96d56Sopenharmony_ci try: 237db96d56Sopenharmony_ci ret = func(*args, **kwargs) 247db96d56Sopenharmony_ci except RuntimeError as e: 257db96d56Sopenharmony_ci if support.verbose: 267db96d56Sopenharmony_ci print(func.__name__, 'failed:', e) 277db96d56Sopenharmony_ci else: 287db96d56Sopenharmony_ci if support.verbose: 297db96d56Sopenharmony_ci print(func.__name__, 'returned') 307db96d56Sopenharmony_ci return ret 317db96d56Sopenharmony_ci return wrapper 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_cisafe_Beep = sound_func(winsound.Beep) 357db96d56Sopenharmony_cisafe_MessageBeep = sound_func(winsound.MessageBeep) 367db96d56Sopenharmony_cisafe_PlaySound = sound_func(winsound.PlaySound) 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ciclass BeepTest(unittest.TestCase): 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci def test_errors(self): 427db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.Beep) 437db96d56Sopenharmony_ci self.assertRaises(ValueError, winsound.Beep, 36, 75) 447db96d56Sopenharmony_ci self.assertRaises(ValueError, winsound.Beep, 32768, 75) 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci def test_extremes(self): 477db96d56Sopenharmony_ci safe_Beep(37, 75) 487db96d56Sopenharmony_ci safe_Beep(32767, 75) 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci def test_increasingfrequency(self): 517db96d56Sopenharmony_ci for i in range(100, 2000, 100): 527db96d56Sopenharmony_ci safe_Beep(i, 75) 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci def test_keyword_args(self): 557db96d56Sopenharmony_ci safe_Beep(duration=75, frequency=2000) 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ciclass MessageBeepTest(unittest.TestCase): 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci def tearDown(self): 617db96d56Sopenharmony_ci time.sleep(0.5) 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci def test_default(self): 647db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.MessageBeep, "bad") 657db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.MessageBeep, 42, 42) 667db96d56Sopenharmony_ci safe_MessageBeep() 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci def test_ok(self): 697db96d56Sopenharmony_ci safe_MessageBeep(winsound.MB_OK) 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci def test_asterisk(self): 727db96d56Sopenharmony_ci safe_MessageBeep(winsound.MB_ICONASTERISK) 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci def test_exclamation(self): 757db96d56Sopenharmony_ci safe_MessageBeep(winsound.MB_ICONEXCLAMATION) 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci def test_hand(self): 787db96d56Sopenharmony_ci safe_MessageBeep(winsound.MB_ICONHAND) 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci def test_question(self): 817db96d56Sopenharmony_ci safe_MessageBeep(winsound.MB_ICONQUESTION) 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci def test_keyword_args(self): 847db96d56Sopenharmony_ci safe_MessageBeep(type=winsound.MB_OK) 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ciclass PlaySoundTest(unittest.TestCase): 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci def test_errors(self): 907db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.PlaySound) 917db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.PlaySound, "bad", "bad") 927db96d56Sopenharmony_ci self.assertRaises( 937db96d56Sopenharmony_ci RuntimeError, 947db96d56Sopenharmony_ci winsound.PlaySound, 957db96d56Sopenharmony_ci "none", winsound.SND_ASYNC | winsound.SND_MEMORY 967db96d56Sopenharmony_ci ) 977db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.PlaySound, b"bad", 0) 987db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.PlaySound, "bad", 997db96d56Sopenharmony_ci winsound.SND_MEMORY) 1007db96d56Sopenharmony_ci self.assertRaises(TypeError, winsound.PlaySound, 1, 0) 1017db96d56Sopenharmony_ci # embedded null character 1027db96d56Sopenharmony_ci self.assertRaises(ValueError, winsound.PlaySound, 'bad\0', 0) 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci def test_keyword_args(self): 1057db96d56Sopenharmony_ci safe_PlaySound(flags=winsound.SND_ALIAS, sound="SystemExit") 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci def test_snd_memory(self): 1087db96d56Sopenharmony_ci with open(support.findfile('pluck-pcm8.wav', 1097db96d56Sopenharmony_ci subdir='audiodata'), 'rb') as f: 1107db96d56Sopenharmony_ci audio_data = f.read() 1117db96d56Sopenharmony_ci safe_PlaySound(audio_data, winsound.SND_MEMORY) 1127db96d56Sopenharmony_ci audio_data = bytearray(audio_data) 1137db96d56Sopenharmony_ci safe_PlaySound(audio_data, winsound.SND_MEMORY) 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci def test_snd_filename(self): 1167db96d56Sopenharmony_ci fn = support.findfile('pluck-pcm8.wav', subdir='audiodata') 1177db96d56Sopenharmony_ci safe_PlaySound(fn, winsound.SND_FILENAME | winsound.SND_NODEFAULT) 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci def test_aliases(self): 1207db96d56Sopenharmony_ci aliases = [ 1217db96d56Sopenharmony_ci "SystemAsterisk", 1227db96d56Sopenharmony_ci "SystemExclamation", 1237db96d56Sopenharmony_ci "SystemExit", 1247db96d56Sopenharmony_ci "SystemHand", 1257db96d56Sopenharmony_ci "SystemQuestion", 1267db96d56Sopenharmony_ci ] 1277db96d56Sopenharmony_ci for alias in aliases: 1287db96d56Sopenharmony_ci with self.subTest(alias=alias): 1297db96d56Sopenharmony_ci safe_PlaySound(alias, winsound.SND_ALIAS) 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci def test_alias_fallback(self): 1327db96d56Sopenharmony_ci safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS) 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci def test_alias_nofallback(self): 1357db96d56Sopenharmony_ci safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS | winsound.SND_NODEFAULT) 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci def test_stopasync(self): 1387db96d56Sopenharmony_ci safe_PlaySound( 1397db96d56Sopenharmony_ci 'SystemQuestion', 1407db96d56Sopenharmony_ci winsound.SND_ALIAS | winsound.SND_ASYNC | winsound.SND_LOOP 1417db96d56Sopenharmony_ci ) 1427db96d56Sopenharmony_ci time.sleep(0.5) 1437db96d56Sopenharmony_ci safe_PlaySound('SystemQuestion', winsound.SND_ALIAS | winsound.SND_NOSTOP) 1447db96d56Sopenharmony_ci # Issue 8367: PlaySound(None, winsound.SND_PURGE) 1457db96d56Sopenharmony_ci # does not raise on systems without a sound card. 1467db96d56Sopenharmony_ci winsound.PlaySound(None, winsound.SND_PURGE) 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ciif __name__ == "__main__": 1507db96d56Sopenharmony_ci unittest.main() 151