11import unittest
22from test import support
33from contextlib import closing
4+ import enum
45import gc
56import pickle
67import select
@@ -39,6 +40,22 @@ def ignoring_eintr(__func, *args, **kwargs):
3940 return None
4041
4142
43+ class GenericTests (unittest .TestCase ):
44+
45+ def test_enums (self ):
46+ for name in dir (signal ):
47+ sig = getattr (signal , name )
48+ if name in {'SIG_DFL' , 'SIG_IGN' }:
49+ self .assertIsInstance (sig , signal .Handlers )
50+ elif name in {'SIG_BLOCK' , 'SIG_UNBLOCK' , 'SIG_SETMASK' }:
51+ self .assertIsInstance (sig , signal .Sigmasks )
52+ elif name .startswith ('SIG' ) and not name .startswith ('SIG_' ):
53+ self .assertIsInstance (sig , signal .Signals )
54+ elif name .startswith ('CTRL_' ):
55+ self .assertIsInstance (sig , signal .Signals )
56+ self .assertEqual (sys .platform , "win32" )
57+
58+
4259@unittest .skipIf (sys .platform == "win32" , "Not valid on Windows" )
4360class InterProcessSignalTests (unittest .TestCase ):
4461 MAX_DURATION = 20 # Entire test should last at most 20 sec.
@@ -195,6 +212,7 @@ def test_setting_signal_handler_to_none_raises_error(self):
195212
196213 def test_getsignal (self ):
197214 hup = signal .signal (signal .SIGHUP , self .trivial_signal_handler )
215+ self .assertIsInstance (hup , signal .Handlers )
198216 self .assertEqual (signal .getsignal (signal .SIGHUP ),
199217 self .trivial_signal_handler )
200218 signal .signal (signal .SIGHUP , hup )
@@ -271,7 +289,7 @@ def check_signum(signals):
271289
272290 os.close(read)
273291 os.close(write)
274- """ .format (signals , ordered , test_body )
292+ """ .format (tuple ( map ( int , signals )) , ordered , test_body )
275293
276294 assert_python_ok ('-c' , code )
277295
@@ -604,6 +622,8 @@ def handler(signum, frame):
604622 signal.pthread_sigmask(signal.SIG_BLOCK, [signum])
605623 os.kill(os.getpid(), signum)
606624 pending = signal.sigpending()
625+ for sig in pending:
626+ assert isinstance(sig, signal.Signals), repr(pending)
607627 if pending != {signum}:
608628 raise Exception('%s != {%s}' % (pending, signum))
609629 try:
@@ -660,6 +680,7 @@ def wait_helper(self, blocked, test):
660680 code = '''if 1:
661681 import signal
662682 import sys
683+ from signal import Signals
663684
664685 def handler(signum, frame):
665686 1/0
@@ -702,6 +723,7 @@ def test_sigwait(self):
702723 def test(signum):
703724 signal.alarm(1)
704725 received = signal.sigwait([signum])
726+ assert isinstance(received, signal.Signals), received
705727 if received != signum:
706728 raise Exception('received %s, not %s' % (received, signum))
707729 ''' )
@@ -842,8 +864,14 @@ def handler(signum, frame):
842864 def kill(signum):
843865 os.kill(os.getpid(), signum)
844866
867+ def check_mask(mask):
868+ for sig in mask:
869+ assert isinstance(sig, signal.Signals), repr(sig)
870+
845871 def read_sigmask():
846- return signal.pthread_sigmask(signal.SIG_BLOCK, [])
872+ sigmask = signal.pthread_sigmask(signal.SIG_BLOCK, [])
873+ check_mask(sigmask)
874+ return sigmask
847875
848876 signum = signal.SIGUSR1
849877
@@ -852,6 +880,7 @@ def read_sigmask():
852880
853881 # Unblock SIGUSR1 (and copy the old mask) to test our signal handler
854882 old_mask = signal.pthread_sigmask(signal.SIG_UNBLOCK, [signum])
883+ check_mask(old_mask)
855884 try:
856885 kill(signum)
857886 except ZeroDivisionError:
@@ -861,11 +890,13 @@ def read_sigmask():
861890
862891 # Block and then raise SIGUSR1. The signal is blocked: the signal
863892 # handler is not called, and the signal is now pending
864- signal.pthread_sigmask(signal.SIG_BLOCK, [signum])
893+ mask = signal.pthread_sigmask(signal.SIG_BLOCK, [signum])
894+ check_mask(mask)
865895 kill(signum)
866896
867897 # Check the new mask
868898 blocked = read_sigmask()
899+ check_mask(blocked)
869900 if signum not in blocked:
870901 raise Exception("%s not in %s" % (signum, blocked))
871902 if old_mask ^ blocked != {signum}:
@@ -928,7 +959,7 @@ def handler(signum, frame):
928959
929960def test_main ():
930961 try :
931- support .run_unittest (PosixTests , InterProcessSignalTests ,
962+ support .run_unittest (GenericTests , PosixTests , InterProcessSignalTests ,
932963 WakeupFDTests , WakeupSignalTests ,
933964 SiginterruptTest , ItimerTest , WindowsSignalTests ,
934965 PendingSignalsTests )
0 commit comments