1 # -*- coding: iso-8859-1 -*-
2 import unittest
, test
.test_support
5 class SysModuleTest(unittest
.TestCase
):
7 def test_original_displayhook(self
):
9 savestdout
= sys
.stdout
10 out
= cStringIO
.StringIO()
13 dh
= sys
.__displayhook
__
15 self
.assertRaises(TypeError, dh
)
16 if hasattr(__builtin__
, "_"):
20 self
.assertEqual(out
.getvalue(), "")
21 self
.assert_(not hasattr(__builtin__
, "_"))
23 self
.assertEqual(out
.getvalue(), "42\n")
24 self
.assertEqual(__builtin__
._, 42)
27 self
.assertRaises(RuntimeError, dh
, 42)
29 sys
.stdout
= savestdout
31 def test_lost_displayhook(self
):
32 olddisplayhook
= sys
.displayhook
34 code
= compile("42", "<string>", "single")
35 self
.assertRaises(RuntimeError, eval, code
)
36 sys
.displayhook
= olddisplayhook
38 def test_custom_displayhook(self
):
39 olddisplayhook
= sys
.displayhook
40 def baddisplayhook(obj
):
42 sys
.displayhook
= baddisplayhook
43 code
= compile("42", "<string>", "single")
44 self
.assertRaises(ValueError, eval, code
)
45 sys
.displayhook
= olddisplayhook
47 def test_original_excepthook(self
):
48 savestderr
= sys
.stderr
49 err
= cStringIO
.StringIO()
52 eh
= sys
.__excepthook
__
54 self
.assertRaises(TypeError, eh
)
57 except ValueError, exc
:
60 sys
.stderr
= savestderr
61 self
.assert_(err
.getvalue().endswith("ValueError: 42\n"))
63 # FIXME: testing the code for a lost or replaced excepthook in
64 # Python/pythonrun.c::PyErr_PrintEx() is tricky.
66 def test_exc_clear(self
):
67 self
.assertRaises(TypeError, sys
.exc_clear
, 42)
69 # Verify that exc_info is present and matches exc, then clear it, and
70 # check that it worked.
72 typ
, value
, traceback
= sys
.exc_info()
73 self
.assert_(typ
is not None)
74 self
.assert_(value
is exc
)
75 self
.assert_(traceback
is not None)
79 typ
, value
, traceback
= sys
.exc_info()
80 self
.assert_(typ
is None)
81 self
.assert_(value
is None)
82 self
.assert_(traceback
is None)
87 except ValueError, exc
:
90 # Raise an exception and check that it can be cleared
93 # Verify that a frame currently handling an exception is
94 # unaffected by calling exc_clear in a nested frame.
97 except ValueError, exc
:
98 typ1
, value1
, traceback1
= sys
.exc_info()
100 typ2
, value2
, traceback2
= sys
.exc_info()
102 self
.assert_(typ1
is typ2
)
103 self
.assert_(value1
is exc
)
104 self
.assert_(value1
is value2
)
105 self
.assert_(traceback1
is traceback2
)
107 # Check that an exception can be cleared outside of an except block
111 self
.assertRaises(TypeError, sys
.exit
, 42, 42)
113 # call without argument
116 except SystemExit, exc
:
117 self
.assertEquals(exc
.code
, 0)
119 self
.fail("wrong exception")
121 self
.fail("no exception")
123 # call with tuple argument with one entry
124 # entry will be unpacked
127 except SystemExit, exc
:
128 self
.assertEquals(exc
.code
, 42)
130 self
.fail("wrong exception")
132 self
.fail("no exception")
134 # call with integer argument
137 except SystemExit, exc
:
138 self
.assertEquals(exc
.code
, 42)
140 self
.fail("wrong exception")
142 self
.fail("no exception")
144 # call with string argument
147 except SystemExit, exc
:
148 self
.assertEquals(exc
.code
, "exit")
150 self
.fail("wrong exception")
152 self
.fail("no exception")
154 # call with tuple argument with two entries
157 except SystemExit, exc
:
158 self
.assertEquals(exc
.code
, (17, 23))
160 self
.fail("wrong exception")
162 self
.fail("no exception")
164 # test that the exit machinery handles SystemExits properly
166 # both unnormalized...
167 rc
= subprocess
.call([sys
.executable
, "-c",
168 "raise SystemExit, 46"])
169 self
.assertEqual(rc
, 46)
171 rc
= subprocess
.call([sys
.executable
, "-c",
172 "raise SystemExit(47)"])
173 self
.assertEqual(rc
, 47)
176 def test_getdefaultencoding(self
):
177 if test
.test_support
.have_unicode
:
178 self
.assertRaises(TypeError, sys
.getdefaultencoding
, 42)
179 # can't check more than the type, as the user might have changed it
180 self
.assert_(isinstance(sys
.getdefaultencoding(), str))
182 # testing sys.settrace() is done in test_trace.py
183 # testing sys.setprofile() is done in test_profile.py
185 def test_setcheckinterval(self
):
186 self
.assertRaises(TypeError, sys
.setcheckinterval
)
187 orig
= sys
.getcheckinterval()
188 for n
in 0, 100, 120, orig
: # orig last to restore starting state
189 sys
.setcheckinterval(n
)
190 self
.assertEquals(sys
.getcheckinterval(), n
)
192 def test_recursionlimit(self
):
193 self
.assertRaises(TypeError, sys
.getrecursionlimit
, 42)
194 oldlimit
= sys
.getrecursionlimit()
195 self
.assertRaises(TypeError, sys
.setrecursionlimit
)
196 self
.assertRaises(ValueError, sys
.setrecursionlimit
, -42)
197 sys
.setrecursionlimit(10000)
198 self
.assertEqual(sys
.getrecursionlimit(), 10000)
199 sys
.setrecursionlimit(oldlimit
)
201 def test_getwindowsversion(self
):
202 if hasattr(sys
, "getwindowsversion"):
203 v
= sys
.getwindowsversion()
204 self
.assert_(isinstance(v
, tuple))
205 self
.assertEqual(len(v
), 5)
206 self
.assert_(isinstance(v
[0], int))
207 self
.assert_(isinstance(v
[1], int))
208 self
.assert_(isinstance(v
[2], int))
209 self
.assert_(isinstance(v
[3], int))
210 self
.assert_(isinstance(v
[4], str))
212 def test_dlopenflags(self
):
213 if hasattr(sys
, "setdlopenflags"):
214 self
.assert_(hasattr(sys
, "getdlopenflags"))
215 self
.assertRaises(TypeError, sys
.getdlopenflags
, 42)
216 oldflags
= sys
.getdlopenflags()
217 self
.assertRaises(TypeError, sys
.setdlopenflags
)
218 sys
.setdlopenflags(oldflags
+1)
219 self
.assertEqual(sys
.getdlopenflags(), oldflags
+1)
220 sys
.setdlopenflags(oldflags
)
222 def test_refcount(self
):
223 self
.assertRaises(TypeError, sys
.getrefcount
)
224 c
= sys
.getrefcount(None)
226 self
.assertEqual(sys
.getrefcount(None), c
+1)
228 self
.assertEqual(sys
.getrefcount(None), c
)
229 if hasattr(sys
, "gettotalrefcount"):
230 self
.assert_(isinstance(sys
.gettotalrefcount(), int))
232 def test_getframe(self
):
233 self
.assertRaises(TypeError, sys
._getframe
, 42, 42)
234 self
.assertRaises(ValueError, sys
._getframe
, 2000000000)
236 SysModuleTest
.test_getframe
.im_func
.func_code \
237 is sys
._getframe
().f_code
240 def test_attributes(self
):
241 self
.assert_(isinstance(sys
.api_version
, int))
242 self
.assert_(isinstance(sys
.argv
, list))
243 self
.assert_(sys
.byteorder
in ("little", "big"))
244 self
.assert_(isinstance(sys
.builtin_module_names
, tuple))
245 self
.assert_(isinstance(sys
.copyright
, basestring
))
246 self
.assert_(isinstance(sys
.exec_prefix
, basestring
))
247 self
.assert_(isinstance(sys
.executable
, basestring
))
248 self
.assert_(isinstance(sys
.hexversion
, int))
249 self
.assert_(isinstance(sys
.maxint
, int))
250 if test
.test_support
.have_unicode
:
251 self
.assert_(isinstance(sys
.maxunicode
, int))
252 self
.assert_(isinstance(sys
.platform
, basestring
))
253 self
.assert_(isinstance(sys
.prefix
, basestring
))
254 self
.assert_(isinstance(sys
.version
, basestring
))
255 vi
= sys
.version_info
256 self
.assert_(isinstance(vi
, tuple))
257 self
.assertEqual(len(vi
), 5)
258 self
.assert_(isinstance(vi
[0], int))
259 self
.assert_(isinstance(vi
[1], int))
260 self
.assert_(isinstance(vi
[2], int))
261 self
.assert_(vi
[3] in ("alpha", "beta", "candidate", "final"))
262 self
.assert_(isinstance(vi
[4], int))
265 test
.test_support
.run_unittest(SysModuleTest
)
267 if __name__
== "__main__":