blob: c3725ef3eb86fbaa15bd762eef44cac14579c650 [file] [log] [blame]
Guido van Rossum2512d6d2000-04-24 14:01:51 +00001# Ridiculously simple test of the winsound module for Windows.
Guido van Rossumcdd092f2000-04-21 21:28:47 +00002
Zachary Ware34458272016-09-05 15:09:41 -05003from __future__ import print_function
4
5import functools
Trent Mickf8cf13e2006-03-16 17:34:41 +00006import os
7import subprocess
Zachary Ware34458272016-09-05 15:09:41 -05008import time
9import unittest
Trent Mickf8cf13e2006-03-16 17:34:41 +000010
Zachary Ware34458272016-09-05 15:09:41 -050011from test import test_support as support
R. David Murray59beec32009-03-30 19:04:00 +000012
Zachary Ware34458272016-09-05 15:09:41 -050013support.requires('audio')
14winsound = support.import_module('winsound')
Brian Curtin824912e2010-06-01 13:29:13 +000015
Zachary Ware34458272016-09-05 15:09:41 -050016# Unless we actually have an ear in the room, we have no idea whether a sound
17# actually plays, and it's incredibly flaky trying to figure out if a sound
18# even *should* play. Instead of guessing, just call the function and assume
19# it either passed or raised the RuntimeError we expect in case of failure.
20def sound_func(func):
21 @functools.wraps(func)
22 def wrapper(*args, **kwargs):
23 try:
24 ret = func(*args, **kwargs)
25 except RuntimeError as e:
26 if support.verbose:
27 print(func.__name__, 'failed:', e)
Brian Curtind5c50b32010-04-13 02:25:20 +000028 else:
Zachary Ware34458272016-09-05 15:09:41 -050029 if support.verbose:
30 print(func.__name__, 'returned')
31 return ret
32 return wrapper
33
34safe_Beep = sound_func(winsound.Beep)
35safe_MessageBeep = sound_func(winsound.MessageBeep)
36safe_PlaySound = sound_func(winsound.PlaySound)
Walter Dörwald7fd94242003-05-18 00:47:47 +000037
38class BeepTest(unittest.TestCase):
39
40 def test_errors(self):
41 self.assertRaises(TypeError, winsound.Beep)
42 self.assertRaises(ValueError, winsound.Beep, 36, 75)
43 self.assertRaises(ValueError, winsound.Beep, 32768, 75)
44
45 def test_extremes(self):
Zachary Ware34458272016-09-05 15:09:41 -050046 safe_Beep(37, 75)
47 safe_Beep(32767, 75)
Walter Dörwald7fd94242003-05-18 00:47:47 +000048
49 def test_increasingfrequency(self):
Steven Bethard89065752008-03-18 19:04:32 +000050 for i in xrange(100, 2000, 100):
Zachary Ware34458272016-09-05 15:09:41 -050051 safe_Beep(i, 75)
Steven Bethard89065752008-03-18 19:04:32 +000052
Walter Dörwald7fd94242003-05-18 00:47:47 +000053
54class MessageBeepTest(unittest.TestCase):
55
56 def tearDown(self):
57 time.sleep(0.5)
58
59 def test_default(self):
60 self.assertRaises(TypeError, winsound.MessageBeep, "bad")
61 self.assertRaises(TypeError, winsound.MessageBeep, 42, 42)
Zachary Ware34458272016-09-05 15:09:41 -050062 safe_MessageBeep()
Walter Dörwald7fd94242003-05-18 00:47:47 +000063
64 def test_ok(self):
Zachary Ware34458272016-09-05 15:09:41 -050065 safe_MessageBeep(winsound.MB_OK)
Walter Dörwald7fd94242003-05-18 00:47:47 +000066
67 def test_asterisk(self):
Zachary Ware34458272016-09-05 15:09:41 -050068 safe_MessageBeep(winsound.MB_ICONASTERISK)
Walter Dörwald7fd94242003-05-18 00:47:47 +000069
70 def test_exclamation(self):
Zachary Ware34458272016-09-05 15:09:41 -050071 safe_MessageBeep(winsound.MB_ICONEXCLAMATION)
Walter Dörwald7fd94242003-05-18 00:47:47 +000072
73 def test_hand(self):
Zachary Ware34458272016-09-05 15:09:41 -050074 safe_MessageBeep(winsound.MB_ICONHAND)
Walter Dörwald7fd94242003-05-18 00:47:47 +000075
76 def test_question(self):
Zachary Ware34458272016-09-05 15:09:41 -050077 safe_MessageBeep(winsound.MB_ICONQUESTION)
Walter Dörwald7fd94242003-05-18 00:47:47 +000078
Trent Mickf8cf13e2006-03-16 17:34:41 +000079
Walter Dörwald7fd94242003-05-18 00:47:47 +000080class PlaySoundTest(unittest.TestCase):
81
82 def test_errors(self):
83 self.assertRaises(TypeError, winsound.PlaySound)
84 self.assertRaises(TypeError, winsound.PlaySound, "bad", "bad")
85 self.assertRaises(
86 RuntimeError,
87 winsound.PlaySound,
88 "none", winsound.SND_ASYNC | winsound.SND_MEMORY
89 )
90
Zachary Ware34458272016-09-05 15:09:41 -050091 def test_aliases(self):
92 aliases = [
93 "SystemAsterisk",
94 "SystemExclamation",
95 "SystemExit",
96 "SystemHand",
97 "SystemQuestion",
98 ]
99 for alias in aliases:
100 safe_PlaySound(alias, winsound.SND_ALIAS)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000101
102 def test_alias_fallback(self):
Zachary Ware34458272016-09-05 15:09:41 -0500103 safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000104
105 def test_alias_nofallback(self):
Zachary Wareb2b734f2016-09-05 18:06:06 -0500106 safe_PlaySound('!"$%&/(#+*', winsound.SND_ALIAS | winsound.SND_NODEFAULT)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000107
108 def test_stopasync(self):
Zachary Ware34458272016-09-05 15:09:41 -0500109 safe_PlaySound(
110 'SystemQuestion',
111 winsound.SND_ALIAS | winsound.SND_ASYNC | winsound.SND_LOOP
112 )
113 time.sleep(0.5)
114 safe_PlaySound('SystemQuestion', winsound.SND_ALIAS | winsound.SND_NOSTOP)
115 # Issue 8367: PlaySound(None, winsound.SND_PURGE)
116 # does not raise on systems without a sound card.
117 winsound.PlaySound(None, winsound.SND_PURGE)
Trent Mickf8cf13e2006-03-16 17:34:41 +0000118
Walter Dörwald7fd94242003-05-18 00:47:47 +0000119
120def test_main():
Zachary Ware34458272016-09-05 15:09:41 -0500121 support.run_unittest(BeepTest, MessageBeepTest, PlaySoundTest)
122
Walter Dörwald7fd94242003-05-18 00:47:47 +0000123
124if __name__=="__main__":
125 test_main()