Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | # Testing select module |
2 | from test.test_support import verbose | |
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 | ||
69 | test() |