blob: a3c8dcc18e96220aa452ecdac26776df85801267 [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
Mark Dickinsonad731b92009-11-09 17:12:30 +00003import platform
Georg Brandl1b37e872010-03-14 10:45:50 +00004import unittest
Benjamin Peterson076e0312010-08-23 21:58:59 +00005import sys
6import warnings
7import collections
8import io
Antoine Pitrou0d776b12011-11-06 00:34:26 +01009import os
Georg Brandl8334fd92010-12-04 10:26:46 +000010import ast
Benjamin Peterson076e0312010-08-23 21:58:59 +000011import types
12import builtins
13import random
Antoine Pitrou413d4972011-11-06 02:51:25 +010014import traceback
Brett Cannon77628992010-03-20 20:59:33 +000015from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000016from operator import neg
Antoine Pitrou0d776b12011-11-06 00:34:26 +010017try:
Antoine Pitrou413d4972011-11-06 02:51:25 +010018 import pty, signal
Antoine Pitrou0d776b12011-11-06 00:34:26 +010019except ImportError:
Antoine Pitrou413d4972011-11-06 02:51:25 +010020 pty = signal = None
Nadeem Vawda6f02ea02013-01-27 14:01:42 +010021# Importing this module has the side-effect of changing the behavior of input().
22# Ensure that we always use the readline version (if available), so we don't get
23# different results depending on what other tests have already imported.
24try:
25 import readline
26except ImportError:
27 pass
Guido van Rossum3bead091992-01-27 17:00:37 +000028
Guido van Rossum3bead091992-01-27 17:00:37 +000029
Walter Dörwald919497e2003-01-19 16:23:59 +000030class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000031
Walter Dörwald919497e2003-01-19 16:23:59 +000032 def __init__(self, max):
33 self.max = max
34 self.sofar = []
35
36 def __len__(self): return len(self.sofar)
37
38 def __getitem__(self, i):
39 if not 0 <= i < self.max: raise IndexError
40 n = len(self.sofar)
41 while n <= i:
42 self.sofar.append(n*n)
43 n += 1
44 return self.sofar[i]
45
46class StrSquares:
47
48 def __init__(self, max):
49 self.max = max
50 self.sofar = []
51
52 def __len__(self):
53 return len(self.sofar)
54
55 def __getitem__(self, i):
56 if not 0 <= i < self.max:
57 raise IndexError
58 n = len(self.sofar)
59 while n <= i:
60 self.sofar.append(str(n*n))
61 n += 1
62 return self.sofar[i]
63
64class BitBucket:
65 def write(self, line):
66 pass
67
Facundo Batista2336bdd2008-01-19 19:12:01 +000068test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000069 ('0', 0),
70 ('1', 1),
71 ('9', 9),
72 ('10', 10),
73 ('99', 99),
74 ('100', 100),
75 ('314', 314),
76 (' 314', 314),
77 ('314 ', 314),
78 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000079 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000080 (' 1x', ValueError),
81 (' 1 ', 1),
82 (' 1\02 ', ValueError),
83 ('', ValueError),
84 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000085 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000086 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000087 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000088]
89
Facundo Batista2336bdd2008-01-19 19:12:01 +000090test_conv_sign = [
91 ('0', 0),
92 ('1', 1),
93 ('9', 9),
94 ('10', 10),
95 ('99', 99),
96 ('100', 100),
97 ('314', 314),
98 (' 314', ValueError),
99 ('314 ', 314),
100 (' \t\t 314 \t\t ', ValueError),
101 (repr(sys.maxsize), sys.maxsize),
102 (' 1x', ValueError),
103 (' 1 ', ValueError),
104 (' 1\02 ', ValueError),
105 ('', ValueError),
106 (' ', ValueError),
107 (' \t\t ', ValueError),
108 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
109 (chr(0x200), ValueError),
110]
111
Raymond Hettinger96229b12005-03-11 06:49:40 +0000112class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000113 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000114 raise RuntimeError
115
116class TestFailingIter:
117 def __iter__(self):
118 raise RuntimeError
119
Walter Dörwald919497e2003-01-19 16:23:59 +0000120class BuiltinTest(unittest.TestCase):
121
122 def test_import(self):
123 __import__('sys')
124 __import__('time')
125 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000126 __import__(name='sys')
127 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000128 self.assertRaises(ImportError, __import__, 'spamspam')
129 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000130 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000131 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000132
133 def test_abs(self):
134 # int
135 self.assertEqual(abs(0), 0)
136 self.assertEqual(abs(1234), 1234)
137 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000138 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000139 # float
140 self.assertEqual(abs(0.0), 0.0)
141 self.assertEqual(abs(3.14), 3.14)
142 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000143 # str
144 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000145 # bool
146 self.assertEqual(abs(True), 1)
147 self.assertEqual(abs(False), 0)
148 # other
149 self.assertRaises(TypeError, abs)
150 self.assertRaises(TypeError, abs, None)
151 class AbsClass(object):
152 def __abs__(self):
153 return -5
154 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000155
Raymond Hettinger96229b12005-03-11 06:49:40 +0000156 def test_all(self):
157 self.assertEqual(all([2, 4, 6]), True)
158 self.assertEqual(all([2, None, 6]), False)
159 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
160 self.assertRaises(RuntimeError, all, TestFailingIter())
161 self.assertRaises(TypeError, all, 10) # Non-iterable
162 self.assertRaises(TypeError, all) # No args
163 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
164 self.assertEqual(all([]), True) # Empty iterator
165 S = [50, 60]
166 self.assertEqual(all(x > 42 for x in S), True)
167 S = [50, 40, 60]
168 self.assertEqual(all(x > 42 for x in S), False)
169
170 def test_any(self):
171 self.assertEqual(any([None, None, None]), False)
172 self.assertEqual(any([None, 4, None]), True)
173 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
174 self.assertRaises(RuntimeError, all, TestFailingIter())
175 self.assertRaises(TypeError, any, 10) # Non-iterable
176 self.assertRaises(TypeError, any) # No args
177 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
178 self.assertEqual(any([]), False) # Empty iterator
179 S = [40, 60, 30]
180 self.assertEqual(any(x > 42 for x in S), True)
181 S = [10, 20, 30]
182 self.assertEqual(any(x > 42 for x in S), False)
183
Georg Brandl559e5d72008-06-11 18:37:52 +0000184 def test_ascii(self):
185 self.assertEqual(ascii(''), '\'\'')
186 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000187 self.assertEqual(ascii(()), '()')
188 self.assertEqual(ascii([]), '[]')
189 self.assertEqual(ascii({}), '{}')
190 a = []
191 a.append(a)
192 self.assertEqual(ascii(a), '[[...]]')
193 a = {}
194 a[0] = a
195 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000196 # Advanced checks for unicode strings
197 def _check_uni(s):
198 self.assertEqual(ascii(s), repr(s))
199 _check_uni("'")
200 _check_uni('"')
201 _check_uni('"\'')
202 _check_uni('\0')
203 _check_uni('\r\n\t .')
204 # Unprintable non-ASCII characters
205 _check_uni('\x85')
206 _check_uni('\u1fff')
207 _check_uni('\U00012fff')
208 # Lone surrogates
209 _check_uni('\ud800')
210 _check_uni('\udfff')
211 # Issue #9804: surrogates should be joined even for printable
212 # wide characters (UCS-2 builds).
213 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
214 # All together
215 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
216 self.assertEqual(ascii(s),
217 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000218
Thomas Wouters89f507f2006-12-13 04:49:30 +0000219 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000220 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000221 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000222 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000223
Walter Dörwald919497e2003-01-19 16:23:59 +0000224 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000225 self.assertTrue(callable(len))
226 self.assertFalse(callable("a"))
227 self.assertTrue(callable(callable))
228 self.assertTrue(callable(lambda x, y: x + y))
229 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000230 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000231 self.assertTrue(callable(f))
232
233 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000234 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000235 self.assertTrue(callable(C1))
236 c = C1()
237 self.assertTrue(callable(c.meth))
238 self.assertFalse(callable(c))
239
240 # __call__ is looked up on the class, not the instance
241 c.__call__ = None
242 self.assertFalse(callable(c))
243 c.__call__ = lambda self: 0
244 self.assertFalse(callable(c))
245 del c.__call__
246 self.assertFalse(callable(c))
247
248 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000249 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000250 c2 = C2()
251 self.assertTrue(callable(c2))
252 c2.__call__ = None
253 self.assertTrue(callable(c2))
254 class C3(C2): pass
255 c3 = C3()
256 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000257
258 def test_chr(self):
259 self.assertEqual(chr(32), ' ')
260 self.assertEqual(chr(65), 'A')
261 self.assertEqual(chr(97), 'a')
262 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000263 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000264 self.assertEqual(chr(sys.maxunicode),
265 str(('\\U%08x' % (sys.maxunicode)).encode("ascii"),
266 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000267 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000268 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
269 self.assertEqual(chr(0x00010000), "\U00010000")
270 self.assertEqual(chr(0x00010001), "\U00010001")
271 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
272 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
273 self.assertEqual(chr(0x00100000), "\U00100000")
274 self.assertEqual(chr(0x00100001), "\U00100001")
275 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
276 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
277 self.assertRaises(ValueError, chr, -1)
278 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000279 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000280
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000281 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000282 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000283
Walter Dörwald919497e2003-01-19 16:23:59 +0000284 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000285 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000286 bom = b'\xef\xbb\xbf'
287 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000288 compile(source='pass', filename='?', mode='exec')
289 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
290 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000291 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000292 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000293 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
294 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000295 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000296 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
297 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000298 compile('print("\xe5")\n', '', 'exec')
299 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
300 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000301
Georg Brandl8334fd92010-12-04 10:26:46 +0000302 # test the optimize argument
303
304 codestr = '''def f():
305 """doc"""
306 try:
307 assert False
308 except AssertionError:
309 return (True, f.__doc__)
310 else:
311 return (False, f.__doc__)
312 '''
313 def f(): """doc"""
314 values = [(-1, __debug__, f.__doc__),
315 (0, True, 'doc'),
316 (1, False, 'doc'),
317 (2, False, None)]
318 for optval, debugval, docstring in values:
319 # test both direct compilation and compilation via AST
320 codeobjs = []
321 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
322 tree = ast.parse(codestr)
323 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
324 for code in codeobjs:
325 ns = {}
326 exec(code, ns)
327 rv = ns['f']()
328 self.assertEqual(rv, (debugval, docstring))
329
Walter Dörwald919497e2003-01-19 16:23:59 +0000330 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000331 sys.spam = 1
332 delattr(sys, 'spam')
333 self.assertRaises(TypeError, delattr)
334
335 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000336 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000337 self.assertRaises(TypeError, dir, 42, 42)
338
Georg Brandle32b4222007-03-10 22:13:27 +0000339 # dir() - local scope
340 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000341 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000342
343 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000344 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000345
346 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000347 class Foo(types.ModuleType):
348 __dict__ = 8
349 f = Foo("foo")
350 self.assertRaises(TypeError, dir, f)
351
352 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000353 self.assertIn("strip", dir(str))
354 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000355
356 # dir(obj)
357 class Foo(object):
358 def __init__(self):
359 self.x = 7
360 self.y = 8
361 self.z = 9
362 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000363 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000364
365 # dir(obj_no__dict__)
366 class Foo(object):
367 __slots__ = []
368 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000369 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000370
371 # dir(obj_no__class__with__dict__)
372 # (an ugly trick to cause getattr(f, "__class__") to fail)
373 class Foo(object):
374 __slots__ = ["__class__", "__dict__"]
375 def __init__(self):
376 self.bar = "wow"
377 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000378 self.assertNotIn("__repr__", dir(f))
379 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000380
381 # dir(obj_using __dir__)
382 class Foo(object):
383 def __dir__(self):
384 return ["kan", "ga", "roo"]
385 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000386 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000387
388 # dir(obj__dir__not_list)
389 class Foo(object):
390 def __dir__(self):
391 return 7
392 f = Foo()
393 self.assertRaises(TypeError, dir, f)
394
Collin Winter3eed7652007-08-14 17:53:54 +0000395 # dir(traceback)
396 try:
397 raise IndexError
398 except:
399 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
400
401
Walter Dörwald919497e2003-01-19 16:23:59 +0000402 def test_divmod(self):
403 self.assertEqual(divmod(12, 7), (1, 5))
404 self.assertEqual(divmod(-12, 7), (-2, 2))
405 self.assertEqual(divmod(12, -7), (-2, -2))
406 self.assertEqual(divmod(-12, -7), (1, -5))
407
Mark Dickinson5c2db372009-12-05 20:28:34 +0000408 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000409
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000410 self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
411 self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
412 self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
413 self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000414
415 self.assertRaises(TypeError, divmod)
416
417 def test_eval(self):
418 self.assertEqual(eval('1+1'), 2)
419 self.assertEqual(eval(' 1+1\n'), 2)
420 globals = {'a': 1, 'b': 2}
421 locals = {'b': 200, 'c': 300}
422 self.assertEqual(eval('a', globals) , 1)
423 self.assertEqual(eval('a', globals, locals), 1)
424 self.assertEqual(eval('b', globals, locals), 200)
425 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000426 globals = {'a': 1, 'b': 2}
427 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000428 bom = b'\xef\xbb\xbf'
429 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000430 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000431 self.assertRaises(TypeError, eval)
432 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000433 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000434
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000435 def test_general_eval(self):
436 # Tests that general mappings can be used for the locals argument
437
438 class M:
439 "Test mapping interface versus possible calls from eval()."
440 def __getitem__(self, key):
441 if key == 'a':
442 return 12
443 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000444 def keys(self):
445 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000446
447 m = M()
448 g = globals()
449 self.assertEqual(eval('a', g, m), 12)
450 self.assertRaises(NameError, eval, 'b', g, m)
451 self.assertEqual(eval('dir()', g, m), list('xyz'))
452 self.assertEqual(eval('globals()', g, m), g)
453 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000454 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000455 class A:
456 "Non-mapping"
457 pass
458 m = A()
459 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000460
461 # Verify that dict subclasses work as well
462 class D(dict):
463 def __getitem__(self, key):
464 if key == 'a':
465 return 12
466 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000467 def keys(self):
468 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000469
470 d = D()
471 self.assertEqual(eval('a', g, d), 12)
472 self.assertRaises(NameError, eval, 'b', g, d)
473 self.assertEqual(eval('dir()', g, d), list('xyz'))
474 self.assertEqual(eval('globals()', g, d), g)
475 self.assertEqual(eval('locals()', g, d), d)
476
477 # Verify locals stores (used by list comps)
478 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000479 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000480
481 class SpreadSheet:
482 "Sample application showing nested, calculated lookups."
483 _cells = {}
484 def __setitem__(self, key, formula):
485 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000486 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000487 return eval(self._cells[key], globals(), self)
488
489 ss = SpreadSheet()
490 ss['a1'] = '5'
491 ss['a2'] = 'a1*6'
492 ss['a3'] = 'a2*7'
493 self.assertEqual(ss['a3'], 210)
494
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000495 # Verify that dir() catches a non-list returned by eval
496 # SF bug #1004669
497 class C:
498 def __getitem__(self, item):
499 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000500 def keys(self):
501 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000502 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
503
Georg Brandl7cae87c2006-09-06 06:51:57 +0000504 def test_exec(self):
505 g = {}
506 exec('z = 1', g)
507 if '__builtins__' in g:
508 del g['__builtins__']
509 self.assertEqual(g, {'z': 1})
510
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000511 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000512 if '__builtins__' in g:
513 del g['__builtins__']
514 self.assertEqual(g, {'z': 2})
515 g = {}
516 l = {}
517
Brett Cannon77628992010-03-20 20:59:33 +0000518 with check_warnings():
519 warnings.filterwarnings("ignore", "global statement",
520 module="<string>")
521 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000522 if '__builtins__' in g:
523 del g['__builtins__']
524 if '__builtins__' in l:
525 del l['__builtins__']
526 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
527
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000528 def test_exec_redirected(self):
529 savestdout = sys.stdout
530 sys.stdout = None # Whatever that cannot flush()
531 try:
532 # Used to raise SystemError('error return without exception set')
533 exec('a')
534 except NameError:
535 pass
536 finally:
537 sys.stdout = savestdout
538
Walter Dörwald919497e2003-01-19 16:23:59 +0000539 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000540 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
541 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
542 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
543 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
544 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000545 def identity(item):
546 return 1
547 filter(identity, Squares(5))
548 self.assertRaises(TypeError, filter)
549 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000550 def __getitem__(self, index):
551 if index<4:
552 return 42
553 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000554 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000555 def badfunc():
556 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000557 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000558
Walter Dörwaldbf517072003-01-27 15:57:14 +0000559 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000560 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
561 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
562 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000563
Walter Dörwald919497e2003-01-19 16:23:59 +0000564 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000565 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000566 self.assertRaises(TypeError, getattr, sys, 1)
567 self.assertRaises(TypeError, getattr, sys, 1, "foo")
568 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000569 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000570 # unicode surrogates are not encodable to the default encoding (utf8)
571 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000572
573 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000574 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000575 self.assertRaises(TypeError, hasattr, sys, 1)
576 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000577 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000578
Benjamin Peterson17689992010-08-24 03:26:23 +0000579 # Check that hasattr propagates all exceptions outside of
580 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000581 class A:
582 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000583 raise SystemExit
584 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000585 class B:
586 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000587 raise ValueError
588 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000589
Walter Dörwald919497e2003-01-19 16:23:59 +0000590 def test_hash(self):
591 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000592 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000593 self.assertEqual(hash(1), hash(1.0))
594 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000595 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000596 hash((0,1,2,3))
597 def f(): pass
598 self.assertRaises(TypeError, hash, [])
599 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000600 # Bug 1536021: Allow hash to return long objects
601 class X:
602 def __hash__(self):
603 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000604 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000605 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000606 def __hash__(self):
607 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000608 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000609
610 def test_hex(self):
611 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000612 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000613 self.assertRaises(TypeError, hex, {})
614
615 def test_id(self):
616 id(None)
617 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000618 id(1.0)
619 id('spam')
620 id((0,1,2,3))
621 id([0,1,2,3])
622 id({'spam': 1, 'eggs': 2, 'ham': 3})
623
Guido van Rossuma88a0332007-02-26 16:59:55 +0000624 # Test input() later, alphabetized as if it were raw_input
625
Walter Dörwald919497e2003-01-19 16:23:59 +0000626 def test_iter(self):
627 self.assertRaises(TypeError, iter)
628 self.assertRaises(TypeError, iter, 42, 42)
629 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 for l in lists:
631 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000632 self.assertEqual(next(i), '1')
633 self.assertEqual(next(i), '2')
634 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000635
636 def test_isinstance(self):
637 class C:
638 pass
639 class D(C):
640 pass
641 class E:
642 pass
643 c = C()
644 d = D()
645 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000646 self.assertTrue(isinstance(c, C))
647 self.assertTrue(isinstance(d, C))
648 self.assertTrue(not isinstance(e, C))
649 self.assertTrue(not isinstance(c, D))
650 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000651 self.assertRaises(TypeError, isinstance, E, 'foo')
652 self.assertRaises(TypeError, isinstance)
653
654 def test_issubclass(self):
655 class C:
656 pass
657 class D(C):
658 pass
659 class E:
660 pass
661 c = C()
662 d = D()
663 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000664 self.assertTrue(issubclass(D, C))
665 self.assertTrue(issubclass(C, C))
666 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000667 self.assertRaises(TypeError, issubclass, 'foo', E)
668 self.assertRaises(TypeError, issubclass, E, 'foo')
669 self.assertRaises(TypeError, issubclass)
670
671 def test_len(self):
672 self.assertEqual(len('123'), 3)
673 self.assertEqual(len(()), 0)
674 self.assertEqual(len((1, 2, 3, 4)), 4)
675 self.assertEqual(len([1, 2, 3, 4]), 4)
676 self.assertEqual(len({}), 0)
677 self.assertEqual(len({'a':1, 'b': 2}), 2)
678 class BadSeq:
679 def __len__(self):
680 raise ValueError
681 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000682 class InvalidLen:
683 def __len__(self):
684 return None
685 self.assertRaises(TypeError, len, InvalidLen())
686 class FloatLen:
687 def __len__(self):
688 return 4.5
689 self.assertRaises(TypeError, len, FloatLen())
690 class HugeLen:
691 def __len__(self):
692 return sys.maxsize + 1
693 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000694 class NoLenMethod(object): pass
695 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000696
Walter Dörwald919497e2003-01-19 16:23:59 +0000697 def test_map(self):
698 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000699 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000700 [1, 4, 9]
701 )
702 try:
703 from math import sqrt
704 except ImportError:
705 def sqrt(x):
706 return pow(x, 0.5)
707 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000708 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000709 [[4.0, 2.0], [9.0, 3.0]]
710 )
711 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000712 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000713 [10, 4, 6]
714 )
715
716 def plus(*v):
717 accu = 0
718 for i in v: accu = accu + i
719 return accu
720 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000721 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000722 [1, 3, 7]
723 )
724 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000725 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 [1+4, 3+9, 7+2]
727 )
728 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000729 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000730 [1+4+1, 3+9+1, 7+2+0]
731 )
732 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000733 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
735 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000736 def Max(a, b):
737 if a is None:
738 return b
739 if b is None:
740 return a
741 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000742 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000743 list(map(Max, Squares(3), Squares(2))),
744 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000745 )
746 self.assertRaises(TypeError, map)
747 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000748 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000749 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000750 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000751 yield None
752 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000753 def badfunc(x):
754 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000755 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000756
757 def test_max(self):
758 self.assertEqual(max('123123'), '3')
759 self.assertEqual(max(1, 2, 3), 3)
760 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
761 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
762
Guido van Rossume2a383d2007-01-15 16:59:06 +0000763 self.assertEqual(max(1, 2, 3.0), 3.0)
764 self.assertEqual(max(1, 2.0, 3), 3)
765 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000766
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000767 for stmt in (
768 "max(key=int)", # no args
769 "max(1, key=int)", # single arg not iterable
770 "max(1, 2, keystone=int)", # wrong keyword
771 "max(1, 2, key=int, abc=int)", # two many keywords
772 "max(1, 2, key=1)", # keyfunc is not callable
773 ):
Tim Peters7f061872004-12-07 21:17:46 +0000774 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000775 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000776 except TypeError:
777 pass
778 else:
779 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000780
781 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
782 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
783 self.assertEqual(max(1, 2, key=neg), 1) # two elems
784
785 data = [random.randrange(200) for i in range(100)]
786 keys = dict((elem, random.randrange(50)) for elem in data)
787 f = keys.__getitem__
788 self.assertEqual(max(data, key=f),
789 sorted(reversed(data), key=f)[-1])
790
Walter Dörwald919497e2003-01-19 16:23:59 +0000791 def test_min(self):
792 self.assertEqual(min('123123'), '1')
793 self.assertEqual(min(1, 2, 3), 1)
794 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
795 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
796
Guido van Rossume2a383d2007-01-15 16:59:06 +0000797 self.assertEqual(min(1, 2, 3.0), 1)
798 self.assertEqual(min(1, 2.0, 3), 1)
799 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000800
801 self.assertRaises(TypeError, min)
802 self.assertRaises(TypeError, min, 42)
803 self.assertRaises(ValueError, min, ())
804 class BadSeq:
805 def __getitem__(self, index):
806 raise ValueError
807 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000808
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000809 for stmt in (
810 "min(key=int)", # no args
811 "min(1, key=int)", # single arg not iterable
812 "min(1, 2, keystone=int)", # wrong keyword
813 "min(1, 2, key=int, abc=int)", # two many keywords
814 "min(1, 2, key=1)", # keyfunc is not callable
815 ):
Tim Peters7f061872004-12-07 21:17:46 +0000816 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000817 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000818 except TypeError:
819 pass
820 else:
821 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000822
823 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
824 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
825 self.assertEqual(min(1, 2, key=neg), 2) # two elems
826
827 data = [random.randrange(200) for i in range(100)]
828 keys = dict((elem, random.randrange(50)) for elem in data)
829 f = keys.__getitem__
830 self.assertEqual(min(data, key=f),
831 sorted(data, key=f)[0])
832
Georg Brandla18af4e2007-04-21 15:47:16 +0000833 def test_next(self):
834 it = iter(range(2))
835 self.assertEqual(next(it), 0)
836 self.assertEqual(next(it), 1)
837 self.assertRaises(StopIteration, next, it)
838 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000839 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000840
841 class Iter(object):
842 def __iter__(self):
843 return self
844 def __next__(self):
845 raise StopIteration
846
847 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000848 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000849 self.assertRaises(StopIteration, next, it)
850
851 def gen():
852 yield 1
853 return
854
855 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000856 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000857 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000858 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000859
Walter Dörwald919497e2003-01-19 16:23:59 +0000860 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000861 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000862 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000863 self.assertRaises(TypeError, oct, ())
864
865 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000866 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000867 fp = open(TESTFN, 'w')
868 try:
869 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000870 fp.write('The quick brown fox jumps over the lazy dog')
871 fp.write('.\n')
872 fp.write('Dear John\n')
873 fp.write('XXX'*100)
874 fp.write('YYY'*100)
875 finally:
876 fp.close()
877
878 def test_open(self):
879 self.write_testfile()
880 fp = open(TESTFN, 'r')
881 try:
882 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000883 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
884 self.assertEqual(fp.readline(4), 'Dear')
885 self.assertEqual(fp.readline(100), ' John\n')
886 self.assertEqual(fp.read(300), 'XXX'*100)
887 self.assertEqual(fp.read(1000), 'YYY'*100)
888 finally:
889 fp.close()
890 unlink(TESTFN)
891
892 def test_ord(self):
893 self.assertEqual(ord(' '), 32)
894 self.assertEqual(ord('A'), 65)
895 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000896 self.assertEqual(ord('\x80'), 128)
897 self.assertEqual(ord('\xff'), 255)
898
899 self.assertEqual(ord(b' '), 32)
900 self.assertEqual(ord(b'A'), 65)
901 self.assertEqual(ord(b'a'), 97)
902 self.assertEqual(ord(b'\x80'), 128)
903 self.assertEqual(ord(b'\xff'), 255)
904
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000905 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000906 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000907
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000908 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
909 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
910 self.assertEqual(ord("\U00010000"), 0x00010000)
911 self.assertEqual(ord("\U00010001"), 0x00010001)
912 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
913 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
914 self.assertEqual(ord("\U00100000"), 0x00100000)
915 self.assertEqual(ord("\U00100001"), 0x00100001)
916 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
917 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
918
Walter Dörwald919497e2003-01-19 16:23:59 +0000919 def test_pow(self):
920 self.assertEqual(pow(0,0), 1)
921 self.assertEqual(pow(0,1), 0)
922 self.assertEqual(pow(1,0), 1)
923 self.assertEqual(pow(1,1), 1)
924
925 self.assertEqual(pow(2,0), 1)
926 self.assertEqual(pow(2,10), 1024)
927 self.assertEqual(pow(2,20), 1024*1024)
928 self.assertEqual(pow(2,30), 1024*1024*1024)
929
930 self.assertEqual(pow(-2,0), 1)
931 self.assertEqual(pow(-2,1), -2)
932 self.assertEqual(pow(-2,2), 4)
933 self.assertEqual(pow(-2,3), -8)
934
Walter Dörwald919497e2003-01-19 16:23:59 +0000935 self.assertAlmostEqual(pow(0.,0), 1.)
936 self.assertAlmostEqual(pow(0.,1), 0.)
937 self.assertAlmostEqual(pow(1.,0), 1.)
938 self.assertAlmostEqual(pow(1.,1), 1.)
939
940 self.assertAlmostEqual(pow(2.,0), 1.)
941 self.assertAlmostEqual(pow(2.,10), 1024.)
942 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
943 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
944
945 self.assertAlmostEqual(pow(-2.,0), 1.)
946 self.assertAlmostEqual(pow(-2.,1), -2.)
947 self.assertAlmostEqual(pow(-2.,2), 4.)
948 self.assertAlmostEqual(pow(-2.,3), -8.)
949
Mark Dickinson5c2db372009-12-05 20:28:34 +0000950 for x in 2, 2.0:
951 for y in 10, 10.0:
952 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000953 if isinstance(x, float) or \
954 isinstance(y, float) or \
955 isinstance(z, float):
956 self.assertRaises(TypeError, pow, x, y, z)
957 else:
958 self.assertAlmostEqual(pow(x, y, z), 24.0)
959
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000960 self.assertAlmostEqual(pow(-1, 0.5), 1j)
961 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
962
Walter Dörwald919497e2003-01-19 16:23:59 +0000963 self.assertRaises(TypeError, pow, -1, -2, 3)
964 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000965
966 self.assertRaises(TypeError, pow)
967
Guido van Rossuma88a0332007-02-26 16:59:55 +0000968 def test_input(self):
969 self.write_testfile()
970 fp = open(TESTFN, 'r')
971 savestdin = sys.stdin
972 savestdout = sys.stdout # Eats the echo
973 try:
974 sys.stdin = fp
975 sys.stdout = BitBucket()
976 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000977 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
978 self.assertEqual(input('testing\n'), 'Dear John')
979
980 # SF 1535165: don't segfault on closed stdin
981 # sys.stdout must be a regular file for triggering
982 sys.stdout = savestdout
983 sys.stdin.close()
984 self.assertRaises(ValueError, input)
985
986 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000987 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000988 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000989 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000990 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000991 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000992 self.assertRaises(EOFError, input)
993
994 del sys.stdout
995 self.assertRaises(RuntimeError, input, 'prompt')
996 del sys.stdin
997 self.assertRaises(RuntimeError, input, 'prompt')
998 finally:
999 sys.stdin = savestdin
1000 sys.stdout = savestdout
1001 fp.close()
1002 unlink(TESTFN)
1003
Antoine Pitrou413d4972011-11-06 02:51:25 +01001004 @unittest.skipUnless(pty, "the pty and signal modules must be available")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001005 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
Antoine Pitrou1ce4b142011-11-06 03:03:18 +01001006 if not sys.stdin.isatty() or not sys.stdout.isatty():
1007 self.skipTest("stdin and stdout must be ttys")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001008 r, w = os.pipe()
1009 try:
1010 pid, fd = pty.fork()
1011 except (OSError, AttributeError) as e:
1012 os.close(r)
1013 os.close(w)
1014 self.skipTest("pty.fork() raised {}".format(e))
1015 if pid == 0:
1016 # Child
Antoine Pitrou413d4972011-11-06 02:51:25 +01001017 try:
1018 # Make sure we don't get stuck if there's a problem
1019 signal.alarm(2)
1020 os.close(r)
1021 # Check the error handlers are accounted for
1022 if stdio_encoding:
1023 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1024 encoding=stdio_encoding,
1025 errors='surrogateescape')
1026 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1027 encoding=stdio_encoding,
1028 errors='replace')
1029 with open(w, "w") as wpipe:
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001030 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1031 print(ascii(input(prompt)), file=wpipe)
Antoine Pitrou413d4972011-11-06 02:51:25 +01001032 except:
1033 traceback.print_exc()
1034 finally:
1035 # We don't want to return to unittest...
1036 os._exit(0)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001037 # Parent
1038 os.close(w)
1039 os.write(fd, terminal_input + b"\r\n")
1040 # Get results from the pipe
1041 with open(r, "r") as rpipe:
1042 lines = []
1043 while True:
1044 line = rpipe.readline().strip()
Antoine Pitrou413d4972011-11-06 02:51:25 +01001045 if line == "":
1046 # The other end was closed => the child exited
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001047 break
1048 lines.append(line)
Antoine Pitrou413d4972011-11-06 02:51:25 +01001049 # Check the result was got and corresponds to the user's terminal input
1050 if len(lines) != 2:
1051 # Something went wrong, try to get at stderr
1052 with open(fd, "r", encoding="ascii", errors="ignore") as child_output:
1053 self.fail("got %d lines in pipe but expected 2, child output was:\n%s"
1054 % (len(lines), child_output.read()))
1055 os.close(fd)
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001056 # Check we did exercise the GNU readline path
1057 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1058 if lines[0] != 'tty = True':
1059 self.skipTest("standard IO in should have been a tty")
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001060 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1061 if stdio_encoding:
1062 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1063 else:
1064 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1065 self.assertEqual(input_result, expected)
1066
1067 def test_input_tty(self):
1068 # Test input() functionality when wired to a tty (the code path
1069 # is different and invokes GNU readline if available).
1070 self.check_input_tty("prompt", b"quux")
1071
1072 def test_input_tty_non_ascii(self):
1073 # Check stdin/stdout encoding is used when invoking GNU readline
1074 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1075
1076 def test_input_tty_non_ascii_unicode_errors(self):
1077 # Check stdin/stdout error handler is used when invoking GNU readline
1078 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1079
Walter Dörwald919497e2003-01-19 16:23:59 +00001080 def test_repr(self):
1081 self.assertEqual(repr(''), '\'\'')
1082 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001083 self.assertEqual(repr(()), '()')
1084 self.assertEqual(repr([]), '[]')
1085 self.assertEqual(repr({}), '{}')
1086 a = []
1087 a.append(a)
1088 self.assertEqual(repr(a), '[[...]]')
1089 a = {}
1090 a[0] = a
1091 self.assertEqual(repr(a), '{0: {...}}')
1092
1093 def test_round(self):
1094 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001095 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001096 self.assertEqual(round(1.0), 1.0)
1097 self.assertEqual(round(10.0), 10.0)
1098 self.assertEqual(round(1000000000.0), 1000000000.0)
1099 self.assertEqual(round(1e20), 1e20)
1100
1101 self.assertEqual(round(-1.0), -1.0)
1102 self.assertEqual(round(-10.0), -10.0)
1103 self.assertEqual(round(-1000000000.0), -1000000000.0)
1104 self.assertEqual(round(-1e20), -1e20)
1105
1106 self.assertEqual(round(0.1), 0.0)
1107 self.assertEqual(round(1.1), 1.0)
1108 self.assertEqual(round(10.1), 10.0)
1109 self.assertEqual(round(1000000000.1), 1000000000.0)
1110
1111 self.assertEqual(round(-1.1), -1.0)
1112 self.assertEqual(round(-10.1), -10.0)
1113 self.assertEqual(round(-1000000000.1), -1000000000.0)
1114
1115 self.assertEqual(round(0.9), 1.0)
1116 self.assertEqual(round(9.9), 10.0)
1117 self.assertEqual(round(999999999.9), 1000000000.0)
1118
1119 self.assertEqual(round(-0.9), -1.0)
1120 self.assertEqual(round(-9.9), -10.0)
1121 self.assertEqual(round(-999999999.9), -1000000000.0)
1122
1123 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001124 self.assertEqual(type(round(-8.0, -1)), float)
1125
1126 self.assertEqual(type(round(-8.0, 0)), float)
1127 self.assertEqual(type(round(-8.0, 1)), float)
1128
1129 # Check even / odd rounding behaviour
1130 self.assertEqual(round(5.5), 6)
1131 self.assertEqual(round(6.5), 6)
1132 self.assertEqual(round(-5.5), -6)
1133 self.assertEqual(round(-6.5), -6)
1134
1135 # Check behavior on ints
1136 self.assertEqual(round(0), 0)
1137 self.assertEqual(round(8), 8)
1138 self.assertEqual(round(-8), -8)
1139 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001140 self.assertEqual(type(round(-8, -1)), int)
1141 self.assertEqual(type(round(-8, 0)), int)
1142 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001143
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001144 # test new kwargs
1145 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1146
Walter Dörwald919497e2003-01-19 16:23:59 +00001147 self.assertRaises(TypeError, round)
1148
Alex Martelliae211f92007-08-22 23:21:33 +00001149 # test generic rounding delegation for reals
1150 class TestRound:
1151 def __round__(self):
1152 return 23
1153
1154 class TestNoRound:
1155 pass
1156
1157 self.assertEqual(round(TestRound()), 23)
1158
1159 self.assertRaises(TypeError, round, 1, 2, 3)
1160 self.assertRaises(TypeError, round, TestNoRound())
1161
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001162 t = TestNoRound()
1163 t.__round__ = lambda *args: args
1164 self.assertRaises(TypeError, round, t)
1165 self.assertRaises(TypeError, round, t, 0)
1166
Mark Dickinsonad731b92009-11-09 17:12:30 +00001167 # Some versions of glibc for alpha have a bug that affects
1168 # float -> integer rounding (floor, ceil, rint, round) for
1169 # values in the range [2**52, 2**53). See:
1170 #
1171 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1172 #
1173 # We skip this test on Linux/alpha if it would fail.
1174 linux_alpha = (platform.system().startswith('Linux') and
1175 platform.machine().startswith('alpha'))
1176 system_round_bug = round(5e15+1) != 5e15+1
1177 @unittest.skipIf(linux_alpha and system_round_bug,
1178 "test will fail; failure is probably due to a "
1179 "buggy system round function")
1180 def test_round_large(self):
1181 # Issue #1869: integral floats should remain unchanged
1182 self.assertEqual(round(5e15-1), 5e15-1)
1183 self.assertEqual(round(5e15), 5e15)
1184 self.assertEqual(round(5e15+1), 5e15+1)
1185 self.assertEqual(round(5e15+2), 5e15+2)
1186 self.assertEqual(round(5e15+3), 5e15+3)
1187
Walter Dörwald919497e2003-01-19 16:23:59 +00001188 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001189 setattr(sys, 'spam', 1)
1190 self.assertEqual(sys.spam, 1)
1191 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1192 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001193
Chris Jerdonek17fc44c2012-11-20 17:31:02 -08001194 # test_str(): see test_unicode.py and test_bytes.py for str() tests.
Walter Dörwald919497e2003-01-19 16:23:59 +00001195
Alex Martellia70b1912003-04-22 08:12:33 +00001196 def test_sum(self):
1197 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001198 self.assertEqual(sum(list(range(2,8))), 27)
1199 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001200 self.assertEqual(sum(Squares(10)), 285)
1201 self.assertEqual(sum(iter(Squares(10))), 285)
1202 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1203
1204 self.assertRaises(TypeError, sum)
1205 self.assertRaises(TypeError, sum, 42)
1206 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1207 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
1208 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1209 self.assertRaises(TypeError, sum, [{2:3}])
1210 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1211
1212 class BadSeq:
1213 def __getitem__(self, index):
1214 raise ValueError
1215 self.assertRaises(ValueError, sum, BadSeq())
1216
Mark Dickinson3a22b472009-10-17 21:48:16 +00001217 empty = []
1218 sum(([x] for x in range(10)), empty)
1219 self.assertEqual(empty, [])
1220
Walter Dörwald919497e2003-01-19 16:23:59 +00001221 def test_type(self):
1222 self.assertEqual(type(''), type('123'))
1223 self.assertNotEqual(type(''), type(()))
1224
Guido van Rossumfee7b932005-01-16 00:21:28 +00001225 # We don't want self in vars(), so these are static methods
1226
1227 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001228 def get_vars_f0():
1229 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001230
Guido van Rossumfee7b932005-01-16 00:21:28 +00001231 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001232 def get_vars_f2():
1233 BuiltinTest.get_vars_f0()
1234 a = 1
1235 b = 2
1236 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001237
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001238 class C_get_vars(object):
1239 def getDict(self):
1240 return {'a':2}
1241 __dict__ = property(fget=getDict)
1242
Walter Dörwald919497e2003-01-19 16:23:59 +00001243 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001244 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001245 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001246 self.assertEqual(self.get_vars_f0(), {})
1247 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1248 self.assertRaises(TypeError, vars, 42, 42)
1249 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001250 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001251
1252 def test_zip(self):
1253 a = (1, 2, 3)
1254 b = (4, 5, 6)
1255 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001256 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001257 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001258 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001259 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001260 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001261 class I:
1262 def __getitem__(self, i):
1263 if i < 0 or i > 2: raise IndexError
1264 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001265 self.assertEqual(list(zip(a, I())), t)
1266 self.assertEqual(list(zip()), [])
1267 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001268 self.assertRaises(TypeError, zip, None)
1269 class G:
1270 pass
1271 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001272 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001273
1274 # Make sure zip doesn't try to allocate a billion elements for the
1275 # result list when one of its arguments doesn't say how long it is.
1276 # A MemoryError is the most likely failure mode.
1277 class SequenceWithoutALength:
1278 def __getitem__(self, i):
1279 if i == 5:
1280 raise IndexError
1281 else:
1282 return i
1283 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001284 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001285 list(enumerate(range(5)))
1286 )
1287
1288 class BadSeq:
1289 def __getitem__(self, i):
1290 if i == 5:
1291 raise ValueError
1292 else:
1293 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001294 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001295
Eric Smithe4d63172010-09-13 20:48:43 +00001296 def test_format(self):
1297 # Test the basic machinery of the format() builtin. Don't test
1298 # the specifics of the various formatters
1299 self.assertEqual(format(3, ''), '3')
1300
1301 # Returns some classes to use for various tests. There's
1302 # an old-style version, and a new-style version
1303 def classes_new():
1304 class A(object):
1305 def __init__(self, x):
1306 self.x = x
1307 def __format__(self, format_spec):
1308 return str(self.x) + format_spec
1309 class DerivedFromA(A):
1310 pass
1311
1312 class Simple(object): pass
1313 class DerivedFromSimple(Simple):
1314 def __init__(self, x):
1315 self.x = x
1316 def __format__(self, format_spec):
1317 return str(self.x) + format_spec
1318 class DerivedFromSimple2(DerivedFromSimple): pass
1319 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1320
1321 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1322 self.assertEqual(format(A(3), 'spec'), '3spec')
1323 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1324 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1325 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1326 '10abcdef')
1327
1328 class_test(*classes_new())
1329
1330 def empty_format_spec(value):
1331 # test that:
1332 # format(x, '') == str(x)
1333 # format(x) == str(x)
1334 self.assertEqual(format(value, ""), str(value))
1335 self.assertEqual(format(value), str(value))
1336
1337 # for builtin types, format(x, "") == str(x)
1338 empty_format_spec(17**13)
1339 empty_format_spec(1.0)
1340 empty_format_spec(3.1415e104)
1341 empty_format_spec(-3.1415e104)
1342 empty_format_spec(3.1415e-104)
1343 empty_format_spec(-3.1415e-104)
1344 empty_format_spec(object)
1345 empty_format_spec(None)
1346
1347 # TypeError because self.__format__ returns the wrong type
1348 class BadFormatResult:
1349 def __format__(self, format_spec):
1350 return 1.0
1351 self.assertRaises(TypeError, format, BadFormatResult(), "")
1352
1353 # TypeError because format_spec is not unicode or str
1354 self.assertRaises(TypeError, format, object(), 4)
1355 self.assertRaises(TypeError, format, object(), object())
1356
1357 # tests for object.__format__ really belong elsewhere, but
1358 # there's no good place to put them
1359 x = object().__format__('')
1360 self.assertTrue(x.startswith('<object object at'))
1361
1362 # first argument to object.__format__ must be string
1363 self.assertRaises(TypeError, object().__format__, 3)
1364 self.assertRaises(TypeError, object().__format__, object())
1365 self.assertRaises(TypeError, object().__format__, None)
1366
1367 # --------------------------------------------------------------------
1368 # Issue #7994: object.__format__ with a non-empty format string is
1369 # pending deprecated
1370 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1371 with warnings.catch_warnings(record=True) as w:
1372 warnings.simplefilter("always", PendingDeprecationWarning)
1373 format(obj, fmt_str)
1374 if should_raise_warning:
1375 self.assertEqual(len(w), 1)
1376 self.assertIsInstance(w[0].message, PendingDeprecationWarning)
1377 self.assertIn('object.__format__ with a non-empty format '
1378 'string', str(w[0].message))
1379 else:
1380 self.assertEqual(len(w), 0)
1381
1382 fmt_strs = ['', 's']
1383
1384 class A:
1385 def __format__(self, fmt_str):
1386 return format('', fmt_str)
1387
1388 for fmt_str in fmt_strs:
1389 test_deprecated_format_string(A(), fmt_str, False)
1390
1391 class B:
1392 pass
1393
1394 class C(object):
1395 pass
1396
1397 for cls in [object, B, C]:
1398 for fmt_str in fmt_strs:
1399 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1400 # --------------------------------------------------------------------
1401
1402 # make sure we can take a subclass of str as a format spec
1403 class DerivedFromStr(str): pass
1404 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1405
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001406 def test_bin(self):
1407 self.assertEqual(bin(0), '0b0')
1408 self.assertEqual(bin(1), '0b1')
1409 self.assertEqual(bin(-1), '-0b1')
1410 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1411 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1412 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1413 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1414
Georg Brandl953152f2009-07-22 12:03:59 +00001415 def test_bytearray_translate(self):
1416 x = bytearray(b"abc")
1417 self.assertRaises(ValueError, x.translate, b"1", 1)
1418 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1419
Raymond Hettinger64958a12003-12-17 20:43:33 +00001420class TestSorted(unittest.TestCase):
1421
1422 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001423 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001424 copy = data[:]
1425 random.shuffle(copy)
1426 self.assertEqual(data, sorted(copy))
1427 self.assertNotEqual(data, copy)
1428
1429 data.reverse()
1430 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001431 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1432 self.assertNotEqual(data, copy)
1433 random.shuffle(copy)
1434 self.assertEqual(data, sorted(copy, reverse=1))
1435 self.assertNotEqual(data, copy)
1436
1437 def test_inputtypes(self):
1438 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001439 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001440 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001441 self.assertEqual(sorted(s), sorted(T(s)))
1442
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001443 s = ''.join(set(s)) # unique letters only
1444 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001445 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001446 self.assertEqual(sorted(s), sorted(T(s)))
1447
1448 def test_baddecorator(self):
1449 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1450 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1451
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001452def test_main(verbose=None):
1453 test_classes = (BuiltinTest, TestSorted)
1454
1455 run_unittest(*test_classes)
1456
1457 # verify reference counting
1458 if verbose and hasattr(sys, "gettotalrefcount"):
1459 import gc
1460 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001461 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001462 run_unittest(*test_classes)
1463 gc.collect()
1464 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001465 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001466
Walter Dörwald919497e2003-01-19 16:23:59 +00001467
1468if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001469 test_main(verbose=True)