blob: d4e293cee2a88fd4f374860d8f5ecbac6c0c15d2 [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
Eli Bendersky67ebabd2011-02-25 10:14:17 +000014from test.support import TESTFN, unlink, run_unittest, check_warnings
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +000015from operator import neg
Antoine Pitrou0d776b12011-11-06 00:34:26 +010016try:
17 import pty
18except ImportError:
19 pty = None
Guido van Rossum3bead091992-01-27 17:00:37 +000020
Guido van Rossum3bead091992-01-27 17:00:37 +000021
Walter Dörwald919497e2003-01-19 16:23:59 +000022class Squares:
Guido van Rossum3bead091992-01-27 17:00:37 +000023
Walter Dörwald919497e2003-01-19 16:23:59 +000024 def __init__(self, max):
25 self.max = max
26 self.sofar = []
27
28 def __len__(self): return len(self.sofar)
29
30 def __getitem__(self, i):
31 if not 0 <= i < self.max: raise IndexError
32 n = len(self.sofar)
33 while n <= i:
34 self.sofar.append(n*n)
35 n += 1
36 return self.sofar[i]
37
38class StrSquares:
39
40 def __init__(self, max):
41 self.max = max
42 self.sofar = []
43
44 def __len__(self):
45 return len(self.sofar)
46
47 def __getitem__(self, i):
48 if not 0 <= i < self.max:
49 raise IndexError
50 n = len(self.sofar)
51 while n <= i:
52 self.sofar.append(str(n*n))
53 n += 1
54 return self.sofar[i]
55
56class BitBucket:
57 def write(self, line):
58 pass
59
Facundo Batista2336bdd2008-01-19 19:12:01 +000060test_conv_no_sign = [
Walter Dörwald919497e2003-01-19 16:23:59 +000061 ('0', 0),
62 ('1', 1),
63 ('9', 9),
64 ('10', 10),
65 ('99', 99),
66 ('100', 100),
67 ('314', 314),
68 (' 314', 314),
69 ('314 ', 314),
70 (' \t\t 314 \t\t ', 314),
Christian Heimesa37d4c62007-12-04 23:02:19 +000071 (repr(sys.maxsize), sys.maxsize),
Walter Dörwald919497e2003-01-19 16:23:59 +000072 (' 1x', ValueError),
73 (' 1 ', 1),
74 (' 1\02 ', ValueError),
75 ('', ValueError),
76 (' ', ValueError),
Walter Dörwald1f5947b2007-05-22 16:52:54 +000077 (' \t\t ', ValueError),
Guido van Rossumef87d6e2007-05-02 19:09:54 +000078 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
Guido van Rossum84fc66d2007-05-03 17:18:26 +000079 (chr(0x200), ValueError),
Walter Dörwald919497e2003-01-19 16:23:59 +000080]
81
Facundo Batista2336bdd2008-01-19 19:12:01 +000082test_conv_sign = [
83 ('0', 0),
84 ('1', 1),
85 ('9', 9),
86 ('10', 10),
87 ('99', 99),
88 ('100', 100),
89 ('314', 314),
90 (' 314', ValueError),
91 ('314 ', 314),
92 (' \t\t 314 \t\t ', ValueError),
93 (repr(sys.maxsize), sys.maxsize),
94 (' 1x', ValueError),
95 (' 1 ', ValueError),
96 (' 1\02 ', ValueError),
97 ('', ValueError),
98 (' ', ValueError),
99 (' \t\t ', ValueError),
100 (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
101 (chr(0x200), ValueError),
102]
103
Raymond Hettinger96229b12005-03-11 06:49:40 +0000104class TestFailingBool:
Jack Diederich4dafcc42006-11-28 19:15:13 +0000105 def __bool__(self):
Raymond Hettinger96229b12005-03-11 06:49:40 +0000106 raise RuntimeError
107
108class TestFailingIter:
109 def __iter__(self):
110 raise RuntimeError
111
Walter Dörwald919497e2003-01-19 16:23:59 +0000112class BuiltinTest(unittest.TestCase):
113
114 def test_import(self):
115 __import__('sys')
116 __import__('time')
117 __import__('string')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000118 __import__(name='sys')
119 __import__(name='time', level=0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000120 self.assertRaises(ImportError, __import__, 'spamspam')
121 self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000122 self.assertRaises(ValueError, __import__, '')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000123 self.assertRaises(TypeError, __import__, 'sys', name='sys')
Walter Dörwald919497e2003-01-19 16:23:59 +0000124
125 def test_abs(self):
126 # int
127 self.assertEqual(abs(0), 0)
128 self.assertEqual(abs(1234), 1234)
129 self.assertEqual(abs(-1234), 1234)
Christian Heimesa37d4c62007-12-04 23:02:19 +0000130 self.assertTrue(abs(-sys.maxsize-1) > 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000131 # float
132 self.assertEqual(abs(0.0), 0.0)
133 self.assertEqual(abs(3.14), 3.14)
134 self.assertEqual(abs(-3.14), 3.14)
Walter Dörwald919497e2003-01-19 16:23:59 +0000135 # str
136 self.assertRaises(TypeError, abs, 'a')
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000137 # bool
138 self.assertEqual(abs(True), 1)
139 self.assertEqual(abs(False), 0)
140 # other
141 self.assertRaises(TypeError, abs)
142 self.assertRaises(TypeError, abs, None)
143 class AbsClass(object):
144 def __abs__(self):
145 return -5
146 self.assertEqual(abs(AbsClass()), -5)
Walter Dörwald919497e2003-01-19 16:23:59 +0000147
Raymond Hettinger96229b12005-03-11 06:49:40 +0000148 def test_all(self):
149 self.assertEqual(all([2, 4, 6]), True)
150 self.assertEqual(all([2, None, 6]), False)
151 self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
152 self.assertRaises(RuntimeError, all, TestFailingIter())
153 self.assertRaises(TypeError, all, 10) # Non-iterable
154 self.assertRaises(TypeError, all) # No args
155 self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
156 self.assertEqual(all([]), True) # Empty iterator
157 S = [50, 60]
158 self.assertEqual(all(x > 42 for x in S), True)
159 S = [50, 40, 60]
160 self.assertEqual(all(x > 42 for x in S), False)
161
162 def test_any(self):
163 self.assertEqual(any([None, None, None]), False)
164 self.assertEqual(any([None, 4, None]), True)
165 self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
166 self.assertRaises(RuntimeError, all, TestFailingIter())
167 self.assertRaises(TypeError, any, 10) # Non-iterable
168 self.assertRaises(TypeError, any) # No args
169 self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
170 self.assertEqual(any([]), False) # Empty iterator
171 S = [40, 60, 30]
172 self.assertEqual(any(x > 42 for x in S), True)
173 S = [10, 20, 30]
174 self.assertEqual(any(x > 42 for x in S), False)
175
Georg Brandl559e5d72008-06-11 18:37:52 +0000176 def test_ascii(self):
177 self.assertEqual(ascii(''), '\'\'')
178 self.assertEqual(ascii(0), '0')
Georg Brandl559e5d72008-06-11 18:37:52 +0000179 self.assertEqual(ascii(()), '()')
180 self.assertEqual(ascii([]), '[]')
181 self.assertEqual(ascii({}), '{}')
182 a = []
183 a.append(a)
184 self.assertEqual(ascii(a), '[[...]]')
185 a = {}
186 a[0] = a
187 self.assertEqual(ascii(a), '{0: {...}}')
Antoine Pitroue4a18922010-09-09 20:30:23 +0000188 # Advanced checks for unicode strings
189 def _check_uni(s):
190 self.assertEqual(ascii(s), repr(s))
191 _check_uni("'")
192 _check_uni('"')
193 _check_uni('"\'')
194 _check_uni('\0')
195 _check_uni('\r\n\t .')
196 # Unprintable non-ASCII characters
197 _check_uni('\x85')
198 _check_uni('\u1fff')
199 _check_uni('\U00012fff')
200 # Lone surrogates
201 _check_uni('\ud800')
202 _check_uni('\udfff')
203 # Issue #9804: surrogates should be joined even for printable
204 # wide characters (UCS-2 builds).
205 self.assertEqual(ascii('\U0001d121'), "'\\U0001d121'")
206 # All together
207 s = "'\0\"\n\r\t abcd\x85é\U00012fff\uD800\U0001D121xxx."
208 self.assertEqual(ascii(s),
209 r"""'\'\x00"\n\r\t abcd\x85\xe9\U00012fff\ud800\U0001d121xxx.'""")
Georg Brandl559e5d72008-06-11 18:37:52 +0000210
Thomas Wouters89f507f2006-12-13 04:49:30 +0000211 def test_neg(self):
Christian Heimesa37d4c62007-12-04 23:02:19 +0000212 x = -sys.maxsize-1
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000213 self.assertTrue(isinstance(x, int))
Christian Heimesa37d4c62007-12-04 23:02:19 +0000214 self.assertEqual(-x, sys.maxsize+1)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000215
Walter Dörwald919497e2003-01-19 16:23:59 +0000216 def test_callable(self):
Antoine Pitroue71362d2010-11-27 22:00:11 +0000217 self.assertTrue(callable(len))
218 self.assertFalse(callable("a"))
219 self.assertTrue(callable(callable))
220 self.assertTrue(callable(lambda x, y: x + y))
221 self.assertFalse(callable(__builtins__))
Walter Dörwald919497e2003-01-19 16:23:59 +0000222 def f(): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000223 self.assertTrue(callable(f))
224
225 class C1:
Walter Dörwald919497e2003-01-19 16:23:59 +0000226 def meth(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000227 self.assertTrue(callable(C1))
228 c = C1()
229 self.assertTrue(callable(c.meth))
230 self.assertFalse(callable(c))
231
232 # __call__ is looked up on the class, not the instance
233 c.__call__ = None
234 self.assertFalse(callable(c))
235 c.__call__ = lambda self: 0
236 self.assertFalse(callable(c))
237 del c.__call__
238 self.assertFalse(callable(c))
239
240 class C2(object):
Walter Dörwald919497e2003-01-19 16:23:59 +0000241 def __call__(self): pass
Antoine Pitroue71362d2010-11-27 22:00:11 +0000242 c2 = C2()
243 self.assertTrue(callable(c2))
244 c2.__call__ = None
245 self.assertTrue(callable(c2))
246 class C3(C2): pass
247 c3 = C3()
248 self.assertTrue(callable(c3))
Walter Dörwald919497e2003-01-19 16:23:59 +0000249
250 def test_chr(self):
251 self.assertEqual(chr(32), ' ')
252 self.assertEqual(chr(65), 'A')
253 self.assertEqual(chr(97), 'a')
254 self.assertEqual(chr(0xff), '\xff')
Guido van Rossum572dbf82007-04-27 23:53:51 +0000255 self.assertRaises(ValueError, chr, 1<<24)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000256 self.assertEqual(chr(sys.maxunicode),
Ezio Melottia9860ae2011-10-04 19:06:00 +0300257 str('\\U0010ffff'.encode("ascii"), 'unicode-escape'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000258 self.assertRaises(TypeError, chr)
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000259 self.assertEqual(chr(0x0000FFFF), "\U0000FFFF")
260 self.assertEqual(chr(0x00010000), "\U00010000")
261 self.assertEqual(chr(0x00010001), "\U00010001")
262 self.assertEqual(chr(0x000FFFFE), "\U000FFFFE")
263 self.assertEqual(chr(0x000FFFFF), "\U000FFFFF")
264 self.assertEqual(chr(0x00100000), "\U00100000")
265 self.assertEqual(chr(0x00100001), "\U00100001")
266 self.assertEqual(chr(0x0010FFFE), "\U0010FFFE")
267 self.assertEqual(chr(0x0010FFFF), "\U0010FFFF")
268 self.assertRaises(ValueError, chr, -1)
269 self.assertRaises(ValueError, chr, 0x00110000)
Amaury Forgeot d'Arc7888d082008-08-01 01:06:32 +0000270 self.assertRaises((OverflowError, ValueError), chr, 2**32)
Walter Dörwald919497e2003-01-19 16:23:59 +0000271
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000272 def test_cmp(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000273 self.assertTrue(not hasattr(builtins, "cmp"))
Walter Dörwald919497e2003-01-19 16:23:59 +0000274
Walter Dörwald919497e2003-01-19 16:23:59 +0000275 def test_compile(self):
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000276 compile('print(1)\n', '', 'exec')
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000277 bom = b'\xef\xbb\xbf'
278 compile(bom + b'print(1)\n', '', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000279 compile(source='pass', filename='?', mode='exec')
280 compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
281 compile('pass', '?', dont_inherit=1, mode='exec')
Benjamin Peterson60320cb2008-09-26 21:49:22 +0000282 compile(memoryview(b"text"), "name", "exec")
Walter Dörwald919497e2003-01-19 16:23:59 +0000283 self.assertRaises(TypeError, compile)
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000284 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
285 self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
Neal Norwitzfcf44352005-11-27 20:37:43 +0000286 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000287 self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
288 mode='eval', source='0', filename='tmp')
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000289 compile('print("\xe5")\n', '', 'exec')
290 self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
291 self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad')
Guido van Rossumd8faa362007-04-27 19:54:29 +0000292
Georg Brandl8334fd92010-12-04 10:26:46 +0000293 # test the optimize argument
294
295 codestr = '''def f():
296 """doc"""
297 try:
298 assert False
299 except AssertionError:
300 return (True, f.__doc__)
301 else:
302 return (False, f.__doc__)
303 '''
304 def f(): """doc"""
305 values = [(-1, __debug__, f.__doc__),
306 (0, True, 'doc'),
307 (1, False, 'doc'),
308 (2, False, None)]
309 for optval, debugval, docstring in values:
310 # test both direct compilation and compilation via AST
311 codeobjs = []
312 codeobjs.append(compile(codestr, "<test>", "exec", optimize=optval))
313 tree = ast.parse(codestr)
314 codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
315 for code in codeobjs:
316 ns = {}
317 exec(code, ns)
318 rv = ns['f']()
319 self.assertEqual(rv, (debugval, docstring))
320
Walter Dörwald919497e2003-01-19 16:23:59 +0000321 def test_delattr(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000322 sys.spam = 1
323 delattr(sys, 'spam')
324 self.assertRaises(TypeError, delattr)
325
326 def test_dir(self):
Georg Brandle32b4222007-03-10 22:13:27 +0000327 # dir(wrong number of arguments)
Walter Dörwald919497e2003-01-19 16:23:59 +0000328 self.assertRaises(TypeError, dir, 42, 42)
329
Georg Brandle32b4222007-03-10 22:13:27 +0000330 # dir() - local scope
331 local_var = 1
Benjamin Peterson577473f2010-01-19 00:09:57 +0000332 self.assertIn('local_var', dir())
Georg Brandle32b4222007-03-10 22:13:27 +0000333
334 # dir(module)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000335 self.assertIn('exit', dir(sys))
Georg Brandle32b4222007-03-10 22:13:27 +0000336
337 # dir(module_with_invalid__dict__)
Georg Brandle32b4222007-03-10 22:13:27 +0000338 class Foo(types.ModuleType):
339 __dict__ = 8
340 f = Foo("foo")
341 self.assertRaises(TypeError, dir, f)
342
343 # dir(type)
Benjamin Peterson577473f2010-01-19 00:09:57 +0000344 self.assertIn("strip", dir(str))
345 self.assertNotIn("__mro__", dir(str))
Georg Brandle32b4222007-03-10 22:13:27 +0000346
347 # dir(obj)
348 class Foo(object):
349 def __init__(self):
350 self.x = 7
351 self.y = 8
352 self.z = 9
353 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000354 self.assertIn("y", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000355
356 # dir(obj_no__dict__)
357 class Foo(object):
358 __slots__ = []
359 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000360 self.assertIn("__repr__", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000361
362 # dir(obj_no__class__with__dict__)
363 # (an ugly trick to cause getattr(f, "__class__") to fail)
364 class Foo(object):
365 __slots__ = ["__class__", "__dict__"]
366 def __init__(self):
367 self.bar = "wow"
368 f = Foo()
Benjamin Peterson577473f2010-01-19 00:09:57 +0000369 self.assertNotIn("__repr__", dir(f))
370 self.assertIn("bar", dir(f))
Georg Brandle32b4222007-03-10 22:13:27 +0000371
372 # dir(obj_using __dir__)
373 class Foo(object):
374 def __dir__(self):
375 return ["kan", "ga", "roo"]
376 f = Foo()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000377 self.assertTrue(dir(f) == ["ga", "kan", "roo"])
Georg Brandle32b4222007-03-10 22:13:27 +0000378
Benjamin Peterson3bbb7222011-06-11 16:12:08 -0500379 # dir(obj__dir__tuple)
380 class Foo(object):
381 def __dir__(self):
382 return ("b", "c", "a")
383 res = dir(Foo())
384 self.assertIsInstance(res, list)
385 self.assertTrue(res == ["a", "b", "c"])
386
387 # dir(obj__dir__not_sequence)
Georg Brandle32b4222007-03-10 22:13:27 +0000388 class Foo(object):
389 def __dir__(self):
390 return 7
391 f = Foo()
392 self.assertRaises(TypeError, dir, f)
393
Collin Winter3eed7652007-08-14 17:53:54 +0000394 # dir(traceback)
395 try:
396 raise IndexError
397 except:
398 self.assertEqual(len(dir(sys.exc_info()[2])), 4)
399
Benjamin Petersondac9ace2011-05-25 09:33:37 -0500400 # test that object has a __dir__()
401 self.assertEqual(sorted([].__dir__()), dir([]))
Collin Winter3eed7652007-08-14 17:53:54 +0000402
Walter Dörwald919497e2003-01-19 16:23:59 +0000403 def test_divmod(self):
404 self.assertEqual(divmod(12, 7), (1, 5))
405 self.assertEqual(divmod(-12, 7), (-2, 2))
406 self.assertEqual(divmod(12, -7), (-2, -2))
407 self.assertEqual(divmod(-12, -7), (1, -5))
408
Mark Dickinson5c2db372009-12-05 20:28:34 +0000409 self.assertEqual(divmod(-sys.maxsize-1, -1), (sys.maxsize+1, 0))
Raymond Hettinger5ea7e312004-09-30 07:47:20 +0000410
Eli Bendersky67ebabd2011-02-25 10:14:17 +0000411 for num, denom, exp_result in [ (3.25, 1.0, (3.0, 0.25)),
412 (-3.25, 1.0, (-4.0, 0.75)),
413 (3.25, -1.0, (-4.0, -0.75)),
414 (-3.25, -1.0, (3.0, -0.25))]:
415 result = divmod(num, denom)
416 self.assertAlmostEqual(result[0], exp_result[0])
417 self.assertAlmostEqual(result[1], exp_result[1])
Walter Dörwald919497e2003-01-19 16:23:59 +0000418
419 self.assertRaises(TypeError, divmod)
420
421 def test_eval(self):
422 self.assertEqual(eval('1+1'), 2)
423 self.assertEqual(eval(' 1+1\n'), 2)
424 globals = {'a': 1, 'b': 2}
425 locals = {'b': 200, 'c': 300}
426 self.assertEqual(eval('a', globals) , 1)
427 self.assertEqual(eval('a', globals, locals), 1)
428 self.assertEqual(eval('b', globals, locals), 200)
429 self.assertEqual(eval('c', globals, locals), 300)
Walter Dörwald919497e2003-01-19 16:23:59 +0000430 globals = {'a': 1, 'b': 2}
431 locals = {'b': 200, 'c': 300}
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000432 bom = b'\xef\xbb\xbf'
433 self.assertEqual(eval(bom + b'a', globals, locals), 1)
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000434 self.assertEqual(eval('"\xe5"', globals), "\xe5")
Walter Dörwald919497e2003-01-19 16:23:59 +0000435 self.assertRaises(TypeError, eval)
436 self.assertRaises(TypeError, eval, ())
Amaury Forgeot d'Arcaf593462007-11-22 20:53:01 +0000437 self.assertRaises(SyntaxError, eval, bom[:2] + b'a')
Walter Dörwald919497e2003-01-19 16:23:59 +0000438
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000439 def test_general_eval(self):
440 # Tests that general mappings can be used for the locals argument
441
442 class M:
443 "Test mapping interface versus possible calls from eval()."
444 def __getitem__(self, key):
445 if key == 'a':
446 return 12
447 raise KeyError
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000448 def keys(self):
449 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000450
451 m = M()
452 g = globals()
453 self.assertEqual(eval('a', g, m), 12)
454 self.assertRaises(NameError, eval, 'b', g, m)
455 self.assertEqual(eval('dir()', g, m), list('xyz'))
456 self.assertEqual(eval('globals()', g, m), g)
457 self.assertEqual(eval('locals()', g, m), m)
Raymond Hettinger513ffe82004-07-06 13:44:41 +0000458 self.assertRaises(TypeError, eval, 'a', m)
Raymond Hettinger66bd2332004-08-02 08:30:07 +0000459 class A:
460 "Non-mapping"
461 pass
462 m = A()
463 self.assertRaises(TypeError, eval, 'a', g, m)
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000464
465 # Verify that dict subclasses work as well
466 class D(dict):
467 def __getitem__(self, key):
468 if key == 'a':
469 return 12
470 return dict.__getitem__(self, key)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000471 def keys(self):
472 return list('xyz')
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000473
474 d = D()
475 self.assertEqual(eval('a', g, d), 12)
476 self.assertRaises(NameError, eval, 'b', g, d)
477 self.assertEqual(eval('dir()', g, d), list('xyz'))
478 self.assertEqual(eval('globals()', g, d), g)
479 self.assertEqual(eval('locals()', g, d), d)
480
481 # Verify locals stores (used by list comps)
482 eval('[locals() for i in (2,3)]', g, d)
Raymond Hettingerf80680d2008-02-06 00:07:11 +0000483 eval('[locals() for i in (2,3)]', g, collections.UserDict())
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000484
485 class SpreadSheet:
486 "Sample application showing nested, calculated lookups."
487 _cells = {}
488 def __setitem__(self, key, formula):
489 self._cells[key] = formula
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000490 def __getitem__(self, key):
Raymond Hettinger214b1c32004-07-02 06:41:07 +0000491 return eval(self._cells[key], globals(), self)
492
493 ss = SpreadSheet()
494 ss['a1'] = '5'
495 ss['a2'] = 'a1*6'
496 ss['a3'] = 'a2*7'
497 self.assertEqual(ss['a3'], 210)
498
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000499 # Verify that dir() catches a non-list returned by eval
500 # SF bug #1004669
501 class C:
502 def __getitem__(self, item):
503 raise KeyError(item)
Guido van Rossumcd70eee2007-02-11 18:53:00 +0000504 def keys(self):
505 return 1 # used to be 'a' but that's no longer an error
Raymond Hettinger2a7dede2004-08-07 04:55:30 +0000506 self.assertRaises(TypeError, eval, 'dir()', globals(), C())
507
Georg Brandl7cae87c2006-09-06 06:51:57 +0000508 def test_exec(self):
509 g = {}
510 exec('z = 1', g)
511 if '__builtins__' in g:
512 del g['__builtins__']
513 self.assertEqual(g, {'z': 1})
514
Guido van Rossumef87d6e2007-05-02 19:09:54 +0000515 exec('z = 1+1', g)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000516 if '__builtins__' in g:
517 del g['__builtins__']
518 self.assertEqual(g, {'z': 2})
519 g = {}
520 l = {}
521
Brett Cannon77628992010-03-20 20:59:33 +0000522 with check_warnings():
523 warnings.filterwarnings("ignore", "global statement",
524 module="<string>")
525 exec('global a; a = 1; b = 2', g, l)
Georg Brandl7cae87c2006-09-06 06:51:57 +0000526 if '__builtins__' in g:
527 del g['__builtins__']
528 if '__builtins__' in l:
529 del l['__builtins__']
530 self.assertEqual((g, l), ({'a': 1}, {'b': 2}))
531
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +0000532 def test_exec_redirected(self):
533 savestdout = sys.stdout
534 sys.stdout = None # Whatever that cannot flush()
535 try:
536 # Used to raise SystemError('error return without exception set')
537 exec('a')
538 except NameError:
539 pass
540 finally:
541 sys.stdout = savestdout
542
Walter Dörwald919497e2003-01-19 16:23:59 +0000543 def test_filter(self):
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000544 self.assertEqual(list(filter(lambda c: 'a' <= c <= 'z', 'Hello World')), list('elloorld'))
545 self.assertEqual(list(filter(None, [1, 'hello', [], [3], '', None, 9, 0])), [1, 'hello', [3], 9])
546 self.assertEqual(list(filter(lambda x: x > 0, [1, -3, 9, 0, 2])), [1, 9, 2])
547 self.assertEqual(list(filter(None, Squares(10))), [1, 4, 9, 16, 25, 36, 49, 64, 81])
548 self.assertEqual(list(filter(lambda x: x%2, Squares(10))), [1, 9, 25, 49, 81])
Walter Dörwald919497e2003-01-19 16:23:59 +0000549 def identity(item):
550 return 1
551 filter(identity, Squares(5))
552 self.assertRaises(TypeError, filter)
553 class BadSeq(object):
Tim Petersf2715e02003-02-19 02:35:07 +0000554 def __getitem__(self, index):
555 if index<4:
556 return 42
557 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000558 self.assertRaises(ValueError, list, filter(lambda x: x, BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +0000559 def badfunc():
560 pass
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000561 self.assertRaises(TypeError, list, filter(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000562
Walter Dörwaldbf517072003-01-27 15:57:14 +0000563 # test bltinmodule.c::filtertuple()
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000564 self.assertEqual(list(filter(None, (1, 2))), [1, 2])
565 self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
566 self.assertRaises(TypeError, list, filter(42, (1, 2)))
Walter Dörwaldc3da83f2003-02-04 20:24:45 +0000567
Walter Dörwald919497e2003-01-19 16:23:59 +0000568 def test_getattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000569 self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
Walter Dörwald919497e2003-01-19 16:23:59 +0000570 self.assertRaises(TypeError, getattr, sys, 1)
571 self.assertRaises(TypeError, getattr, sys, 1, "foo")
572 self.assertRaises(TypeError, getattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000573 self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode))
Victor Stinner624dbf62010-03-12 17:17:58 +0000574 # unicode surrogates are not encodable to the default encoding (utf8)
575 self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E")
Walter Dörwald919497e2003-01-19 16:23:59 +0000576
577 def test_hasattr(self):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000578 self.assertTrue(hasattr(sys, 'stdout'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000579 self.assertRaises(TypeError, hasattr, sys, 1)
580 self.assertRaises(TypeError, hasattr)
Guido van Rossumf15a29f2007-05-04 00:41:39 +0000581 self.assertEqual(False, hasattr(sys, chr(sys.maxunicode)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000582
Benjamin Peterson17689992010-08-24 03:26:23 +0000583 # Check that hasattr propagates all exceptions outside of
584 # AttributeError.
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000585 class A:
586 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000587 raise SystemExit
588 self.assertRaises(SystemExit, hasattr, A(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000589 class B:
590 def __getattr__(self, what):
Benjamin Peterson17689992010-08-24 03:26:23 +0000591 raise ValueError
592 self.assertRaises(ValueError, hasattr, B(), "b")
Alexandre Vassalottieca20b62008-05-16 02:54:33 +0000593
Walter Dörwald919497e2003-01-19 16:23:59 +0000594 def test_hash(self):
595 hash(None)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000596 self.assertEqual(hash(1), hash(1))
Walter Dörwald919497e2003-01-19 16:23:59 +0000597 self.assertEqual(hash(1), hash(1.0))
598 hash('spam')
Guido van Rossum98297ee2007-11-06 21:34:58 +0000599 self.assertEqual(hash('spam'), hash(b'spam'))
Walter Dörwald919497e2003-01-19 16:23:59 +0000600 hash((0,1,2,3))
601 def f(): pass
602 self.assertRaises(TypeError, hash, [])
603 self.assertRaises(TypeError, hash, {})
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000604 # Bug 1536021: Allow hash to return long objects
605 class X:
606 def __hash__(self):
607 return 2**100
Ezio Melottib3aedd42010-11-20 19:04:17 +0000608 self.assertEqual(type(hash(X())), int)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000609 class Z(int):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000610 def __hash__(self):
611 return self
Ezio Melottib3aedd42010-11-20 19:04:17 +0000612 self.assertEqual(hash(Z(42)), hash(42))
Walter Dörwald919497e2003-01-19 16:23:59 +0000613
614 def test_hex(self):
615 self.assertEqual(hex(16), '0x10')
Guido van Rossume2a383d2007-01-15 16:59:06 +0000616 self.assertEqual(hex(-16), '-0x10')
Walter Dörwald919497e2003-01-19 16:23:59 +0000617 self.assertRaises(TypeError, hex, {})
618
619 def test_id(self):
620 id(None)
621 id(1)
Walter Dörwald919497e2003-01-19 16:23:59 +0000622 id(1.0)
623 id('spam')
624 id((0,1,2,3))
625 id([0,1,2,3])
626 id({'spam': 1, 'eggs': 2, 'ham': 3})
627
Guido van Rossuma88a0332007-02-26 16:59:55 +0000628 # Test input() later, alphabetized as if it were raw_input
629
Walter Dörwald919497e2003-01-19 16:23:59 +0000630 def test_iter(self):
631 self.assertRaises(TypeError, iter)
632 self.assertRaises(TypeError, iter, 42, 42)
633 lists = [("1", "2"), ["1", "2"], "12"]
Walter Dörwald919497e2003-01-19 16:23:59 +0000634 for l in lists:
635 i = iter(l)
Georg Brandla18af4e2007-04-21 15:47:16 +0000636 self.assertEqual(next(i), '1')
637 self.assertEqual(next(i), '2')
638 self.assertRaises(StopIteration, next, i)
Walter Dörwald919497e2003-01-19 16:23:59 +0000639
640 def test_isinstance(self):
641 class C:
642 pass
643 class D(C):
644 pass
645 class E:
646 pass
647 c = C()
648 d = D()
649 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000650 self.assertTrue(isinstance(c, C))
651 self.assertTrue(isinstance(d, C))
652 self.assertTrue(not isinstance(e, C))
653 self.assertTrue(not isinstance(c, D))
654 self.assertTrue(not isinstance('foo', E))
Walter Dörwald919497e2003-01-19 16:23:59 +0000655 self.assertRaises(TypeError, isinstance, E, 'foo')
656 self.assertRaises(TypeError, isinstance)
657
658 def test_issubclass(self):
659 class C:
660 pass
661 class D(C):
662 pass
663 class E:
664 pass
665 c = C()
666 d = D()
667 e = E()
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000668 self.assertTrue(issubclass(D, C))
669 self.assertTrue(issubclass(C, C))
670 self.assertTrue(not issubclass(C, D))
Walter Dörwald919497e2003-01-19 16:23:59 +0000671 self.assertRaises(TypeError, issubclass, 'foo', E)
672 self.assertRaises(TypeError, issubclass, E, 'foo')
673 self.assertRaises(TypeError, issubclass)
674
675 def test_len(self):
676 self.assertEqual(len('123'), 3)
677 self.assertEqual(len(()), 0)
678 self.assertEqual(len((1, 2, 3, 4)), 4)
679 self.assertEqual(len([1, 2, 3, 4]), 4)
680 self.assertEqual(len({}), 0)
681 self.assertEqual(len({'a':1, 'b': 2}), 2)
682 class BadSeq:
683 def __len__(self):
684 raise ValueError
685 self.assertRaises(ValueError, len, BadSeq())
Benjamin Petersonee1ae7c2009-02-08 21:07:20 +0000686 class InvalidLen:
687 def __len__(self):
688 return None
689 self.assertRaises(TypeError, len, InvalidLen())
690 class FloatLen:
691 def __len__(self):
692 return 4.5
693 self.assertRaises(TypeError, len, FloatLen())
694 class HugeLen:
695 def __len__(self):
696 return sys.maxsize + 1
697 self.assertRaises(OverflowError, len, HugeLen())
Mark Dickinsonfb3dc942010-05-25 19:06:24 +0000698 class NoLenMethod(object): pass
699 self.assertRaises(TypeError, len, NoLenMethod())
Walter Dörwald919497e2003-01-19 16:23:59 +0000700
Walter Dörwald919497e2003-01-19 16:23:59 +0000701 def test_map(self):
702 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000703 list(map(lambda x: x*x, range(1,4))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000704 [1, 4, 9]
705 )
706 try:
707 from math import sqrt
708 except ImportError:
709 def sqrt(x):
710 return pow(x, 0.5)
711 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000712 list(map(lambda x: list(map(sqrt, x)), [[16, 4], [81, 9]])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000713 [[4.0, 2.0], [9.0, 3.0]]
714 )
715 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000716 list(map(lambda x, y: x+y, [1,3,2], [9,1,4])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000717 [10, 4, 6]
718 )
719
720 def plus(*v):
721 accu = 0
722 for i in v: accu = accu + i
723 return accu
724 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000725 list(map(plus, [1, 3, 7])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000726 [1, 3, 7]
727 )
728 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000729 list(map(plus, [1, 3, 7], [4, 9, 2])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000730 [1+4, 3+9, 7+2]
731 )
732 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000733 list(map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0])),
Walter Dörwald919497e2003-01-19 16:23:59 +0000734 [1+4+1, 3+9+1, 7+2+0]
735 )
736 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000737 list(map(int, Squares(10))),
Walter Dörwald919497e2003-01-19 16:23:59 +0000738 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
739 )
Guido van Rossum47b9ff62006-08-24 00:41:19 +0000740 def Max(a, b):
741 if a is None:
742 return b
743 if b is None:
744 return a
745 return max(a, b)
Walter Dörwald919497e2003-01-19 16:23:59 +0000746 self.assertEqual(
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000747 list(map(Max, Squares(3), Squares(2))),
748 [0, 1]
Walter Dörwald919497e2003-01-19 16:23:59 +0000749 )
750 self.assertRaises(TypeError, map)
751 self.assertRaises(TypeError, map, lambda x: x, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000752 class BadSeq:
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000753 def __iter__(self):
Walter Dörwald919497e2003-01-19 16:23:59 +0000754 raise ValueError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000755 yield None
756 self.assertRaises(ValueError, list, map(lambda x: x, BadSeq()))
Neal Norwitzfcf44352005-11-27 20:37:43 +0000757 def badfunc(x):
758 raise RuntimeError
Guido van Rossumc1f779c2007-07-03 08:25:58 +0000759 self.assertRaises(RuntimeError, list, map(badfunc, range(5)))
Walter Dörwald919497e2003-01-19 16:23:59 +0000760
761 def test_max(self):
762 self.assertEqual(max('123123'), '3')
763 self.assertEqual(max(1, 2, 3), 3)
764 self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
765 self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
766
Guido van Rossume2a383d2007-01-15 16:59:06 +0000767 self.assertEqual(max(1, 2, 3.0), 3.0)
768 self.assertEqual(max(1, 2.0, 3), 3)
769 self.assertEqual(max(1.0, 2, 3), 3)
Walter Dörwald919497e2003-01-19 16:23:59 +0000770
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000771 for stmt in (
772 "max(key=int)", # no args
773 "max(1, key=int)", # single arg not iterable
774 "max(1, 2, keystone=int)", # wrong keyword
775 "max(1, 2, key=int, abc=int)", # two many keywords
776 "max(1, 2, key=1)", # keyfunc is not callable
777 ):
Tim Peters7f061872004-12-07 21:17:46 +0000778 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000779 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000780 except TypeError:
781 pass
782 else:
783 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000784
785 self.assertEqual(max((1,), key=neg), 1) # one elem iterable
786 self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
787 self.assertEqual(max(1, 2, key=neg), 1) # two elems
788
789 data = [random.randrange(200) for i in range(100)]
790 keys = dict((elem, random.randrange(50)) for elem in data)
791 f = keys.__getitem__
792 self.assertEqual(max(data, key=f),
793 sorted(reversed(data), key=f)[-1])
794
Walter Dörwald919497e2003-01-19 16:23:59 +0000795 def test_min(self):
796 self.assertEqual(min('123123'), '1')
797 self.assertEqual(min(1, 2, 3), 1)
798 self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
799 self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
800
Guido van Rossume2a383d2007-01-15 16:59:06 +0000801 self.assertEqual(min(1, 2, 3.0), 1)
802 self.assertEqual(min(1, 2.0, 3), 1)
803 self.assertEqual(min(1.0, 2, 3), 1.0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000804
805 self.assertRaises(TypeError, min)
806 self.assertRaises(TypeError, min, 42)
807 self.assertRaises(ValueError, min, ())
808 class BadSeq:
809 def __getitem__(self, index):
810 raise ValueError
811 self.assertRaises(ValueError, min, BadSeq())
Walter Dörwald919497e2003-01-19 16:23:59 +0000812
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000813 for stmt in (
814 "min(key=int)", # no args
815 "min(1, key=int)", # single arg not iterable
816 "min(1, 2, keystone=int)", # wrong keyword
817 "min(1, 2, key=int, abc=int)", # two many keywords
818 "min(1, 2, key=1)", # keyfunc is not callable
819 ):
Tim Peters7f061872004-12-07 21:17:46 +0000820 try:
Georg Brandl7cae87c2006-09-06 06:51:57 +0000821 exec(stmt, globals())
Tim Peters7f061872004-12-07 21:17:46 +0000822 except TypeError:
823 pass
824 else:
825 self.fail(stmt)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +0000826
827 self.assertEqual(min((1,), key=neg), 1) # one elem iterable
828 self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
829 self.assertEqual(min(1, 2, key=neg), 2) # two elems
830
831 data = [random.randrange(200) for i in range(100)]
832 keys = dict((elem, random.randrange(50)) for elem in data)
833 f = keys.__getitem__
834 self.assertEqual(min(data, key=f),
835 sorted(data, key=f)[0])
836
Georg Brandla18af4e2007-04-21 15:47:16 +0000837 def test_next(self):
838 it = iter(range(2))
839 self.assertEqual(next(it), 0)
840 self.assertEqual(next(it), 1)
841 self.assertRaises(StopIteration, next, it)
842 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000843 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000844
845 class Iter(object):
846 def __iter__(self):
847 return self
848 def __next__(self):
849 raise StopIteration
850
851 it = iter(Iter())
Ezio Melottib3aedd42010-11-20 19:04:17 +0000852 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000853 self.assertRaises(StopIteration, next, it)
854
855 def gen():
856 yield 1
857 return
858
859 it = gen()
Ezio Melottib3aedd42010-11-20 19:04:17 +0000860 self.assertEqual(next(it), 1)
Georg Brandla18af4e2007-04-21 15:47:16 +0000861 self.assertRaises(StopIteration, next, it)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000862 self.assertEqual(next(it, 42), 42)
Georg Brandla18af4e2007-04-21 15:47:16 +0000863
Walter Dörwald919497e2003-01-19 16:23:59 +0000864 def test_oct(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000865 self.assertEqual(oct(100), '0o144')
Guido van Rossumcd16bf62007-06-13 18:07:49 +0000866 self.assertEqual(oct(-100), '-0o144')
Walter Dörwald919497e2003-01-19 16:23:59 +0000867 self.assertRaises(TypeError, oct, ())
868
869 def write_testfile(self):
Guido van Rossuma88a0332007-02-26 16:59:55 +0000870 # NB the first 4 lines are also used to test input, below
Walter Dörwald919497e2003-01-19 16:23:59 +0000871 fp = open(TESTFN, 'w')
872 try:
873 fp.write('1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000874 fp.write('The quick brown fox jumps over the lazy dog')
875 fp.write('.\n')
876 fp.write('Dear John\n')
877 fp.write('XXX'*100)
878 fp.write('YYY'*100)
879 finally:
880 fp.close()
881
882 def test_open(self):
883 self.write_testfile()
884 fp = open(TESTFN, 'r')
885 try:
886 self.assertEqual(fp.readline(4), '1+1\n')
Walter Dörwald919497e2003-01-19 16:23:59 +0000887 self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
888 self.assertEqual(fp.readline(4), 'Dear')
889 self.assertEqual(fp.readline(100), ' John\n')
890 self.assertEqual(fp.read(300), 'XXX'*100)
891 self.assertEqual(fp.read(1000), 'YYY'*100)
892 finally:
893 fp.close()
894 unlink(TESTFN)
895
896 def test_ord(self):
897 self.assertEqual(ord(' '), 32)
898 self.assertEqual(ord('A'), 65)
899 self.assertEqual(ord('a'), 97)
Guido van Rossumf9e91c92007-05-08 21:05:48 +0000900 self.assertEqual(ord('\x80'), 128)
901 self.assertEqual(ord('\xff'), 255)
902
903 self.assertEqual(ord(b' '), 32)
904 self.assertEqual(ord(b'A'), 65)
905 self.assertEqual(ord(b'a'), 97)
906 self.assertEqual(ord(b'\x80'), 128)
907 self.assertEqual(ord(b'\xff'), 255)
908
Walter Dörwald1f5947b2007-05-22 16:52:54 +0000909 self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
Walter Dörwald919497e2003-01-19 16:23:59 +0000910 self.assertRaises(TypeError, ord, 42)
Walter Dörwald919497e2003-01-19 16:23:59 +0000911
Guido van Rossum8ac004e2007-07-15 13:00:05 +0000912 self.assertEqual(ord(chr(0x10FFFF)), 0x10FFFF)
913 self.assertEqual(ord("\U0000FFFF"), 0x0000FFFF)
914 self.assertEqual(ord("\U00010000"), 0x00010000)
915 self.assertEqual(ord("\U00010001"), 0x00010001)
916 self.assertEqual(ord("\U000FFFFE"), 0x000FFFFE)
917 self.assertEqual(ord("\U000FFFFF"), 0x000FFFFF)
918 self.assertEqual(ord("\U00100000"), 0x00100000)
919 self.assertEqual(ord("\U00100001"), 0x00100001)
920 self.assertEqual(ord("\U0010FFFE"), 0x0010FFFE)
921 self.assertEqual(ord("\U0010FFFF"), 0x0010FFFF)
922
Walter Dörwald919497e2003-01-19 16:23:59 +0000923 def test_pow(self):
924 self.assertEqual(pow(0,0), 1)
925 self.assertEqual(pow(0,1), 0)
926 self.assertEqual(pow(1,0), 1)
927 self.assertEqual(pow(1,1), 1)
928
929 self.assertEqual(pow(2,0), 1)
930 self.assertEqual(pow(2,10), 1024)
931 self.assertEqual(pow(2,20), 1024*1024)
932 self.assertEqual(pow(2,30), 1024*1024*1024)
933
934 self.assertEqual(pow(-2,0), 1)
935 self.assertEqual(pow(-2,1), -2)
936 self.assertEqual(pow(-2,2), 4)
937 self.assertEqual(pow(-2,3), -8)
938
Walter Dörwald919497e2003-01-19 16:23:59 +0000939 self.assertAlmostEqual(pow(0.,0), 1.)
940 self.assertAlmostEqual(pow(0.,1), 0.)
941 self.assertAlmostEqual(pow(1.,0), 1.)
942 self.assertAlmostEqual(pow(1.,1), 1.)
943
944 self.assertAlmostEqual(pow(2.,0), 1.)
945 self.assertAlmostEqual(pow(2.,10), 1024.)
946 self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
947 self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
948
949 self.assertAlmostEqual(pow(-2.,0), 1.)
950 self.assertAlmostEqual(pow(-2.,1), -2.)
951 self.assertAlmostEqual(pow(-2.,2), 4.)
952 self.assertAlmostEqual(pow(-2.,3), -8.)
953
Mark Dickinson5c2db372009-12-05 20:28:34 +0000954 for x in 2, 2.0:
955 for y in 10, 10.0:
956 for z in 1000, 1000.0:
Walter Dörwald919497e2003-01-19 16:23:59 +0000957 if isinstance(x, float) or \
958 isinstance(y, float) or \
959 isinstance(z, float):
960 self.assertRaises(TypeError, pow, x, y, z)
961 else:
962 self.assertAlmostEqual(pow(x, y, z), 24.0)
963
Jeffrey Yasskin3404b3c2007-09-07 15:15:49 +0000964 self.assertAlmostEqual(pow(-1, 0.5), 1j)
965 self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j)
966
Walter Dörwald919497e2003-01-19 16:23:59 +0000967 self.assertRaises(TypeError, pow, -1, -2, 3)
968 self.assertRaises(ValueError, pow, 1, 2, 0)
Walter Dörwald919497e2003-01-19 16:23:59 +0000969
970 self.assertRaises(TypeError, pow)
971
Guido van Rossuma88a0332007-02-26 16:59:55 +0000972 def test_input(self):
973 self.write_testfile()
974 fp = open(TESTFN, 'r')
975 savestdin = sys.stdin
976 savestdout = sys.stdout # Eats the echo
977 try:
978 sys.stdin = fp
979 sys.stdout = BitBucket()
980 self.assertEqual(input(), "1+1")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000981 self.assertEqual(input(), 'The quick brown fox jumps over the lazy dog.')
982 self.assertEqual(input('testing\n'), 'Dear John')
983
984 # SF 1535165: don't segfault on closed stdin
985 # sys.stdout must be a regular file for triggering
986 sys.stdout = savestdout
987 sys.stdin.close()
988 self.assertRaises(ValueError, input)
989
990 sys.stdout = BitBucket()
Guido van Rossum34d19282007-08-09 01:03:29 +0000991 sys.stdin = io.StringIO("NULL\0")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000992 self.assertRaises(TypeError, input, 42, 42)
Guido van Rossum34d19282007-08-09 01:03:29 +0000993 sys.stdin = io.StringIO(" 'whitespace'")
Guido van Rossuma88a0332007-02-26 16:59:55 +0000994 self.assertEqual(input(), " 'whitespace'")
Guido van Rossum34d19282007-08-09 01:03:29 +0000995 sys.stdin = io.StringIO()
Guido van Rossuma88a0332007-02-26 16:59:55 +0000996 self.assertRaises(EOFError, input)
997
998 del sys.stdout
999 self.assertRaises(RuntimeError, input, 'prompt')
1000 del sys.stdin
1001 self.assertRaises(RuntimeError, input, 'prompt')
1002 finally:
1003 sys.stdin = savestdin
1004 sys.stdout = savestdout
1005 fp.close()
1006 unlink(TESTFN)
1007
Antoine Pitrou0d776b12011-11-06 00:34:26 +01001008 @unittest.skipUnless(pty, "the pty module isn't available")
1009 def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):
1010 r, w = os.pipe()
1011 try:
1012 pid, fd = pty.fork()
1013 except (OSError, AttributeError) as e:
1014 os.close(r)
1015 os.close(w)
1016 self.skipTest("pty.fork() raised {}".format(e))
1017 if pid == 0:
1018 # Child
1019 os.close(r)
1020 # Check the error handlers are accounted for
1021 if stdio_encoding:
1022 sys.stdin = io.TextIOWrapper(sys.stdin.detach(),
1023 encoding=stdio_encoding,
1024 errors='surrogateescape')
1025 sys.stdout = io.TextIOWrapper(sys.stdout.detach(),
1026 encoding=stdio_encoding,
1027 errors='replace')
1028 with open(w, "w") as wpipe:
1029 try:
1030 print("tty =", sys.stdin.isatty() and sys.stdout.isatty(), file=wpipe)
1031 print(ascii(input(prompt)), file=wpipe)
1032 finally:
1033 print(";EOF", file=wpipe)
1034 # We don't want to return to unittest...
1035 os._exit(0)
1036 # Parent
1037 os.close(w)
1038 os.write(fd, terminal_input + b"\r\n")
1039 # Get results from the pipe
1040 with open(r, "r") as rpipe:
1041 lines = []
1042 while True:
1043 line = rpipe.readline().strip()
1044 if line == ";EOF":
1045 break
1046 lines.append(line)
1047 # Check we did exercise the GNU readline path
1048 self.assertIn(lines[0], {'tty = True', 'tty = False'})
1049 if lines[0] != 'tty = True':
1050 self.skipTest("standard IO in should have been a tty")
1051 # Check the result was got and corresponds to the user's terminal input
1052 self.assertEqual(len(lines), 2)
1053 input_result = eval(lines[1]) # ascii() -> eval() roundtrip
1054 if stdio_encoding:
1055 expected = terminal_input.decode(stdio_encoding, 'surrogateescape')
1056 else:
1057 expected = terminal_input.decode(sys.stdin.encoding) # what else?
1058 self.assertEqual(input_result, expected)
1059
1060 def test_input_tty(self):
1061 # Test input() functionality when wired to a tty (the code path
1062 # is different and invokes GNU readline if available).
1063 self.check_input_tty("prompt", b"quux")
1064
1065 def test_input_tty_non_ascii(self):
1066 # Check stdin/stdout encoding is used when invoking GNU readline
1067 self.check_input_tty("prompté", b"quux\xe9", "utf-8")
1068
1069 def test_input_tty_non_ascii_unicode_errors(self):
1070 # Check stdin/stdout error handler is used when invoking GNU readline
1071 self.check_input_tty("prompté", b"quux\xe9", "ascii")
1072
Walter Dörwald919497e2003-01-19 16:23:59 +00001073 def test_repr(self):
1074 self.assertEqual(repr(''), '\'\'')
1075 self.assertEqual(repr(0), '0')
Walter Dörwald919497e2003-01-19 16:23:59 +00001076 self.assertEqual(repr(()), '()')
1077 self.assertEqual(repr([]), '[]')
1078 self.assertEqual(repr({}), '{}')
1079 a = []
1080 a.append(a)
1081 self.assertEqual(repr(a), '[[...]]')
1082 a = {}
1083 a[0] = a
1084 self.assertEqual(repr(a), '{0: {...}}')
1085
1086 def test_round(self):
1087 self.assertEqual(round(0.0), 0.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001088 self.assertEqual(type(round(0.0)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001089 self.assertEqual(round(1.0), 1.0)
1090 self.assertEqual(round(10.0), 10.0)
1091 self.assertEqual(round(1000000000.0), 1000000000.0)
1092 self.assertEqual(round(1e20), 1e20)
1093
1094 self.assertEqual(round(-1.0), -1.0)
1095 self.assertEqual(round(-10.0), -10.0)
1096 self.assertEqual(round(-1000000000.0), -1000000000.0)
1097 self.assertEqual(round(-1e20), -1e20)
1098
1099 self.assertEqual(round(0.1), 0.0)
1100 self.assertEqual(round(1.1), 1.0)
1101 self.assertEqual(round(10.1), 10.0)
1102 self.assertEqual(round(1000000000.1), 1000000000.0)
1103
1104 self.assertEqual(round(-1.1), -1.0)
1105 self.assertEqual(round(-10.1), -10.0)
1106 self.assertEqual(round(-1000000000.1), -1000000000.0)
1107
1108 self.assertEqual(round(0.9), 1.0)
1109 self.assertEqual(round(9.9), 10.0)
1110 self.assertEqual(round(999999999.9), 1000000000.0)
1111
1112 self.assertEqual(round(-0.9), -1.0)
1113 self.assertEqual(round(-9.9), -10.0)
1114 self.assertEqual(round(-999999999.9), -1000000000.0)
1115
1116 self.assertEqual(round(-8.0, -1), -10.0)
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001117 self.assertEqual(type(round(-8.0, -1)), float)
1118
1119 self.assertEqual(type(round(-8.0, 0)), float)
1120 self.assertEqual(type(round(-8.0, 1)), float)
1121
1122 # Check even / odd rounding behaviour
1123 self.assertEqual(round(5.5), 6)
1124 self.assertEqual(round(6.5), 6)
1125 self.assertEqual(round(-5.5), -6)
1126 self.assertEqual(round(-6.5), -6)
1127
1128 # Check behavior on ints
1129 self.assertEqual(round(0), 0)
1130 self.assertEqual(round(8), 8)
1131 self.assertEqual(round(-8), -8)
1132 self.assertEqual(type(round(0)), int)
Mark Dickinson1124e712009-01-28 21:25:58 +00001133 self.assertEqual(type(round(-8, -1)), int)
1134 self.assertEqual(type(round(-8, 0)), int)
1135 self.assertEqual(type(round(-8, 1)), int)
Walter Dörwald919497e2003-01-19 16:23:59 +00001136
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001137 # test new kwargs
1138 self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
1139
Walter Dörwald919497e2003-01-19 16:23:59 +00001140 self.assertRaises(TypeError, round)
1141
Alex Martelliae211f92007-08-22 23:21:33 +00001142 # test generic rounding delegation for reals
1143 class TestRound:
1144 def __round__(self):
1145 return 23
1146
1147 class TestNoRound:
1148 pass
1149
1150 self.assertEqual(round(TestRound()), 23)
1151
1152 self.assertRaises(TypeError, round, 1, 2, 3)
1153 self.assertRaises(TypeError, round, TestNoRound())
1154
Guido van Rossum2fa33db2007-08-23 22:07:24 +00001155 t = TestNoRound()
1156 t.__round__ = lambda *args: args
1157 self.assertRaises(TypeError, round, t)
1158 self.assertRaises(TypeError, round, t, 0)
1159
Mark Dickinsonad731b92009-11-09 17:12:30 +00001160 # Some versions of glibc for alpha have a bug that affects
1161 # float -> integer rounding (floor, ceil, rint, round) for
1162 # values in the range [2**52, 2**53). See:
1163 #
1164 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
1165 #
1166 # We skip this test on Linux/alpha if it would fail.
1167 linux_alpha = (platform.system().startswith('Linux') and
1168 platform.machine().startswith('alpha'))
1169 system_round_bug = round(5e15+1) != 5e15+1
1170 @unittest.skipIf(linux_alpha and system_round_bug,
1171 "test will fail; failure is probably due to a "
1172 "buggy system round function")
1173 def test_round_large(self):
1174 # Issue #1869: integral floats should remain unchanged
1175 self.assertEqual(round(5e15-1), 5e15-1)
1176 self.assertEqual(round(5e15), 5e15)
1177 self.assertEqual(round(5e15+1), 5e15+1)
1178 self.assertEqual(round(5e15+2), 5e15+2)
1179 self.assertEqual(round(5e15+3), 5e15+3)
1180
Walter Dörwald919497e2003-01-19 16:23:59 +00001181 def test_setattr(self):
Tim Petersf2715e02003-02-19 02:35:07 +00001182 setattr(sys, 'spam', 1)
1183 self.assertEqual(sys.spam, 1)
1184 self.assertRaises(TypeError, setattr, sys, 1, 'spam')
1185 self.assertRaises(TypeError, setattr)
Walter Dörwald919497e2003-01-19 16:23:59 +00001186
Walter Dörwald919497e2003-01-19 16:23:59 +00001187
Alex Martellia70b1912003-04-22 08:12:33 +00001188 def test_sum(self):
1189 self.assertEqual(sum([]), 0)
Guido van Rossum805365e2007-05-07 22:24:25 +00001190 self.assertEqual(sum(list(range(2,8))), 27)
1191 self.assertEqual(sum(iter(list(range(2,8)))), 27)
Alex Martellia70b1912003-04-22 08:12:33 +00001192 self.assertEqual(sum(Squares(10)), 285)
1193 self.assertEqual(sum(iter(Squares(10))), 285)
1194 self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
1195
1196 self.assertRaises(TypeError, sum)
1197 self.assertRaises(TypeError, sum, 42)
1198 self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
1199 self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
Benjamin Petersonce071ca2011-07-29 14:23:47 -05001200 self.assertRaises(TypeError, sum, [b'a', b'c'], b'')
1201 values = [bytearray(b'a'), bytearray(b'b')]
1202 self.assertRaises(TypeError, sum, values, bytearray(b''))
Alex Martellia70b1912003-04-22 08:12:33 +00001203 self.assertRaises(TypeError, sum, [[1], [2], [3]])
1204 self.assertRaises(TypeError, sum, [{2:3}])
1205 self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
1206
1207 class BadSeq:
1208 def __getitem__(self, index):
1209 raise ValueError
1210 self.assertRaises(ValueError, sum, BadSeq())
1211
Mark Dickinson3a22b472009-10-17 21:48:16 +00001212 empty = []
1213 sum(([x] for x in range(10)), empty)
1214 self.assertEqual(empty, [])
1215
Walter Dörwald919497e2003-01-19 16:23:59 +00001216 def test_type(self):
1217 self.assertEqual(type(''), type('123'))
1218 self.assertNotEqual(type(''), type(()))
1219
Guido van Rossumfee7b932005-01-16 00:21:28 +00001220 # We don't want self in vars(), so these are static methods
1221
1222 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001223 def get_vars_f0():
1224 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001225
Guido van Rossumfee7b932005-01-16 00:21:28 +00001226 @staticmethod
Walter Dörwald919497e2003-01-19 16:23:59 +00001227 def get_vars_f2():
1228 BuiltinTest.get_vars_f0()
1229 a = 1
1230 b = 2
1231 return vars()
Walter Dörwald919497e2003-01-19 16:23:59 +00001232
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001233 class C_get_vars(object):
1234 def getDict(self):
1235 return {'a':2}
1236 __dict__ = property(fget=getDict)
1237
Walter Dörwald919497e2003-01-19 16:23:59 +00001238 def test_vars(self):
Raymond Hettingera690a992003-11-16 16:17:49 +00001239 self.assertEqual(set(vars()), set(dir()))
Raymond Hettingera690a992003-11-16 16:17:49 +00001240 self.assertEqual(set(vars(sys)), set(dir(sys)))
Walter Dörwald919497e2003-01-19 16:23:59 +00001241 self.assertEqual(self.get_vars_f0(), {})
1242 self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
1243 self.assertRaises(TypeError, vars, 42, 42)
1244 self.assertRaises(TypeError, vars, 42)
Mark Dickinsonfb3dc942010-05-25 19:06:24 +00001245 self.assertEqual(vars(self.C_get_vars()), {'a':2})
Walter Dörwald919497e2003-01-19 16:23:59 +00001246
1247 def test_zip(self):
1248 a = (1, 2, 3)
1249 b = (4, 5, 6)
1250 t = [(1, 4), (2, 5), (3, 6)]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001251 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001252 b = [4, 5, 6]
Guido van Rossum801f0d72006-08-24 19:48:10 +00001253 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001254 b = (4, 5, 6, 7)
Guido van Rossum801f0d72006-08-24 19:48:10 +00001255 self.assertEqual(list(zip(a, b)), t)
Walter Dörwald919497e2003-01-19 16:23:59 +00001256 class I:
1257 def __getitem__(self, i):
1258 if i < 0 or i > 2: raise IndexError
1259 return i + 4
Guido van Rossum801f0d72006-08-24 19:48:10 +00001260 self.assertEqual(list(zip(a, I())), t)
1261 self.assertEqual(list(zip()), [])
1262 self.assertEqual(list(zip(*[])), [])
Walter Dörwald919497e2003-01-19 16:23:59 +00001263 self.assertRaises(TypeError, zip, None)
1264 class G:
1265 pass
1266 self.assertRaises(TypeError, zip, a, G())
Alexander Belopolskye29e6bf2010-08-16 18:55:46 +00001267 self.assertRaises(RuntimeError, zip, a, TestFailingIter())
Walter Dörwald919497e2003-01-19 16:23:59 +00001268
1269 # Make sure zip doesn't try to allocate a billion elements for the
1270 # result list when one of its arguments doesn't say how long it is.
1271 # A MemoryError is the most likely failure mode.
1272 class SequenceWithoutALength:
1273 def __getitem__(self, i):
1274 if i == 5:
1275 raise IndexError
1276 else:
1277 return i
1278 self.assertEqual(
Guido van Rossum805365e2007-05-07 22:24:25 +00001279 list(zip(SequenceWithoutALength(), range(2**30))),
Walter Dörwald919497e2003-01-19 16:23:59 +00001280 list(enumerate(range(5)))
1281 )
1282
1283 class BadSeq:
1284 def __getitem__(self, i):
1285 if i == 5:
1286 raise ValueError
1287 else:
1288 return i
Guido van Rossum801f0d72006-08-24 19:48:10 +00001289 self.assertRaises(ValueError, list, zip(BadSeq(), BadSeq()))
Walter Dörwald919497e2003-01-19 16:23:59 +00001290
Eric Smithe4d63172010-09-13 20:48:43 +00001291 def test_format(self):
1292 # Test the basic machinery of the format() builtin. Don't test
1293 # the specifics of the various formatters
1294 self.assertEqual(format(3, ''), '3')
1295
1296 # Returns some classes to use for various tests. There's
1297 # an old-style version, and a new-style version
1298 def classes_new():
1299 class A(object):
1300 def __init__(self, x):
1301 self.x = x
1302 def __format__(self, format_spec):
1303 return str(self.x) + format_spec
1304 class DerivedFromA(A):
1305 pass
1306
1307 class Simple(object): pass
1308 class DerivedFromSimple(Simple):
1309 def __init__(self, x):
1310 self.x = x
1311 def __format__(self, format_spec):
1312 return str(self.x) + format_spec
1313 class DerivedFromSimple2(DerivedFromSimple): pass
1314 return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
1315
1316 def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
1317 self.assertEqual(format(A(3), 'spec'), '3spec')
1318 self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
1319 self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
1320 self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
1321 '10abcdef')
1322
1323 class_test(*classes_new())
1324
1325 def empty_format_spec(value):
1326 # test that:
1327 # format(x, '') == str(x)
1328 # format(x) == str(x)
1329 self.assertEqual(format(value, ""), str(value))
1330 self.assertEqual(format(value), str(value))
1331
1332 # for builtin types, format(x, "") == str(x)
1333 empty_format_spec(17**13)
1334 empty_format_spec(1.0)
1335 empty_format_spec(3.1415e104)
1336 empty_format_spec(-3.1415e104)
1337 empty_format_spec(3.1415e-104)
1338 empty_format_spec(-3.1415e-104)
1339 empty_format_spec(object)
1340 empty_format_spec(None)
1341
1342 # TypeError because self.__format__ returns the wrong type
1343 class BadFormatResult:
1344 def __format__(self, format_spec):
1345 return 1.0
1346 self.assertRaises(TypeError, format, BadFormatResult(), "")
1347
1348 # TypeError because format_spec is not unicode or str
1349 self.assertRaises(TypeError, format, object(), 4)
1350 self.assertRaises(TypeError, format, object(), object())
1351
1352 # tests for object.__format__ really belong elsewhere, but
1353 # there's no good place to put them
1354 x = object().__format__('')
1355 self.assertTrue(x.startswith('<object object at'))
1356
1357 # first argument to object.__format__ must be string
1358 self.assertRaises(TypeError, object().__format__, 3)
1359 self.assertRaises(TypeError, object().__format__, object())
1360 self.assertRaises(TypeError, object().__format__, None)
1361
1362 # --------------------------------------------------------------------
1363 # Issue #7994: object.__format__ with a non-empty format string is
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001364 # deprecated
Eric Smithe4d63172010-09-13 20:48:43 +00001365 def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
1366 with warnings.catch_warnings(record=True) as w:
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001367 warnings.simplefilter("always", DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001368 format(obj, fmt_str)
1369 if should_raise_warning:
1370 self.assertEqual(len(w), 1)
Eric V. Smithb9cd3532011-03-12 10:08:48 -05001371 self.assertIsInstance(w[0].message, DeprecationWarning)
Eric Smithe4d63172010-09-13 20:48:43 +00001372 self.assertIn('object.__format__ with a non-empty format '
1373 'string', str(w[0].message))
1374 else:
1375 self.assertEqual(len(w), 0)
1376
1377 fmt_strs = ['', 's']
1378
1379 class A:
1380 def __format__(self, fmt_str):
1381 return format('', fmt_str)
1382
1383 for fmt_str in fmt_strs:
1384 test_deprecated_format_string(A(), fmt_str, False)
1385
1386 class B:
1387 pass
1388
1389 class C(object):
1390 pass
1391
1392 for cls in [object, B, C]:
1393 for fmt_str in fmt_strs:
1394 test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
1395 # --------------------------------------------------------------------
1396
1397 # make sure we can take a subclass of str as a format spec
1398 class DerivedFromStr(str): pass
1399 self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
1400
Christian Heimes90c3d9b2008-02-23 13:18:03 +00001401 def test_bin(self):
1402 self.assertEqual(bin(0), '0b0')
1403 self.assertEqual(bin(1), '0b1')
1404 self.assertEqual(bin(-1), '-0b1')
1405 self.assertEqual(bin(2**65), '0b1' + '0' * 65)
1406 self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
1407 self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
1408 self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
1409
Georg Brandl953152f2009-07-22 12:03:59 +00001410 def test_bytearray_translate(self):
1411 x = bytearray(b"abc")
1412 self.assertRaises(ValueError, x.translate, b"1", 1)
1413 self.assertRaises(TypeError, x.translate, b"1"*256, 1)
1414
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001415 def test_construct_singletons(self):
Benjamin Peterson18d7d7a2011-07-29 18:27:44 -05001416 for const in None, Ellipsis, NotImplemented:
Benjamin Petersonc4607ae2011-07-29 18:19:43 -05001417 tp = type(const)
1418 self.assertIs(tp(), const)
1419 self.assertRaises(TypeError, tp, 1, 2)
1420 self.assertRaises(TypeError, tp, a=1, b=2)
1421
Raymond Hettinger64958a12003-12-17 20:43:33 +00001422class TestSorted(unittest.TestCase):
1423
1424 def test_basic(self):
Guido van Rossum805365e2007-05-07 22:24:25 +00001425 data = list(range(100))
Raymond Hettinger64958a12003-12-17 20:43:33 +00001426 copy = data[:]
1427 random.shuffle(copy)
1428 self.assertEqual(data, sorted(copy))
1429 self.assertNotEqual(data, copy)
1430
1431 data.reverse()
1432 random.shuffle(copy)
Raymond Hettinger64958a12003-12-17 20:43:33 +00001433 self.assertEqual(data, sorted(copy, key=lambda x: -x))
1434 self.assertNotEqual(data, copy)
1435 random.shuffle(copy)
1436 self.assertEqual(data, sorted(copy, reverse=1))
1437 self.assertNotEqual(data, copy)
1438
1439 def test_inputtypes(self):
1440 s = 'abracadabra'
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001441 types = [list, tuple, str]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001442 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001443 self.assertEqual(sorted(s), sorted(T(s)))
1444
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001445 s = ''.join(set(s)) # unique letters only
1446 types = [str, set, frozenset, list, tuple, dict.fromkeys]
Walter Dörwald4e41a4b2005-08-03 17:09:04 +00001447 for T in types:
Raymond Hettinger64958a12003-12-17 20:43:33 +00001448 self.assertEqual(sorted(s), sorted(T(s)))
1449
1450 def test_baddecorator(self):
1451 data = 'The quick Brown fox Jumped over The lazy Dog'.split()
1452 self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
1453
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001454def test_main(verbose=None):
1455 test_classes = (BuiltinTest, TestSorted)
1456
1457 run_unittest(*test_classes)
1458
1459 # verify reference counting
1460 if verbose and hasattr(sys, "gettotalrefcount"):
1461 import gc
1462 counts = [None] * 5
Guido van Rossum805365e2007-05-07 22:24:25 +00001463 for i in range(len(counts)):
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001464 run_unittest(*test_classes)
1465 gc.collect()
1466 counts[i] = sys.gettotalrefcount()
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001467 print(counts)
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001468
Walter Dörwald919497e2003-01-19 16:23:59 +00001469
1470if __name__ == "__main__":
Raymond Hettinger3b0c7c22004-12-03 08:30:39 +00001471 test_main(verbose=True)