|
1 # Testing select module |
|
2 from test.test_support import verbose, reap_children |
|
3 import select |
|
4 import os |
|
5 |
|
6 # test some known error conditions |
|
7 try: |
|
8 rfd, wfd, xfd = select.select(1, 2, 3) |
|
9 except TypeError: |
|
10 pass |
|
11 else: |
|
12 print 'expected TypeError exception not raised' |
|
13 |
|
14 class Nope: |
|
15 pass |
|
16 |
|
17 class Almost: |
|
18 def fileno(self): |
|
19 return 'fileno' |
|
20 |
|
21 try: |
|
22 rfd, wfd, xfd = select.select([Nope()], [], []) |
|
23 except TypeError: |
|
24 pass |
|
25 else: |
|
26 print 'expected TypeError exception not raised' |
|
27 |
|
28 try: |
|
29 rfd, wfd, xfd = select.select([Almost()], [], []) |
|
30 except TypeError: |
|
31 pass |
|
32 else: |
|
33 print 'expected TypeError exception not raised' |
|
34 |
|
35 try: |
|
36 rfd, wfd, xfd = select.select([], [], [], 'not a number') |
|
37 except TypeError: |
|
38 pass |
|
39 else: |
|
40 print 'expected TypeError exception not raised' |
|
41 |
|
42 |
|
43 def test(): |
|
44 import sys |
|
45 if sys.platform[:3] in ('win', 'mac', 'os2', 'riscos'): |
|
46 if verbose: |
|
47 print "Can't test select easily on", sys.platform |
|
48 return |
|
49 cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' |
|
50 p = os.popen(cmd, 'r') |
|
51 for tout in (0, 1, 2, 4, 8, 16) + (None,)*10: |
|
52 if verbose: |
|
53 print 'timeout =', tout |
|
54 rfd, wfd, xfd = select.select([p], [], [], tout) |
|
55 if (rfd, wfd, xfd) == ([], [], []): |
|
56 continue |
|
57 if (rfd, wfd, xfd) == ([p], [], []): |
|
58 line = p.readline() |
|
59 if verbose: |
|
60 print repr(line) |
|
61 if not line: |
|
62 if verbose: |
|
63 print 'EOF' |
|
64 break |
|
65 continue |
|
66 print 'Unexpected return values from select():', rfd, wfd, xfd |
|
67 p.close() |
|
68 reap_children() |
|
69 |
|
70 test() |