blob: 8cc1b0074bb152e2ce4811722f8201810fc3ad5f [file] [log] [blame]
Walter Dörwald919497e2003-01-19 16:23:59 +00001# Python test set -- built-in functions
Guido van Rossum3bead091992-01-27 17:00:37 +00002
Victor Stinnerf86a5e82012-06-05 13:43:22 +02003import ast
4import builtins
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import collections
6import io
Victor Stinnerf86a5e82012-06-05 13:43:22 +02007import locale
Antoine Pitrou0d776b12011-11-06 00:34:26 +01008import os
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00009import pickle
Victor Stinnerf86a5e82012-06-05 13:43:22 +020010import platform
11import random
12import sys
13import traceback
14import types
15import unittest
16import warnings
17from operator import neg
18from test.support import TESTFN, unlink, run_unittest, check_warnings
Berker Peksagce643912015-05-06 06:33:17 +030019from test.support.script_helper import assert_python_ok
Antoine Pitrou0d776b12011-11-06 00:34:26 +010020try:
Antoine Pitrou772add72011-11-06 02:37:42 +010021 import pty, signal
Antoine Pitrou0d776b12011-11-06 00:34:26 +010022except ImportError:
Antoine Pitrou772add72011-11-06 02:37:42 +010023 pty = signal = None
Guido van Rossum3bead091992-01-27 17:00:37 +000024
Guido van Rossum3bead091992-01-27 17:00:37 +000025
Walter Dörwald919497e2003-01-19 16:23:59 +000026class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000027
Walter Dörwald919497e2003-01-19 16:23:59 +000028 def __init__(self, max):
29 self.max = max
30 self.sofar = []
31
32 def __len__(self): return len(self.sofar)
33
34 def __getitem__(self, i):
35 if not 0 <= i < self.max: raise IndexError
36 n = len(self.sofar)
37 while n <= i:
38 self.sofar.append(n*n)
39 n += 1
40 return self.sofar[i]
41
42class StrSquares:
43
44 def __init__(self, max):
45 self.max = max
46 self.sofar = []
47
48 def __len__(self):
49 return len(self.sofar)
50
51 def __getitem__(self, i):
52 if not 0 <= i < self.max:
53 raise IndexError
54 n = len(self.sofar)
55 while n <= i:
56 self.sofar.append(str(n*n))
57 n += 1
58 return self.sofar[i]
59
60class BitBucket:
61 def write(self, line):
62 pass
63
Facundo Batista2336bdd2008-01-19 19:12:01 +000064test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000065 ('0', 0),
66 ('1', 1),
67 ('9', 9),
68 ('10', 10),
69 ('99', 99),
70 ('100', 100),
71 ('314', 314),
72 (' 314', 314),
73 ('314 ', 314),
74 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000075 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000076 (' 1x', ValueError),
77 (' 1 ', 1),
78 (' 1\02 ', ValueError),
79 ('', ValueError),
80 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000081 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000082 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000083 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000084]
85
Facundo Batista2336bdd2008-01-19 19:12:01 +000086test_conv_sign = [
87 ('0', 0),
88 ('1', 1),
89 ('9', 9),
90 ('10', 10),
91 ('99', 99),
92 ('100', 100),
93 ('314', 314),
94 (' 314', ValueError),
95 ('314 ', 314),
96 (' \t\t 314 \t\t ', ValueError),
97 (repr(sys.maxsize), sys.maxsize),
98 (' 1x', ValueError),
99 (' 1 ', ValueError),
100 (' 1\02 ', ValueError),
101 ('', ValueError),
102 (' ', ValueError),
103 (' \t\t ', ValueError),
104 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
105 (chr(0x200), ValueError),
106]
107
Raymond Hettinger96229b12005-03-11 06:49:40 +0000108class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000109 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000110 raise RuntimeError
111
112class TestFailingIter:
113 def __iter__(self):
114 raise RuntimeError
115
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000116def filter_char(arg):
117 return ord(arg) > ord("d")
118
119def map_char(arg):
120 return chr(ord(arg)+1)
121
Walter Dörwald919497e2003-01-19 16:23:59 +0000122class BuiltinTest(unittest.TestCase):
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000123 # Helper to check picklability
Serhiy Storchakabad12572014-12-15 14:03:42 +0200124 def check_iter_pickle(self, it, seq, proto):
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000125 itorg = it
Serhiy Storchakabad12572014-12-15 14:03:42 +0200126 d = pickle.dumps(it, proto)
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000127 it = pickle.loads(d)
128 self.assertEqual(type(itorg), type(it))
129 self.assertEqual(list(it), seq)
130
131 #test the iterator after dropping one from it
132 it = pickle.loads(d)
133 try:
134 next(it)
135 except StopIteration:
136 return
Serhiy Storchakabad12572014-12-15 14:03:42 +0200137 d = pickle.dumps(it, proto)
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000138 it = pickle.loads(d)
139 self.assertEqual(list(it), seq[1:])
Walter Dörwald919497e2003-01-19 16:23:59 +0000140
141 def test_import(self):
142 __import__('sys')
143 __import__('time')
144 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000145 __import__(name='sys')
146 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000147 self.assertRaises(ImportError, __import__, 'spamspam')
148 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000149 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000150 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000151
152 def test_abs(self):
153 # int
154 self.assertEqual(abs(0), 0)
155 self.assertEqual(abs(1234), 1234)
156 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000157 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000158 # float
159 self.assertEqual(abs(0.0), 0.0)
160 self.assertEqual(abs(3.14), 3.14)
161 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000162 # str
163 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000164 # bool
165 self.assertEqual(abs(True), 1)
166 self.assertEqual(abs(False), 0)
167 # other
168 self.assertRaises(TypeError, abs)
169 self.assertRaises(TypeError, abs, None)
170 class AbsClass(object):
171 def __abs__(self):
172 return -5
173 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000174
Raymond Hettinger96229b12005-03-11 06:49:40 +0000175 def test_all(self):
176 self.assertEqual(all([2, 4, 6]), True)
177 self.assertEqual(all([2, None, 6]), False)
178 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
179 self.assertRaises(RuntimeError, all, TestFailingIter())
180 self.assertRaises(TypeError, all, 10) # Non-iterable
181 self.assertRaises(TypeError, all) # No args
182 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
183 self.assertEqual(all([]), True) # Empty iterator
Ezio Melotti0f4377c2013-02-21 23:15:40 +0200184 self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000185 S = [50, 60]
186 self.assertEqual(all(x > 42 for x in S), True)
187 S = [50, 40, 60]
188 self.assertEqual(all(x > 42 for x in S), False)
189
190 def test_any(self):
191 self.assertEqual(any([None, None, None]), False)
192 self.assertEqual(any([None, 4, None]), True)
193 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
R David Murray1acaf0b2013-02-06 09:56:19 -0500194 self.assertRaises(RuntimeError, any, TestFailingIter())
Raymond Hettinger96229b12005-03-11 06:49:40 +0000195 self.assertRaises(TypeError, any, 10) # Non-iterable
196 self.assertRaises(TypeError, any) # No args
197 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
198 self.assertEqual(any([]), False) # Empty iterator
Ezio Melotti0f4377c2013-02-21 23:15:40 +0200199 self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
Raymond Hettinger96229b12005-03-11 06:49:40 +0000200 S = [40, 60, 30]
201 self.assertEqual(any(x > 42 for x in S), True)
202 S = [10, 20, 30]
203 self.assertEqual(any(x > 42 for x in S), False)
204
Georg Brandl559e5d72008-06-11 18:37:52 +0000205 def test_ascii(self):
206 self.assertEqual(ascii(''), '\'\'')
207 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000208 self.assertEqual(ascii(()), '()')
209 self.assertEqual(ascii([]), '[]')
210 self.assertEqual(ascii({}), '{}')
211 a = []
212 a.append(a)
213 self.assertEqual(ascii(a), '[[...]]')
214 a = {}
215 a[0] = a
216 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000217 # Advanced checks for unicode strings
218 def _check_uni(s):
219 self.assertEqual(ascii(s), repr(s))
220 _check_uni("'")
221 _check_uni('"')
222 _check_uni('"\'')
223 _check_uni('\0')
224 _check_uni('\r\n\t .')
225 # Unprintable non-ASCII characters
226 _check_uni('\x85')
227 _check_uni('\u1fff')
228 _check_uni('\U00012fff')
229 # Lone surrogates
230 _check_uni('\ud800')
231 _check_uni('\udfff')
232 # Issue #9804: surrogates should be joined even for printable
233 # wide characters (UCS-2 builds).
234 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
235 # All together
236 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
237 self.assertEqual(ascii(s),
238 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000239
Thomas Wouters89f507f2006-12-13 04:49:30 +0000240 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000241 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000242 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000243 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000244
Walter Dörwald919497e2003-01-19 16:23:59 +0000245 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000246 self.assertTrue(callable(len))
247 self.assertFalse(callable("a"))
248 self.assertTrue(callable(callable))
249 self.assertTrue(callable(lambda x, y: x + y))
250 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000251 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000252 self.assertTrue(callable(f))
253
254 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000255 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000256 self.assertTrue(callable(C1))
257 c = C1()
258 self.assertTrue(callable(c.meth))
259 self.assertFalse(callable(c))
260
261 # __call__ is looked up on the class, not the instance
262 c.__call__ = None
263 self.assertFalse(callable(c))
264 c.__call__ = lambda self: 0
265 self.assertFalse(callable(c))
266 del c.__call__
267 self.assertFalse(callable(c))
268
269 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000270 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000271 c2 = C2()
272 self.assertTrue(callable(c2))
273 c2.__call__ = None
274 self.assertTrue(callable(c2))
275 class C3(C2): pass
276 c3 = C3()
277 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000278
279 def test_chr(self):
280 self.assertEqual(chr(32), ' ')
281 self.assertEqual(chr(65), 'A')
282 self.assertEqual(chr(97), 'a')
283 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000284 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000285 self.assertEqual(chr(sys.maxunicode),
Ezio Melottia9860ae2011-10-04 19:06:00 +0300286 str('\\U0010ffff'.encode("ascii"), 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000287 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000288 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
289 self.assertEqual(chr(0x00010000), "\U00010000")
290 self.assertEqual(chr(0x00010001), "\U00010001")
291 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
292 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
293 self.assertEqual(chr(0x00100000), "\U00100000")
294 self.assertEqual(chr(0x00100001), "\U00100001")
295 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
296 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
297 self.assertRaises(ValueError, chr, -1)
298 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000299 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000300
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000301 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000302 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000303
Walter Dörwald919497e2003-01-19 16:23:59 +0000304 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000305 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000306 bom = b'\xef\xbb\xbf'
307 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000308 compile(source='pass', filename='?', mode='exec')
309 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
310 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000311 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000312 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000313 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
314 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300315 self.assertRaises(ValueError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000316 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
317 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000318 compile('print("\xe5")\n', '', 'exec')
Serhiy Storchakad8a14472014-09-06 20:07:17 +0300319 self.assertRaises(ValueError, compile, chr(0), 'f', 'exec')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000320 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000321
Georg Brandl8334fd92010-12-04 10:26:46 +0000322 # test the optimize argument
323
324 codestr = '''def f():
325 """doc"""
326 try:
327 assert False
328 except AssertionError:
329 return (True, f.__doc__)
330 else:
331 return (False, f.__doc__)
332 '''
333 def f(): """doc"""
334 values = [(-1, __debug__, f.__doc__),
335 (0, True, 'doc'),
336 (1, False, 'doc'),
337 (2, False, None)]
338 for optval, debugval, docstring in values:
339 # test both direct compilation and compilation via AST
340 codeobjs = []
341 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
342 tree = ast.parse(codestr)
343 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
344 for code in codeobjs:
345 ns = {}
346 exec(code, ns)
347 rv = ns['f']()
348 self.assertEqual(rv, (debugval, docstring))
349
Walter Dörwald919497e2003-01-19 16:23:59 +0000350 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000351 sys.spam = 1
352 delattr(sys, 'spam')
353 self.assertRaises(TypeError, delattr)
354
355 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000356 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000357 self.assertRaises(TypeError, dir, 42, 42)
358
Georg Brandle32b4222007-03-10 22:13:27 +0000359 # dir() - local scope
360 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000361 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000362
363 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000364 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000365
366 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000367 class Foo(types.ModuleType):
368 __dict__ = 8
369 f = Foo("foo")
370 self.assertRaises(TypeError, dir, f)
371
372 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000373 self.assertIn("strip", dir(str))
374 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000375
376 # dir(obj)
377 class Foo(object):
378 def __init__(self):
379 self.x = 7
380 self.y = 8
381 self.z = 9
382 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000383 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000384
385 # dir(obj_no__dict__)
386 class Foo(object):
387 __slots__ = []
388 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000389 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000390
391 # dir(obj_no__class__with__dict__)
392 # (an ugly trick to cause getattr(f, "__class__") to fail)
393 class Foo(object):
394 __slots__ = ["__class__", "__dict__"]
395 def __init__(self):
396 self.bar = "wow"
397 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000398 self.assertNotIn("__repr__", dir(f))
399 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000400
401 # dir(obj_using __dir__)
402 class Foo(object):
403 def __dir__(self):
404 return ["kan", "ga", "roo"]
405 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000406 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000407
Benjamin Peterson3bbb7222011-06-11 16:12:08 -0500408 # dir(obj__dir__tuple)
409 class Foo(object):
410 def __dir__(self):
411 return ("b", "c", "a")
412 res = dir(Foo())
413 self.assertIsInstance(res, list)
414 self.assertTrue(res == ["a", "b", "c"])
415
416 # dir(obj__dir__not_sequence)
Georg Brandle32b4222007-03-10 22:13:27 +0000417 class Foo(object):
418 def __dir__(self):
419 return 7
420 f = Foo()
421 self.assertRaises(TypeError, dir, f)
422
Collin Winter3eed7652007-08-14 17:53:54 +0000423 # dir(traceback)
424 try:
425 raise IndexError
426 except:
427 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
428
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500429 # test that object has a __dir__()
430 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000431
Walter Dörwald919497e2003-01-19 16:23:59 +0000432 def test_divmod(self):
433 self.assertEqual(divmod(12, 7), (1, 5))
434 self.assertEqual(divmod(-12, 7), (-2, 2))
435 self.assertEqual(divmod(12, -7), (-2, -2))
436 self.assertEqual(divmod(-12, -7), (1, -5))
437
Mark Dickinson5c2db372009-12-05 20:28:34 +0000438 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000439
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000440 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
441 (-3.25, 1.0, (-4.0, 0.75)),
442 (3.25, -1.0, (-4.0, -0.75)),
443 (-3.25, -1.0, (3.0, -0.25))]:
444 result = divmod(num, denom)
445 self.assertAlmostEqual(result[0], exp_result[0])
446 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000447
448 self.assertRaises(TypeError, divmod)
449
450 def test_eval(self):
451 self.assertEqual(eval('1+1'), 2)
452 self.assertEqual(eval(' 1+1\n'), 2)
453 globals = {'a': 1, 'b': 2}
454 locals = {'b': 200, 'c': 300}
455 self.assertEqual(eval('a', globals) , 1)
456 self.assertEqual(eval('a', globals, locals), 1)
457 self.assertEqual(eval('b', globals, locals), 200)
458 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000459 globals = {'a': 1, 'b': 2}
460 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000461 bom = b'\xef\xbb\xbf'
462 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000463 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000464 self.assertRaises(TypeError, eval)
465 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000466 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000467
Benjamin Peterson92722792012-12-15 12:51:05 -0500468 class X:
469 def __getitem__(self, key):
470 raise ValueError
471 self.assertRaises(ValueError, eval, "foo", {}, X())
472
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000473 def test_general_eval(self):
474 # Tests that general mappings can be used for the locals argument
475
476 class M:
477 "Test mapping interface versus possible calls from eval()."
478 def __getitem__(self, key):
479 if key == 'a':
480 return 12
481 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000482 def keys(self):
483 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000484
485 m = M()
486 g = globals()
487 self.assertEqual(eval('a', g, m), 12)
488 self.assertRaises(NameError, eval, 'b', g, m)
489 self.assertEqual(eval('dir()', g, m), list('xyz'))
490 self.assertEqual(eval('globals()', g, m), g)
491 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000492 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000493 class A:
494 "Non-mapping"
495 pass
496 m = A()
497 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000498
499 # Verify that dict subclasses work as well
500 class D(dict):
501 def __getitem__(self, key):
502 if key == 'a':
503 return 12
504 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000505 def keys(self):
506 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000507
508 d = D()
509 self.assertEqual(eval('a', g, d), 12)
510 self.assertRaises(NameError, eval, 'b', g, d)
511 self.assertEqual(eval('dir()', g, d), list('xyz'))
512 self.assertEqual(eval('globals()', g, d), g)
513 self.assertEqual(eval('locals()', g, d), d)
514
515 # Verify locals stores (used by list comps)
516 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000517 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000518
519 class SpreadSheet:
520 "Sample application showing nested, calculated lookups."
521 _cells = {}
522 def __setitem__(self, key, formula):
523 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000524 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000525 return eval(self._cells[key], globals(), self)
526
527 ss = SpreadSheet()
528 ss['a1'] = '5'
529 ss['a2'] = 'a1*6'
530 ss['a3'] = 'a2*7'
531 self.assertEqual(ss['a3'], 210)
532
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000533 # Verify that dir() catches a non-list returned by eval
534 # SF bug #1004669
535 class C:
536 def __getitem__(self, item):
537 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000538 def keys(self):
539 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000540 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
541
Georg Brandl7cae87c2006-09-06 06:51:57 +0000542 def test_exec(self):
543 g = {}
544 exec('z = 1', g)
545 if '__builtins__' in g:
546 del g['__builtins__']
547 self.assertEqual(g, {'z': 1})
548
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000549 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000550 if '__builtins__' in g:
551 del g['__builtins__']
552 self.assertEqual(g, {'z': 2})
553 g = {}
554 l = {}
555
Brett Cannon77628992010-03-20 20:59:33 +0000556 with check_warnings():
557 warnings.filterwarnings("ignore", "global statement",
558 module="<string>")
559 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000560 if '__builtins__' in g:
561 del g['__builtins__']
562 if '__builtins__' in l:
563 del l['__builtins__']
564 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
565
Victor Stinnerb0b22422012-04-19 00:57:45 +0200566 def test_exec_globals(self):
567 code = compile("print('Hello World!')", "", "exec")
568 # no builtin function
569 self.assertRaisesRegex(NameError, "name 'print' is not defined",
570 exec, code, {'__builtins__': {}})
571 # __builtins__ must be a mapping type
572 self.assertRaises(TypeError,
573 exec, code, {'__builtins__': 123})
574
575 # no __build_class__ function
576 code = compile("class A: pass", "", "exec")
577 self.assertRaisesRegex(NameError, "__build_class__ not found",
578 exec, code, {'__builtins__': {}})
579
580 class frozendict_error(Exception):
581 pass
582
583 class frozendict(dict):
584 def __setitem__(self, key, value):
585 raise frozendict_error("frozendict is readonly")
586
587 # read-only builtins
Brett Cannon2f9f0562013-06-15 23:24:11 -0400588 if isinstance(__builtins__, types.ModuleType):
589 frozen_builtins = frozendict(__builtins__.__dict__)
590 else:
591 frozen_builtins = frozendict(__builtins__)
Victor Stinnerb0b22422012-04-19 00:57:45 +0200592 code = compile("__builtins__['superglobal']=2; print(superglobal)", "test", "exec")
593 self.assertRaises(frozendict_error,
594 exec, code, {'__builtins__': frozen_builtins})
595
596 # read-only globals
597 namespace = frozendict({})
598 code = compile("x=1", "test", "exec")
599 self.assertRaises(frozendict_error,
600 exec, code, namespace)
601
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000602 def test_exec_redirected(self):
603 savestdout = sys.stdout
604 sys.stdout = None # Whatever that cannot flush()
605 try:
606 # Used to raise SystemError('error return without exception set')
607 exec('a')
608 except NameError:
609 pass
610 finally:
611 sys.stdout = savestdout
612
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000614 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
615 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
616 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
617 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
618 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000619 def identity(item):
620 return 1
621 filter(identity, Squares(5))
622 self.assertRaises(TypeError, filter)
623 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000624 def __getitem__(self, index):
625 if index<4:
626 return 42
627 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000628 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000629 def badfunc():
630 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000631 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000632
Walter Dörwaldbf517072003-01-27 15:57:14 +0000633 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000634 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
635 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
636 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000637
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000638 def test_filter_pickle(self):
Serhiy Storchakabad12572014-12-15 14:03:42 +0200639 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
640 f1 = filter(filter_char, "abcdeabcde")
641 f2 = filter(filter_char, "abcdeabcde")
642 self.check_iter_pickle(f1, list(f2), proto)
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000643
Walter Dörwald919497e2003-01-19 16:23:59 +0000644 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000645 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000646 self.assertRaises(TypeError, getattr, sys, 1)
647 self.assertRaises(TypeError, getattr, sys, 1, "foo")
648 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000649 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000650 # unicode surrogates are not encodable to the default encoding (utf8)
651 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000652
653 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000654 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 self.assertRaises(TypeError, hasattr, sys, 1)
656 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000657 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000658
Benjamin Peterson17689992010-08-24 03:26:23 +0000659 # Check that hasattr propagates all exceptions outside of
660 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000661 class A:
662 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000663 raise SystemExit
664 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000665 class B:
666 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000667 raise ValueError
668 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000669
Walter Dörwald919497e2003-01-19 16:23:59 +0000670 def test_hash(self):
671 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000672 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000673 self.assertEqual(hash(1), hash(1.0))
674 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000675 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000676 hash((0,1,2,3))
677 def f(): pass
678 self.assertRaises(TypeError, hash, [])
679 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000680 # Bug 1536021: Allow hash to return long objects
681 class X:
682 def __hash__(self):
683 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000684 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000685 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000686 def __hash__(self):
687 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000688 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000689
690 def test_hex(self):
691 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000692 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000693 self.assertRaises(TypeError, hex, {})
694
695 def test_id(self):
696 id(None)
697 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000698 id(1.0)
699 id('spam')
700 id((0,1,2,3))
701 id([0,1,2,3])
702 id({'spam': 1, 'eggs': 2, 'ham': 3})
703
Guido van Rossuma88a0332007-02-26 16:59:55 +0000704 # Test input() later, alphabetized as if it were raw_input
705
Walter Dörwald919497e2003-01-19 16:23:59 +0000706 def test_iter(self):
707 self.assertRaises(TypeError, iter)
708 self.assertRaises(TypeError, iter, 42, 42)
709 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000710 for l in lists:
711 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000712 self.assertEqual(next(i), '1')
713 self.assertEqual(next(i), '2')
714 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000715
716 def test_isinstance(self):
717 class C:
718 pass
719 class D(C):
720 pass
721 class E:
722 pass
723 c = C()
724 d = D()
725 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000726 self.assertTrue(isinstance(c, C))
727 self.assertTrue(isinstance(d, C))
728 self.assertTrue(not isinstance(e, C))
729 self.assertTrue(not isinstance(c, D))
730 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000731 self.assertRaises(TypeError, isinstance, E, 'foo')
732 self.assertRaises(TypeError, isinstance)
733
734 def test_issubclass(self):
735 class C:
736 pass
737 class D(C):
738 pass
739 class E:
740 pass
741 c = C()
742 d = D()
743 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000744 self.assertTrue(issubclass(D, C))
745 self.assertTrue(issubclass(C, C))
746 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000747 self.assertRaises(TypeError, issubclass, 'foo', E)
748 self.assertRaises(TypeError, issubclass, E, 'foo')
749 self.assertRaises(TypeError, issubclass)
750
751 def test_len(self):
752 self.assertEqual(len('123'), 3)
753 self.assertEqual(len(()), 0)
754 self.assertEqual(len((1, 2, 3, 4)), 4)
755 self.assertEqual(len([1, 2, 3, 4]), 4)
756 self.assertEqual(len({}), 0)
757 self.assertEqual(len({'a':1, 'b': 2}), 2)
758 class BadSeq:
759 def __len__(self):
760 raise ValueError
761 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000762 class InvalidLen:
763 def __len__(self):
764 return None
765 self.assertRaises(TypeError, len, InvalidLen())
766 class FloatLen:
767 def __len__(self):
768 return 4.5
769 self.assertRaises(TypeError, len, FloatLen())
770 class HugeLen:
771 def __len__(self):
772 return sys.maxsize + 1
773 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000774 class NoLenMethod(object): pass
775 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000776
Walter Dörwald919497e2003-01-19 16:23:59 +0000777 def test_map(self):
778 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000779 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000780 [1, 4, 9]
781 )
782 try:
783 from math import sqrt
784 except ImportError:
785 def sqrt(x):
786 return pow(x, 0.5)
787 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000788 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000789 [[4.0, 2.0], [9.0, 3.0]]
790 )
791 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000792 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000793 [10, 4, 6]
794 )
795
796 def plus(*v):
797 accu = 0
798 for i in v: accu = accu + i
799 return accu
800 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000801 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000802 [1, 3, 7]
803 )
804 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000805 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000806 [1+4, 3+9, 7+2]
807 )
808 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000809 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000810 [1+4+1, 3+9+1, 7+2+0]
811 )
812 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000813 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000814 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
815 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000816 def Max(a, b):
817 if a is None:
818 return b
819 if b is None:
820 return a
821 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000822 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000823 list(map(Max, Squares(3), Squares(2))),
824 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000825 )
826 self.assertRaises(TypeError, map)
827 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000828 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000829 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000830 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000831 yield None
832 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000833 def badfunc(x):
834 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000835 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000836
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000837 def test_map_pickle(self):
Serhiy Storchakabad12572014-12-15 14:03:42 +0200838 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
839 m1 = map(map_char, "Is this the real life?")
840 m2 = map(map_char, "Is this the real life?")
841 self.check_iter_pickle(m1, list(m2), proto)
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000842
Walter Dörwald919497e2003-01-19 16:23:59 +0000843 def test_max(self):
844 self.assertEqual(max('123123'), '3')
845 self.assertEqual(max(1, 2, 3), 3)
846 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
847 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
848
Guido van Rossume2a383d2007-01-15 16:59:06 +0000849 self.assertEqual(max(1, 2, 3.0), 3.0)
850 self.assertEqual(max(1, 2.0, 3), 3)
851 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000852
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700853 self.assertRaises(TypeError, max)
854 self.assertRaises(TypeError, max, 42)
855 self.assertRaises(ValueError, max, ())
856 class BadSeq:
857 def __getitem__(self, index):
858 raise ValueError
859 self.assertRaises(ValueError, max, BadSeq())
860
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000861 for stmt in (
862 "max(key=int)", # no args
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700863 "max(default=None)",
864 "max(1, 2, default=None)", # require container for default
865 "max(default=None, key=int)",
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000866 "max(1, key=int)", # single arg not iterable
867 "max(1, 2, keystone=int)", # wrong keyword
868 "max(1, 2, key=int, abc=int)", # two many keywords
869 "max(1, 2, key=1)", # keyfunc is not callable
870 ):
Tim Peters7f061872004-12-07 21:17:46 +0000871 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000872 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000873 except TypeError:
874 pass
875 else:
876 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000877
878 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
879 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
880 self.assertEqual(max(1, 2, key=neg), 1) # two elems
881
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700882 self.assertEqual(max((), default=None), None) # zero elem iterable
883 self.assertEqual(max((1,), default=None), 1) # one elem iterable
884 self.assertEqual(max((1,2), default=None), 2) # two elem iterable
885
886 self.assertEqual(max((), default=1, key=neg), 1)
887 self.assertEqual(max((1, 2), default=3, key=neg), 1)
888
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000889 data = [random.randrange(200) for i in range(100)]
890 keys = dict((elem, random.randrange(50)) for elem in data)
891 f = keys.__getitem__
892 self.assertEqual(max(data, key=f),
893 sorted(reversed(data), key=f)[-1])
894
Walter Dörwald919497e2003-01-19 16:23:59 +0000895 def test_min(self):
896 self.assertEqual(min('123123'), '1')
897 self.assertEqual(min(1, 2, 3), 1)
898 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
899 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
900
Guido van Rossume2a383d2007-01-15 16:59:06 +0000901 self.assertEqual(min(1, 2, 3.0), 1)
902 self.assertEqual(min(1, 2.0, 3), 1)
903 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000904
905 self.assertRaises(TypeError, min)
906 self.assertRaises(TypeError, min, 42)
907 self.assertRaises(ValueError, min, ())
908 class BadSeq:
909 def __getitem__(self, index):
910 raise ValueError
911 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000912
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000913 for stmt in (
914 "min(key=int)", # no args
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700915 "min(default=None)",
916 "min(1, 2, default=None)", # require container for default
917 "min(default=None, key=int)",
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000918 "min(1, key=int)", # single arg not iterable
919 "min(1, 2, keystone=int)", # wrong keyword
920 "min(1, 2, key=int, abc=int)", # two many keywords
921 "min(1, 2, key=1)", # keyfunc is not callable
922 ):
Tim Peters7f061872004-12-07 21:17:46 +0000923 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000924 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000925 except TypeError:
926 pass
927 else:
928 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000929
930 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
931 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
932 self.assertEqual(min(1, 2, key=neg), 2) # two elems
933
Raymond Hettinger4d6018f2013-06-24 22:43:02 -0700934 self.assertEqual(min((), default=None), None) # zero elem iterable
935 self.assertEqual(min((1,), default=None), 1) # one elem iterable
936 self.assertEqual(min((1,2), default=None), 1) # two elem iterable
937
938 self.assertEqual(min((), default=1, key=neg), 1)
939 self.assertEqual(min((1, 2), default=1, key=neg), 2)
940
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000941 data = [random.randrange(200) for i in range(100)]
942 keys = dict((elem, random.randrange(50)) for elem in data)
943 f = keys.__getitem__
944 self.assertEqual(min(data, key=f),
945 sorted(data, key=f)[0])
946
Georg Brandla18af4e2007-04-21 15:47:16 +0000947 def test_next(self):
948 it = iter(range(2))
949 self.assertEqual(next(it), 0)
950 self.assertEqual(next(it), 1)
951 self.assertRaises(StopIteration, next, it)
952 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000953 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000954
955 class Iter(object):
956 def __iter__(self):
957 return self
958 def __next__(self):
959 raise StopIteration
960
961 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000962 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000963 self.assertRaises(StopIteration, next, it)
964
965 def gen():
966 yield 1
967 return
968
969 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000970 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000971 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000972 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000973
Walter Dörwald919497e2003-01-19 16:23:59 +0000974 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000975 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000976 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000977 self.assertRaises(TypeError, oct, ())
978
979 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000980 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000981 fp = open(TESTFN, 'w')
Victor Stinner82fb71d2013-08-22 01:58:12 +0200982 self.addCleanup(unlink, TESTFN)
983 with fp:
Walter Dörwald919497e2003-01-19 16:23:59 +0000984 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000985 fp.write('The quick brown fox jumps over the lazy dog')
986 fp.write('.\n')
987 fp.write('Dear John\n')
988 fp.write('XXX'*100)
989 fp.write('YYY'*100)
Walter Dörwald919497e2003-01-19 16:23:59 +0000990
991 def test_open(self):
992 self.write_testfile()
993 fp = open(TESTFN, 'r')
Victor Stinner82fb71d2013-08-22 01:58:12 +0200994 with fp:
Walter Dörwald919497e2003-01-19 16:23:59 +0000995 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000996 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
997 self.assertEqual(fp.readline(4), 'Dear')
998 self.assertEqual(fp.readline(100), ' John\n')
999 self.assertEqual(fp.read(300), 'XXX'*100)
1000 self.assertEqual(fp.read(1000), 'YYY'*100)
Walter Dörwald919497e2003-01-19 16:23:59 +00001001
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001002 def test_open_default_encoding(self):
1003 old_environ = dict(os.environ)
1004 try:
1005 # try to get a user preferred encoding different than the current
1006 # locale encoding to check that open() uses the current locale
1007 # encoding and not the user preferred encoding
1008 for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
1009 if key in os.environ:
1010 del os.environ[key]
1011
1012 self.write_testfile()
1013 current_locale_encoding = locale.getpreferredencoding(False)
1014 fp = open(TESTFN, 'w')
Victor Stinner82fb71d2013-08-22 01:58:12 +02001015 with fp:
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001016 self.assertEqual(fp.encoding, current_locale_encoding)
Victor Stinnerf86a5e82012-06-05 13:43:22 +02001017 finally:
1018 os.environ.clear()
1019 os.environ.update(old_environ)
1020
Victor Stinnerdaf45552013-08-28 00:53:59 +02001021 def test_open_non_inheritable(self):
1022 fileobj = open(__file__)
1023 with fileobj:
1024 self.assertFalse(os.get_inheritable(fileobj.fileno()))
1025
Walter Dörwald919497e2003-01-19 16:23:59 +00001026 def test_ord(self):
1027 self.assertEqual(ord(' '), 32)
1028 self.assertEqual(ord('A'), 65)
1029 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +00001030 self.assertEqual(ord('\x80'), 128)
1031 self.assertEqual(ord('\xff'), 255)
1032
1033 self.assertEqual(ord(b' '), 32)
1034 self.assertEqual(ord(b'A'), 65)
1035 self.assertEqual(ord(b'a'), 97)
1036 self.assertEqual(ord(b'\x80'), 128)
1037 self.assertEqual(ord(b'\xff'), 255)
1038
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001039 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +00001040 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +00001041
Guido van Rossum8ac004e2007-07-15 13:00:05 +00001042 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
1043 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
1044 self.assertEqual(ord("\U00010000"), 0x00010000)
1045 self.assertEqual(ord("\U00010001"), 0x00010001)
1046 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
1047 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
1048 self.assertEqual(ord("\U00100000"), 0x00100000)
1049 self.assertEqual(ord("\U00100001"), 0x00100001)
1050 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
1051 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
1052
Walter Dörwald919497e2003-01-19 16:23:59 +00001053 def test_pow(self):
1054 self.assertEqual(pow(0,0), 1)
1055 self.assertEqual(pow(0,1), 0)
1056 self.assertEqual(pow(1,0), 1)
1057 self.assertEqual(pow(1,1), 1)
1058
1059 self.assertEqual(pow(2,0), 1)
1060 self.assertEqual(pow(2,10), 1024)
1061 self.assertEqual(pow(2,20), 1024*1024)
1062 self.assertEqual(pow(2,30), 1024*1024*1024)
1063
1064 self.assertEqual(pow(-2,0), 1)
1065 self.assertEqual(pow(-2,1), -2)
1066 self.assertEqual(pow(-2,2), 4)
1067 self.assertEqual(pow(-2,3), -8)
1068
Walter Dörwald919497e2003-01-19 16:23:59 +00001069 self.assertAlmostEqual(pow(0.,0), 1.)
1070 self.assertAlmostEqual(pow(0.,1), 0.)
1071 self.assertAlmostEqual(pow(1.,0), 1.)
1072 self.assertAlmostEqual(pow(1.,1), 1.)
1073
1074 self.assertAlmostEqual(pow(2.,0), 1.)
1075 self.assertAlmostEqual(pow(2.,10), 1024.)
1076 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
1077 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
1078
1079 self.assertAlmostEqual(pow(-2.,0), 1.)
1080 self.assertAlmostEqual(pow(-2.,1), -2.)
1081 self.assertAlmostEqual(pow(-2.,2), 4.)
1082 self.assertAlmostEqual(pow(-2.,3), -8.)
1083
Mark Dickinson5c2db372009-12-05 20:28:34 +00001084 for x in 2, 2.0:
1085 for y in 10, 10.0:
1086 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +00001087 if isinstance(x, float) or \
1088 isinstance(y, float) or \
1089 isinstance(z, float):
Benjamin Petersonf84200f2014-04-11 15:37:18 -04001090 self.assertRaises(TypeError, pow, x, y, z)
Walter Dörwald919497e2003-01-19 16:23:59 +00001091 else:
1092 self.assertAlmostEqual(pow(x, y, z), 24.0)
1093
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +00001094 self.assertAlmostEqual(pow(-1, 0.5), 1j)
1095 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
1096
Benjamin Petersonf84200f2014-04-11 15:37:18 -04001097 self.assertRaises(ValueError, pow, -1, -2, 3)
Walter Dörwald919497e2003-01-19 16:23:59 +00001098 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +00001099
1100 self.assertRaises(TypeError, pow)
1101
Guido van Rossuma88a0332007-02-26 16:59:55 +00001102 def test_input(self):
1103 self.write_testfile()
1104 fp = open(TESTFN, 'r')
1105 savestdin = sys.stdin
1106 savestdout = sys.stdout # Eats the echo
1107 try:
1108 sys.stdin = fp
1109 sys.stdout = BitBucket()
1110 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001111 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
1112 self.assertEqual(input('testing\n'), 'Dear John')
1113
1114 # SF 1535165: don't segfault on closed stdin
1115 # sys.stdout must be a regular file for triggering
1116 sys.stdout = savestdout
1117 sys.stdin.close()
1118 self.assertRaises(ValueError, input)
1119
1120 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +00001121 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001122 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +00001123 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +00001124 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +00001125 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001126 self.assertRaises(EOFError, input)
1127
1128 del sys.stdout
1129 self.assertRaises(RuntimeError, input, 'prompt')
1130 del sys.stdin
1131 self.assertRaises(RuntimeError, input, 'prompt')
1132 finally:
1133 sys.stdin = savestdin
1134 sys.stdout = savestdout
1135 fp.close()
Guido van Rossuma88a0332007-02-26 16:59:55 +00001136
Andrew Svetlov8e42e8a2012-12-23 12:49:33 +02001137 # test_int(): see test_int.py for tests of built-in function int().
1138
Walter Dörwald919497e2003-01-19 16:23:59 +00001139 def test_repr(self):
1140 self.assertEqual(repr(''), '\'\'')
1141 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001142 self.assertEqual(repr(()), '()')
1143 self.assertEqual(repr([]), '[]')
1144 self.assertEqual(repr({}), '{}')
1145 a = []
1146 a.append(a)
1147 self.assertEqual(repr(a), '[[...]]')
1148 a = {}
1149 a[0] = a
1150 self.assertEqual(repr(a), '{0: {...}}')
1151
1152 def test_round(self):
1153 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001154 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001155 self.assertEqual(round(1.0), 1.0)
1156 self.assertEqual(round(10.0), 10.0)
1157 self.assertEqual(round(1000000000.0), 1000000000.0)
1158 self.assertEqual(round(1e20), 1e20)
1159
1160 self.assertEqual(round(-1.0), -1.0)
1161 self.assertEqual(round(-10.0), -10.0)
1162 self.assertEqual(round(-1000000000.0), -1000000000.0)
1163 self.assertEqual(round(-1e20), -1e20)
1164
1165 self.assertEqual(round(0.1), 0.0)
1166 self.assertEqual(round(1.1), 1.0)
1167 self.assertEqual(round(10.1), 10.0)
1168 self.assertEqual(round(1000000000.1), 1000000000.0)
1169
1170 self.assertEqual(round(-1.1), -1.0)
1171 self.assertEqual(round(-10.1), -10.0)
1172 self.assertEqual(round(-1000000000.1), -1000000000.0)
1173
1174 self.assertEqual(round(0.9), 1.0)
1175 self.assertEqual(round(9.9), 10.0)
1176 self.assertEqual(round(999999999.9), 1000000000.0)
1177
1178 self.assertEqual(round(-0.9), -1.0)
1179 self.assertEqual(round(-9.9), -10.0)
1180 self.assertEqual(round(-999999999.9), -1000000000.0)
1181
1182 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001183 self.assertEqual(type(round(-8.0, -1)), float)
1184
1185 self.assertEqual(type(round(-8.0, 0)), float)
1186 self.assertEqual(type(round(-8.0, 1)), float)
1187
1188 # Check even / odd rounding behaviour
1189 self.assertEqual(round(5.5), 6)
1190 self.assertEqual(round(6.5), 6)
1191 self.assertEqual(round(-5.5), -6)
1192 self.assertEqual(round(-6.5), -6)
1193
1194 # Check behavior on ints
1195 self.assertEqual(round(0), 0)
1196 self.assertEqual(round(8), 8)
1197 self.assertEqual(round(-8), -8)
1198 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001199 self.assertEqual(type(round(-8, -1)), int)
1200 self.assertEqual(type(round(-8, 0)), int)
1201 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001202
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001203 # test new kwargs
1204 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1205
Walter Dörwald919497e2003-01-19 16:23:59 +00001206 self.assertRaises(TypeError, round)
1207
Alex Martelliae211f92007-08-22 23:21:33 +00001208 # test generic rounding delegation for reals
1209 class TestRound:
1210 def __round__(self):
1211 return 23
1212
1213 class TestNoRound:
1214 pass
1215
1216 self.assertEqual(round(TestRound()), 23)
1217
1218 self.assertRaises(TypeError, round, 1, 2, 3)
1219 self.assertRaises(TypeError, round, TestNoRound())
1220
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001221 t = TestNoRound()
1222 t.__round__ = lambda *args: args
1223 self.assertRaises(TypeError, round, t)
1224 self.assertRaises(TypeError, round, t, 0)
1225
Mark Dickinsonad731b92009-11-09 17:12:30 +00001226 # Some versions of glibc for alpha have a bug that affects
1227 # float -> integer rounding (floor, ceil, rint, round) for
1228 # values in the range [2**52, 2**53). See:
1229 #
1230 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1231 #
1232 # We skip this test on Linux/alpha if it would fail.
1233 linux_alpha = (platform.system().startswith('Linux') and
1234 platform.machine().startswith('alpha'))
1235 system_round_bug = round(5e15+1) != 5e15+1
1236 @unittest.skipIf(linux_alpha and system_round_bug,
1237 "test will fail; failure is probably due to a "
1238 "buggy system round function")
1239 def test_round_large(self):
1240 # Issue #1869: integral floats should remain unchanged
1241 self.assertEqual(round(5e15-1), 5e15-1)
1242 self.assertEqual(round(5e15), 5e15)
1243 self.assertEqual(round(5e15+1), 5e15+1)
1244 self.assertEqual(round(5e15+2), 5e15+2)
1245 self.assertEqual(round(5e15+3), 5e15+3)
1246
Walter Dörwald919497e2003-01-19 16:23:59 +00001247 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001248 setattr(sys, 'spam', 1)
1249 self.assertEqual(sys.spam, 1)
1250 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1251 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001252
Chris Jerdonek5fae0e52012-11-20 17:45:51 -08001253 # test_str(): see test_unicode.py and test_bytes.py for str() tests.
Walter Dörwald919497e2003-01-19 16:23:59 +00001254
Alex Martellia70b1912003-04-22 08:12:33 +00001255 def test_sum(self):
1256 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001257 self.assertEqual(sum(list(range(2,8))), 27)
1258 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001259 self.assertEqual(sum(Squares(10)), 285)
1260 self.assertEqual(sum(iter(Squares(10))), 285)
1261 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1262
1263 self.assertRaises(TypeError, sum)
1264 self.assertRaises(TypeError, sum, 42)
1265 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1266 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001267 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1268 values = [bytearray(b'a'), bytearray(b'b')]
1269 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001270 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1271 self.assertRaises(TypeError, sum, [{2:3}])
1272 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1273
1274 class BadSeq:
1275 def __getitem__(self, index):
1276 raise ValueError
1277 self.assertRaises(ValueError, sum, BadSeq())
1278
Mark Dickinson3a22b472009-10-17 21:48:16 +00001279 empty = []
1280 sum(([x] for x in range(10)), empty)
1281 self.assertEqual(empty, [])
1282
Walter Dörwald919497e2003-01-19 16:23:59 +00001283 def test_type(self):
1284 self.assertEqual(type(''), type('123'))
1285 self.assertNotEqual(type(''), type(()))
1286
Guido van Rossumfee7b932005-01-16 00:21:28 +00001287 # We don't want self in vars(), so these are static methods
1288
1289 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001290 def get_vars_f0():
1291 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001292
Guido van Rossumfee7b932005-01-16 00:21:28 +00001293 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001294 def get_vars_f2():
1295 BuiltinTest.get_vars_f0()
1296 a = 1
1297 b = 2
1298 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001299
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001300 class C_get_vars(object):
1301 def getDict(self):
1302 return {'a':2}
1303 __dict__ = property(fget=getDict)
1304
Walter Dörwald919497e2003-01-19 16:23:59 +00001305 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001306 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001307 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001308 self.assertEqual(self.get_vars_f0(), {})
1309 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1310 self.assertRaises(TypeError, vars, 42, 42)
1311 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001312 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001313
1314 def test_zip(self):
1315 a = (1, 2, 3)
1316 b = (4, 5, 6)
1317 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001318 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001319 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001320 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001321 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001322 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001323 class I:
1324 def __getitem__(self, i):
1325 if i < 0 or i > 2: raise IndexError
1326 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001327 self.assertEqual(list(zip(a, I())), t)
1328 self.assertEqual(list(zip()), [])
1329 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001330 self.assertRaises(TypeError, zip, None)
1331 class G:
1332 pass
1333 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001334 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001335
1336 # Make sure zip doesn't try to allocate a billion elements for the
1337 # result list when one of its arguments doesn't say how long it is.
1338 # A MemoryError is the most likely failure mode.
1339 class SequenceWithoutALength:
1340 def __getitem__(self, i):
1341 if i == 5:
1342 raise IndexError
1343 else:
1344 return i
1345 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001346 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001347 list(enumerate(range(5)))
1348 )
1349
1350 class BadSeq:
1351 def __getitem__(self, i):
1352 if i == 5:
1353 raise ValueError
1354 else:
1355 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001356 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001357
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001358 def test_zip_pickle(self):
1359 a = (1, 2, 3)
1360 b = (4, 5, 6)
1361 t = [(1, 4), (2, 5), (3, 6)]
Serhiy Storchakabad12572014-12-15 14:03:42 +02001362 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
1363 z1 = zip(a, b)
1364 self.check_iter_pickle(z1, t, proto)
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +00001365
Eric Smithe4d63172010-09-13 20:48:43 +00001366 def test_format(self):
1367 # Test the basic machinery of the format() builtin. Don't test
1368 # the specifics of the various formatters
1369 self.assertEqual(format(3, ''), '3')
1370
1371 # Returns some classes to use for various tests. There's
1372 # an old-style version, and a new-style version
1373 def classes_new():
1374 class A(object):
1375 def __init__(self, x):
1376 self.x = x
1377 def __format__(self, format_spec):
1378 return str(self.x) + format_spec
1379 class DerivedFromA(A):
1380 pass
1381
1382 class Simple(object): pass
1383 class DerivedFromSimple(Simple):
1384 def __init__(self, x):
1385 self.x = x
1386 def __format__(self, format_spec):
1387 return str(self.x) + format_spec
1388 class DerivedFromSimple2(DerivedFromSimple): pass
1389 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1390
1391 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1392 self.assertEqual(format(A(3), 'spec'), '3spec')
1393 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1394 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1395 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1396 '10abcdef')
1397
1398 class_test(*classes_new())
1399
1400 def empty_format_spec(value):
1401 # test that:
1402 # format(x, '') == str(x)
1403 # format(x) == str(x)
1404 self.assertEqual(format(value, ""), str(value))
1405 self.assertEqual(format(value), str(value))
1406
1407 # for builtin types, format(x, "") == str(x)
1408 empty_format_spec(17**13)
1409 empty_format_spec(1.0)
1410 empty_format_spec(3.1415e104)
1411 empty_format_spec(-3.1415e104)
1412 empty_format_spec(3.1415e-104)
1413 empty_format_spec(-3.1415e-104)
1414 empty_format_spec(object)
1415 empty_format_spec(None)
1416
1417 # TypeError because self.__format__ returns the wrong type
1418 class BadFormatResult:
1419 def __format__(self, format_spec):
1420 return 1.0
1421 self.assertRaises(TypeError, format, BadFormatResult(), "")
1422
1423 # TypeError because format_spec is not unicode or str
1424 self.assertRaises(TypeError, format, object(), 4)
1425 self.assertRaises(TypeError, format, object(), object())
1426
1427 # tests for object.__format__ really belong elsewhere, but
1428 # there's no good place to put them
1429 x = object().__format__('')
1430 self.assertTrue(x.startswith('<object object at'))
1431
1432 # first argument to object.__format__ must be string
1433 self.assertRaises(TypeError, object().__format__, 3)
1434 self.assertRaises(TypeError, object().__format__, object())
1435 self.assertRaises(TypeError, object().__format__, None)
1436
1437 # --------------------------------------------------------------------
1438 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001439 # deprecated
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001440 def test_deprecated_format_string(obj, fmt_str, should_raise):
1441 if should_raise:
1442 self.assertRaises(TypeError, format, obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001443 else:
Andrew Svetlov2cd8ce42012-12-23 14:27:17 +02001444 format(obj, fmt_str)
Eric Smithe4d63172010-09-13 20:48:43 +00001445
1446 fmt_strs = ['', 's']
1447
1448 class A:
1449 def __format__(self, fmt_str):
1450 return format('', fmt_str)
1451
1452 for fmt_str in fmt_strs:
1453 test_deprecated_format_string(A(), fmt_str, False)
1454
1455 class B:
1456 pass
1457
1458 class C(object):
1459 pass
1460
1461 for cls in [object, B, C]:
1462 for fmt_str in fmt_strs:
1463 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1464 # --------------------------------------------------------------------
1465
1466 # make sure we can take a subclass of str as a format spec
1467 class DerivedFromStr(str): pass
1468 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1469
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001470 def test_bin(self):
1471 self.assertEqual(bin(0), '0b0')
1472 self.assertEqual(bin(1), '0b1')
1473 self.assertEqual(bin(-1), '-0b1')
1474 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1475 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1476 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1477 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1478
Georg Brandl953152f2009-07-22 12:03:59 +00001479 def test_bytearray_translate(self):
1480 x = bytearray(b"abc")
1481 self.assertRaises(ValueError, x.translate, b"1", 1)
1482 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1483
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001484 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001485 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001486 tp = type(const)
1487 self.assertIs(tp(), const)
1488 self.assertRaises(TypeError, tp, 1, 2)
1489 self.assertRaises(TypeError, tp, a=1, b=2)
1490
Martin Panterc9a6ab52015-10-10 01:25:38 +00001491@unittest.skipUnless(pty, "the pty and signal modules must be available")
1492class PtyTests(unittest.TestCase):
1493 """Tests that use a pseudo terminal to guarantee stdin and stdout are
1494 terminals in the test environment"""
1495
Martin Pantere44dba32015-10-10 05:27:15 +00001496 def run_child(self, child, terminal_input):
1497 r, w = os.pipe() # Pipe test results from child back to parent
Martin Panterc9a6ab52015-10-10 01:25:38 +00001498 try:
Martin Pantere44dba32015-10-10 05:27:15 +00001499 pid, fd = pty.fork()
Martin Panterc9a6ab52015-10-10 01:25:38 +00001500 except (OSError, AttributeError) as e:
Martin Panterc9a6ab52015-10-10 01:25:38 +00001501 os.close(r)
1502 os.close(w)
Martin Pantere44dba32015-10-10 05:27:15 +00001503 self.skipTest("pty.fork() raised {}".format(e))
Martin Panterc9a6ab52015-10-10 01:25:38 +00001504 raise
1505 if pid == 0:
1506 # Child
1507 try:
1508 # Make sure we don't get stuck if there's a problem
1509 signal.alarm(2)
1510 os.close(r)
Martin Panterc9a6ab52015-10-10 01:25:38 +00001511 with open(w, "w") as wpipe:
Martin Pantere44dba32015-10-10 05:27:15 +00001512 child(wpipe)
Martin Panterc9a6ab52015-10-10 01:25:38 +00001513 except:
1514 traceback.print_exc()
1515 finally:
1516 # We don't want to return to unittest...
1517 os._exit(0)
1518 # Parent
1519 os.close(w)
Martin Pantere44dba32015-10-10 05:27:15 +00001520 os.write(fd, terminal_input)
Martin Panterc9a6ab52015-10-10 01:25:38 +00001521 # Get results from the pipe
1522 with open(r, "r") as rpipe:
1523 lines = []
1524 while True:
1525 line = rpipe.readline().strip()
1526 if line == "":
1527 # The other end was closed => the child exited
1528 break
1529 lines.append(line)
1530 # Check the result was got and corresponds to the user's terminal input
1531 if len(lines) != 2:
1532 # Something went wrong, try to get at stderr
Martin Pantere44dba32015-10-10 05:27:15 +00001533 # Beware of Linux raising EIO when the slave is closed
1534 child_output = bytearray()
1535 while True:
1536 try:
1537 chunk = os.read(fd, 3000)
1538 except OSError: # Assume EIO
1539 break
1540 if not chunk:
1541 break
1542 child_output.extend(chunk)
1543 os.close(fd)
1544 child_output = child_output.decode("ascii", "ignore")
1545 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1546 % (len(lines), child_output))
Martin Panterc9a6ab52015-10-10 01:25:38 +00001547 os.close(fd)
Martin Pantere44dba32015-10-10 05:27:15 +00001548 return lines
1549
1550 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
1551 if not sys.stdin.isatty() or not sys.stdout.isatty():
1552 self.skipTest("stdin and stdout must be ttys")
1553 def child(wpipe):
1554 # Check the error handlers are accounted for
1555 if stdio_encoding:
1556 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1557 encoding=stdio_encoding,
1558 errors='surrogateescape')
1559 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1560 encoding=stdio_encoding,
1561 errors='replace')
1562 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1563 print(ascii(input(prompt)), file=wpipe)
1564 lines = self.run_child(child, terminal_input + b"\r\n")
Martin Panterc9a6ab52015-10-10 01:25:38 +00001565 # Check we did exercise the GNU readline path
1566 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1567 if lines[0] != 'tty = True':
1568 self.skipTest("standard IO in should have been a tty")
1569 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1570 if stdio_encoding:
1571 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1572 else:
1573 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1574 self.assertEqual(input_result, expected)
1575
1576 def test_input_tty(self):
1577 # Test input() functionality when wired to a tty (the code path
1578 # is different and invokes GNU readline if available).
1579 self.check_input_tty("prompt", b"quux")
1580
1581 def test_input_tty_non_ascii(self):
1582 # Check stdin/stdout encoding is used when invoking GNU readline
1583 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1584
1585 def test_input_tty_non_ascii_unicode_errors(self):
1586 # Check stdin/stdout error handler is used when invoking GNU readline
1587 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1588
1589 def test_input_no_stdout_fileno(self):
1590 # Issue #24402: If stdin is the original terminal but stdout.fileno()
1591 # fails, do not use the original stdout file descriptor
Martin Pantere44dba32015-10-10 05:27:15 +00001592 def child(wpipe):
1593 print("stdin.isatty():", sys.stdin.isatty(), file=wpipe)
1594 sys.stdout = io.StringIO() # Does not support fileno()
1595 input("prompt")
1596 print("captured:", ascii(sys.stdout.getvalue()), file=wpipe)
1597 lines = self.run_child(child, b"quux\r")
1598 expected = (
1599 "stdin.isatty(): True",
1600 "captured: 'prompt'",
1601 )
1602 self.assertSequenceEqual(lines, expected)
Martin Panterc9a6ab52015-10-10 01:25:38 +00001603
Raymond Hettinger64958a12003-12-17 20:43:33 +00001604class TestSorted(unittest.TestCase):
1605
1606 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001607 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001608 copy = data[:]
1609 random.shuffle(copy)
1610 self.assertEqual(data, sorted(copy))
1611 self.assertNotEqual(data, copy)
1612
1613 data.reverse()
1614 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001615 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1616 self.assertNotEqual(data, copy)
1617 random.shuffle(copy)
1618 self.assertEqual(data, sorted(copy, reverse=1))
1619 self.assertNotEqual(data, copy)
1620
1621 def test_inputtypes(self):
1622 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001623 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001624 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001625 self.assertEqual(sorted(s), sorted(T(s)))
1626
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001627 s = ''.join(set(s)) # unique letters only
1628 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001629 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001630 self.assertEqual(sorted(s), sorted(T(s)))
1631
1632 def test_baddecorator(self):
1633 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1634 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1635
Serhiy Storchaka87a5c512014-02-10 18:21:34 +02001636
1637class ShutdownTest(unittest.TestCase):
1638
1639 def test_cleanup(self):
1640 # Issue #19255: builtins are still available at shutdown
1641 code = """if 1:
1642 import builtins
1643 import sys
1644
1645 class C:
1646 def __del__(self):
Victor Stinner8da4fb52014-02-12 18:27:55 +01001647 print("before")
Serhiy Storchaka87a5c512014-02-10 18:21:34 +02001648 # Check that builtins still exist
1649 len(())
Victor Stinner8da4fb52014-02-12 18:27:55 +01001650 print("after")
Serhiy Storchaka87a5c512014-02-10 18:21:34 +02001651
1652 c = C()
1653 # Make this module survive until builtins and sys are cleaned
1654 builtins.here = sys.modules[__name__]
1655 sys.here = sys.modules[__name__]
1656 # Create a reference loop so that this module needs to go
1657 # through a GC phase.
1658 here = sys.modules[__name__]
1659 """
Victor Stinner8da4fb52014-02-12 18:27:55 +01001660 # Issue #20599: Force ASCII encoding to get a codec implemented in C,
1661 # otherwise the codec may be unloaded before C.__del__() is called, and
1662 # so print("before") fails because the codec cannot be used to encode
1663 # "before" to sys.stdout.encoding. For example, on Windows,
1664 # sys.stdout.encoding is the OEM code page and these code pages are
1665 # implemented in Python
1666 rc, out, err = assert_python_ok("-c", code,
Victor Stinnere755fba2014-02-13 10:54:32 +01001667 PYTHONIOENCODING="ascii")
Serhiy Storchaka87a5c512014-02-10 18:21:34 +02001668 self.assertEqual(["before", "after"], out.decode().splitlines())
1669
1670
Serhiy Storchaka763f9f02016-02-08 20:28:03 +02001671class TestType(unittest.TestCase):
1672 def test_new_type(self):
1673 A = type('A', (), {})
1674 self.assertEqual(A.__name__, 'A')
1675 self.assertEqual(A.__qualname__, 'A')
1676 self.assertEqual(A.__module__, __name__)
1677 self.assertEqual(A.__bases__, (object,))
1678 self.assertIs(A.__base__, object)
1679 x = A()
1680 self.assertIs(type(x), A)
1681 self.assertIs(x.__class__, A)
1682
1683 class B:
1684 def ham(self):
1685 return 'ham%d' % self
1686 C = type('C', (B, int), {'spam': lambda self: 'spam%s' % self})
1687 self.assertEqual(C.__name__, 'C')
1688 self.assertEqual(C.__qualname__, 'C')
1689 self.assertEqual(C.__module__, __name__)
1690 self.assertEqual(C.__bases__, (B, int))
1691 self.assertIs(C.__base__, int)
1692 self.assertIn('spam', C.__dict__)
1693 self.assertNotIn('ham', C.__dict__)
1694 x = C(42)
1695 self.assertEqual(x, 42)
1696 self.assertIs(type(x), C)
1697 self.assertIs(x.__class__, C)
1698 self.assertEqual(x.ham(), 'ham42')
1699 self.assertEqual(x.spam(), 'spam42')
1700 self.assertEqual(x.to_bytes(2, 'little'), b'\x2a\x00')
1701
1702 def test_type_new_keywords(self):
1703 class B:
1704 def ham(self):
1705 return 'ham%d' % self
1706 C = type.__new__(type,
1707 name='C',
1708 bases=(B, int),
1709 dict={'spam': lambda self: 'spam%s' % self})
1710 self.assertEqual(C.__name__, 'C')
1711 self.assertEqual(C.__qualname__, 'C')
1712 self.assertEqual(C.__module__, __name__)
1713 self.assertEqual(C.__bases__, (B, int))
1714 self.assertIs(C.__base__, int)
1715 self.assertIn('spam', C.__dict__)
1716 self.assertNotIn('ham', C.__dict__)
1717
1718 def test_type_name(self):
1719 for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '':
1720 with self.subTest(name=name):
1721 A = type(name, (), {})
1722 self.assertEqual(A.__name__, name)
1723 self.assertEqual(A.__qualname__, name)
1724 self.assertEqual(A.__module__, __name__)
1725 with self.assertRaises(ValueError):
1726 type('A\x00B', (), {})
1727 with self.assertRaises(ValueError):
1728 type('A\udcdcB', (), {})
1729 with self.assertRaises(TypeError):
1730 type(b'A', (), {})
1731
1732 C = type('C', (), {})
1733 for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '':
1734 with self.subTest(name=name):
1735 C.__name__ = name
1736 self.assertEqual(C.__name__, name)
1737 self.assertEqual(C.__qualname__, 'C')
1738 self.assertEqual(C.__module__, __name__)
1739
1740 A = type('C', (), {})
1741 with self.assertRaises(ValueError):
1742 A.__name__ = 'A\x00B'
1743 self.assertEqual(A.__name__, 'C')
1744 with self.assertRaises(ValueError):
1745 A.__name__ = 'A\udcdcB'
1746 self.assertEqual(A.__name__, 'C')
1747 with self.assertRaises(TypeError):
1748 A.__name__ = b'A'
1749 self.assertEqual(A.__name__, 'C')
1750
1751 def test_type_qualname(self):
1752 A = type('A', (), {'__qualname__': 'B.C'})
1753 self.assertEqual(A.__name__, 'A')
1754 self.assertEqual(A.__qualname__, 'B.C')
1755 self.assertEqual(A.__module__, __name__)
1756 with self.assertRaises(TypeError):
1757 type('A', (), {'__qualname__': b'B'})
1758 self.assertEqual(A.__qualname__, 'B.C')
1759
1760 A.__qualname__ = 'D.E'
1761 self.assertEqual(A.__name__, 'A')
1762 self.assertEqual(A.__qualname__, 'D.E')
1763 with self.assertRaises(TypeError):
1764 A.__qualname__ = b'B'
1765 self.assertEqual(A.__qualname__, 'D.E')
1766
1767 def test_type_doc(self):
1768 for doc in 'x', '\xc4', '\U0001f40d', 'x\x00y', b'x', 42, None:
1769 A = type('A', (), {'__doc__': doc})
1770 self.assertEqual(A.__doc__, doc)
1771 with self.assertRaises(UnicodeEncodeError):
1772 type('A', (), {'__doc__': 'x\udcdcy'})
1773
1774 A = type('A', (), {})
1775 self.assertEqual(A.__doc__, None)
1776 for doc in 'x', '\xc4', '\U0001f40d', 'x\x00y', 'x\udcdcy', b'x', 42, None:
1777 A.__doc__ = doc
1778 self.assertEqual(A.__doc__, doc)
1779
1780 def test_bad_args(self):
1781 with self.assertRaises(TypeError):
1782 type()
1783 with self.assertRaises(TypeError):
1784 type('A', ())
1785 with self.assertRaises(TypeError):
1786 type('A', (), {}, ())
1787 with self.assertRaises(TypeError):
1788 type('A', (), dict={})
1789 with self.assertRaises(TypeError):
1790 type('A', [], {})
1791 with self.assertRaises(TypeError):
1792 type('A', (), types.MappingProxyType({}))
1793 with self.assertRaises(TypeError):
1794 type('A', (None,), {})
1795 with self.assertRaises(TypeError):
1796 type('A', (bool,), {})
1797 with self.assertRaises(TypeError):
1798 type('A', (int, str), {})
1799
1800 def test_bad_slots(self):
1801 with self.assertRaises(TypeError):
1802 type('A', (), {'__slots__': b'x'})
1803 with self.assertRaises(TypeError):
1804 type('A', (int,), {'__slots__': 'x'})
1805 with self.assertRaises(TypeError):
1806 type('A', (), {'__slots__': ''})
1807 with self.assertRaises(TypeError):
1808 type('A', (), {'__slots__': '42'})
1809 with self.assertRaises(TypeError):
1810 type('A', (), {'__slots__': 'x\x00y'})
1811 with self.assertRaises(ValueError):
1812 type('A', (), {'__slots__': 'x', 'x': 0})
1813 with self.assertRaises(TypeError):
1814 type('A', (), {'__slots__': ('__dict__', '__dict__')})
1815 with self.assertRaises(TypeError):
1816 type('A', (), {'__slots__': ('__weakref__', '__weakref__')})
1817
1818 class B:
1819 pass
1820 with self.assertRaises(TypeError):
1821 type('A', (B,), {'__slots__': '__dict__'})
1822 with self.assertRaises(TypeError):
1823 type('A', (B,), {'__slots__': '__weakref__'})
1824
1825
Zachary Warea4b7a752013-11-24 01:19:09 -06001826def load_tests(loader, tests, pattern):
1827 from doctest import DocTestSuite
1828 tests.addTest(DocTestSuite(builtins))
1829 return tests
Walter Dörwald919497e2003-01-19 16:23:59 +00001830
1831if __name__ == "__main__":
Zachary Warea4b7a752013-11-24 01:19:09 -06001832 unittest.main()