test_builtin.py 65 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843
  1. # Python test set -- built-in functions
  2. import platform
  3. import unittest
  4. from test.test_support import fcmp, have_unicode, TESTFN, unlink, \
  5. run_unittest, check_py3k_warnings
  6. import warnings
  7. from operator import neg
  8. import sys, cStringIO, random, UserDict
  9. # count the number of test runs.
  10. # used to skip running test_execfile() multiple times
  11. # and to create unique strings to intern in test_intern()
  12. numruns = 0
  13. class Squares:
  14. def __init__(self, max):
  15. self.max = max
  16. self.sofar = []
  17. def __len__(self): return len(self.sofar)
  18. def __getitem__(self, i):
  19. if not 0 <= i < self.max: raise IndexError
  20. n = len(self.sofar)
  21. while n <= i:
  22. self.sofar.append(n*n)
  23. n += 1
  24. return self.sofar[i]
  25. class StrSquares:
  26. def __init__(self, max):
  27. self.max = max
  28. self.sofar = []
  29. def __len__(self):
  30. return len(self.sofar)
  31. def __getitem__(self, i):
  32. if not 0 <= i < self.max:
  33. raise IndexError
  34. n = len(self.sofar)
  35. while n <= i:
  36. self.sofar.append(str(n*n))
  37. n += 1
  38. return self.sofar[i]
  39. class BitBucket:
  40. def write(self, line):
  41. pass
  42. class TestFailingBool:
  43. def __nonzero__(self):
  44. raise RuntimeError
  45. class TestFailingIter:
  46. def __iter__(self):
  47. raise RuntimeError
  48. class BuiltinTest(unittest.TestCase):
  49. def test_import(self):
  50. __import__('sys')
  51. __import__('time')
  52. __import__('string')
  53. __import__(name='sys')
  54. __import__(name='time', level=0)
  55. self.assertRaises(ImportError, __import__, 'spamspam')
  56. self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
  57. self.assertRaises(ValueError, __import__, '')
  58. self.assertRaises(TypeError, __import__, 'sys', name='sys')
  59. def test_abs(self):
  60. # int
  61. self.assertEqual(abs(0), 0)
  62. self.assertEqual(abs(1234), 1234)
  63. self.assertEqual(abs(-1234), 1234)
  64. self.assertTrue(abs(-sys.maxint-1) > 0)
  65. # float
  66. self.assertEqual(abs(0.0), 0.0)
  67. self.assertEqual(abs(3.14), 3.14)
  68. self.assertEqual(abs(-3.14), 3.14)
  69. # long
  70. self.assertEqual(abs(0L), 0L)
  71. self.assertEqual(abs(1234L), 1234L)
  72. self.assertEqual(abs(-1234L), 1234L)
  73. # str
  74. self.assertRaises(TypeError, abs, 'a')
  75. # bool
  76. self.assertEqual(abs(True), 1)
  77. self.assertEqual(abs(False), 0)
  78. # other
  79. self.assertRaises(TypeError, abs)
  80. self.assertRaises(TypeError, abs, None)
  81. class AbsClass(object):
  82. def __abs__(self):
  83. return -5
  84. self.assertEqual(abs(AbsClass()), -5)
  85. def test_all(self):
  86. self.assertEqual(all([2, 4, 6]), True)
  87. self.assertEqual(all([2, None, 6]), False)
  88. self.assertRaises(RuntimeError, all, [2, TestFailingBool(), 6])
  89. self.assertRaises(RuntimeError, all, TestFailingIter())
  90. self.assertRaises(TypeError, all, 10) # Non-iterable
  91. self.assertRaises(TypeError, all) # No args
  92. self.assertRaises(TypeError, all, [2, 4, 6], []) # Too many args
  93. self.assertEqual(all([]), True) # Empty iterator
  94. self.assertEqual(all([0, TestFailingBool()]), False)# Short-circuit
  95. S = [50, 60]
  96. self.assertEqual(all(x > 42 for x in S), True)
  97. S = [50, 40, 60]
  98. self.assertEqual(all(x > 42 for x in S), False)
  99. def test_any(self):
  100. self.assertEqual(any([None, None, None]), False)
  101. self.assertEqual(any([None, 4, None]), True)
  102. self.assertRaises(RuntimeError, any, [None, TestFailingBool(), 6])
  103. self.assertRaises(RuntimeError, any, TestFailingIter())
  104. self.assertRaises(TypeError, any, 10) # Non-iterable
  105. self.assertRaises(TypeError, any) # No args
  106. self.assertRaises(TypeError, any, [2, 4, 6], []) # Too many args
  107. self.assertEqual(any([]), False) # Empty iterator
  108. self.assertEqual(any([1, TestFailingBool()]), True) # Short-circuit
  109. S = [40, 60, 30]
  110. self.assertEqual(any(x > 42 for x in S), True)
  111. S = [10, 20, 30]
  112. self.assertEqual(any(x > 42 for x in S), False)
  113. def test_neg(self):
  114. x = -sys.maxint-1
  115. self.assertTrue(isinstance(x, int))
  116. self.assertEqual(-x, sys.maxint+1)
  117. def test_apply(self):
  118. def f0(*args):
  119. self.assertEqual(args, ())
  120. def f1(a1):
  121. self.assertEqual(a1, 1)
  122. def f2(a1, a2):
  123. self.assertEqual(a1, 1)
  124. self.assertEqual(a2, 2)
  125. def f3(a1, a2, a3):
  126. self.assertEqual(a1, 1)
  127. self.assertEqual(a2, 2)
  128. self.assertEqual(a3, 3)
  129. apply(f0, ())
  130. apply(f1, (1,))
  131. apply(f2, (1, 2))
  132. apply(f3, (1, 2, 3))
  133. # A PyCFunction that takes only positional parameters should allow an
  134. # empty keyword dictionary to pass without a complaint, but raise a
  135. # TypeError if the dictionary is non-empty.
  136. apply(id, (1,), {})
  137. self.assertRaises(TypeError, apply, id, (1,), {"foo": 1})
  138. self.assertRaises(TypeError, apply)
  139. self.assertRaises(TypeError, apply, id, 42)
  140. self.assertRaises(TypeError, apply, id, (42,), 42)
  141. def test_callable(self):
  142. self.assertTrue(callable(len))
  143. self.assertFalse(callable("a"))
  144. self.assertTrue(callable(callable))
  145. self.assertTrue(callable(lambda x, y: x + y))
  146. self.assertFalse(callable(__builtins__))
  147. def f(): pass
  148. self.assertTrue(callable(f))
  149. class Classic:
  150. def meth(self): pass
  151. self.assertTrue(callable(Classic))
  152. c = Classic()
  153. self.assertTrue(callable(c.meth))
  154. self.assertFalse(callable(c))
  155. class NewStyle(object):
  156. def meth(self): pass
  157. self.assertTrue(callable(NewStyle))
  158. n = NewStyle()
  159. self.assertTrue(callable(n.meth))
  160. self.assertFalse(callable(n))
  161. # Classic and new-style classes evaluate __call__() differently
  162. c.__call__ = None
  163. self.assertTrue(callable(c))
  164. del c.__call__
  165. self.assertFalse(callable(c))
  166. n.__call__ = None
  167. self.assertFalse(callable(n))
  168. del n.__call__
  169. self.assertFalse(callable(n))
  170. class N2(object):
  171. def __call__(self): pass
  172. n2 = N2()
  173. self.assertTrue(callable(n2))
  174. class N3(N2): pass
  175. n3 = N3()
  176. self.assertTrue(callable(n3))
  177. def test_chr(self):
  178. self.assertEqual(chr(32), ' ')
  179. self.assertEqual(chr(65), 'A')
  180. self.assertEqual(chr(97), 'a')
  181. self.assertEqual(chr(0xff), '\xff')
  182. self.assertRaises(ValueError, chr, 256)
  183. self.assertRaises(TypeError, chr)
  184. def test_cmp(self):
  185. self.assertEqual(cmp(-1, 1), -1)
  186. self.assertEqual(cmp(1, -1), 1)
  187. self.assertEqual(cmp(1, 1), 0)
  188. # verify that circular objects are not handled
  189. a = []; a.append(a)
  190. b = []; b.append(b)
  191. from UserList import UserList
  192. c = UserList(); c.append(c)
  193. self.assertRaises(RuntimeError, cmp, a, b)
  194. self.assertRaises(RuntimeError, cmp, b, c)
  195. self.assertRaises(RuntimeError, cmp, c, a)
  196. self.assertRaises(RuntimeError, cmp, a, c)
  197. # okay, now break the cycles
  198. a.pop(); b.pop(); c.pop()
  199. self.assertRaises(TypeError, cmp)
  200. def test_coerce(self):
  201. self.assertTrue(not fcmp(coerce(1, 1.1), (1.0, 1.1)))
  202. self.assertEqual(coerce(1, 1L), (1L, 1L))
  203. self.assertTrue(not fcmp(coerce(1L, 1.1), (1.0, 1.1)))
  204. self.assertRaises(TypeError, coerce)
  205. class BadNumber:
  206. def __coerce__(self, other):
  207. raise ValueError
  208. self.assertRaises(ValueError, coerce, 42, BadNumber())
  209. self.assertRaises(OverflowError, coerce, 0.5, int("12345" * 1000))
  210. def test_compile(self):
  211. compile('print 1\n', '', 'exec')
  212. bom = '\xef\xbb\xbf'
  213. compile(bom + 'print 1\n', '', 'exec')
  214. compile(source='pass', filename='?', mode='exec')
  215. compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
  216. compile('pass', '?', dont_inherit=1, mode='exec')
  217. self.assertRaises(TypeError, compile)
  218. self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'badmode')
  219. self.assertRaises(ValueError, compile, 'print 42\n', '<string>', 'single', 0xff)
  220. self.assertRaises(TypeError, compile, chr(0), 'f', 'exec')
  221. self.assertRaises(TypeError, compile, 'pass', '?', 'exec',
  222. mode='eval', source='0', filename='tmp')
  223. if have_unicode:
  224. compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec')
  225. self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec')
  226. self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad')
  227. def test_delattr(self):
  228. import sys
  229. sys.spam = 1
  230. delattr(sys, 'spam')
  231. self.assertRaises(TypeError, delattr)
  232. def test_dir(self):
  233. # dir(wrong number of arguments)
  234. self.assertRaises(TypeError, dir, 42, 42)
  235. # dir() - local scope
  236. local_var = 1
  237. self.assertIn('local_var', dir())
  238. # dir(module)
  239. import sys
  240. self.assertIn('exit', dir(sys))
  241. # dir(module_with_invalid__dict__)
  242. import types
  243. class Foo(types.ModuleType):
  244. __dict__ = 8
  245. f = Foo("foo")
  246. self.assertRaises(TypeError, dir, f)
  247. # dir(type)
  248. self.assertIn("strip", dir(str))
  249. self.assertNotIn("__mro__", dir(str))
  250. # dir(obj)
  251. class Foo(object):
  252. def __init__(self):
  253. self.x = 7
  254. self.y = 8
  255. self.z = 9
  256. f = Foo()
  257. self.assertIn("y", dir(f))
  258. # dir(obj_no__dict__)
  259. class Foo(object):
  260. __slots__ = []
  261. f = Foo()
  262. self.assertIn("__repr__", dir(f))
  263. # dir(obj_no__class__with__dict__)
  264. # (an ugly trick to cause getattr(f, "__class__") to fail)
  265. class Foo(object):
  266. __slots__ = ["__class__", "__dict__"]
  267. def __init__(self):
  268. self.bar = "wow"
  269. f = Foo()
  270. self.assertNotIn("__repr__", dir(f))
  271. self.assertIn("bar", dir(f))
  272. # dir(obj_using __dir__)
  273. class Foo(object):
  274. def __dir__(self):
  275. return ["kan", "ga", "roo"]
  276. f = Foo()
  277. self.assertTrue(dir(f) == ["ga", "kan", "roo"])
  278. # dir(obj__dir__not_list)
  279. class Foo(object):
  280. def __dir__(self):
  281. return 7
  282. f = Foo()
  283. self.assertRaises(TypeError, dir, f)
  284. def test_divmod(self):
  285. self.assertEqual(divmod(12, 7), (1, 5))
  286. self.assertEqual(divmod(-12, 7), (-2, 2))
  287. self.assertEqual(divmod(12, -7), (-2, -2))
  288. self.assertEqual(divmod(-12, -7), (1, -5))
  289. self.assertEqual(divmod(12L, 7L), (1L, 5L))
  290. self.assertEqual(divmod(-12L, 7L), (-2L, 2L))
  291. self.assertEqual(divmod(12L, -7L), (-2L, -2L))
  292. self.assertEqual(divmod(-12L, -7L), (1L, -5L))
  293. self.assertEqual(divmod(12, 7L), (1, 5L))
  294. self.assertEqual(divmod(-12, 7L), (-2, 2L))
  295. self.assertEqual(divmod(12L, -7), (-2L, -2))
  296. self.assertEqual(divmod(-12L, -7), (1L, -5))
  297. self.assertEqual(divmod(-sys.maxint-1, -1),
  298. (sys.maxint+1, 0))
  299. self.assertTrue(not fcmp(divmod(3.25, 1.0), (3.0, 0.25)))
  300. self.assertTrue(not fcmp(divmod(-3.25, 1.0), (-4.0, 0.75)))
  301. self.assertTrue(not fcmp(divmod(3.25, -1.0), (-4.0, -0.75)))
  302. self.assertTrue(not fcmp(divmod(-3.25, -1.0), (3.0, -0.25)))
  303. self.assertRaises(TypeError, divmod)
  304. def test_eval(self):
  305. self.assertEqual(eval('1+1'), 2)
  306. self.assertEqual(eval(' 1+1\n'), 2)
  307. globals = {'a': 1, 'b': 2}
  308. locals = {'b': 200, 'c': 300}
  309. self.assertEqual(eval('a', globals) , 1)
  310. self.assertEqual(eval('a', globals, locals), 1)
  311. self.assertEqual(eval('b', globals, locals), 200)
  312. self.assertEqual(eval('c', globals, locals), 300)
  313. if have_unicode:
  314. self.assertEqual(eval(unicode('1+1')), 2)
  315. self.assertEqual(eval(unicode(' 1+1\n')), 2)
  316. globals = {'a': 1, 'b': 2}
  317. locals = {'b': 200, 'c': 300}
  318. if have_unicode:
  319. self.assertEqual(eval(unicode('a'), globals), 1)
  320. self.assertEqual(eval(unicode('a'), globals, locals), 1)
  321. self.assertEqual(eval(unicode('b'), globals, locals), 200)
  322. self.assertEqual(eval(unicode('c'), globals, locals), 300)
  323. bom = '\xef\xbb\xbf'
  324. self.assertEqual(eval(bom + 'a', globals, locals), 1)
  325. self.assertEqual(eval(unicode('u"\xc3\xa5"', 'utf8'), globals),
  326. unicode('\xc3\xa5', 'utf8'))
  327. self.assertRaises(TypeError, eval)
  328. self.assertRaises(TypeError, eval, ())
  329. def test_general_eval(self):
  330. # Tests that general mappings can be used for the locals argument
  331. class M:
  332. "Test mapping interface versus possible calls from eval()."
  333. def __getitem__(self, key):
  334. if key == 'a':
  335. return 12
  336. raise KeyError
  337. def keys(self):
  338. return list('xyz')
  339. m = M()
  340. g = globals()
  341. self.assertEqual(eval('a', g, m), 12)
  342. self.assertRaises(NameError, eval, 'b', g, m)
  343. self.assertEqual(eval('dir()', g, m), list('xyz'))
  344. self.assertEqual(eval('globals()', g, m), g)
  345. self.assertEqual(eval('locals()', g, m), m)
  346. self.assertRaises(TypeError, eval, 'a', m)
  347. class A:
  348. "Non-mapping"
  349. pass
  350. m = A()
  351. self.assertRaises(TypeError, eval, 'a', g, m)
  352. # Verify that dict subclasses work as well
  353. class D(dict):
  354. def __getitem__(self, key):
  355. if key == 'a':
  356. return 12
  357. return dict.__getitem__(self, key)
  358. def keys(self):
  359. return list('xyz')
  360. d = D()
  361. self.assertEqual(eval('a', g, d), 12)
  362. self.assertRaises(NameError, eval, 'b', g, d)
  363. self.assertEqual(eval('dir()', g, d), list('xyz'))
  364. self.assertEqual(eval('globals()', g, d), g)
  365. self.assertEqual(eval('locals()', g, d), d)
  366. # Verify locals stores (used by list comps)
  367. eval('[locals() for i in (2,3)]', g, d)
  368. eval('[locals() for i in (2,3)]', g, UserDict.UserDict())
  369. class SpreadSheet:
  370. "Sample application showing nested, calculated lookups."
  371. _cells = {}
  372. def __setitem__(self, key, formula):
  373. self._cells[key] = formula
  374. def __getitem__(self, key):
  375. return eval(self._cells[key], globals(), self)
  376. ss = SpreadSheet()
  377. ss['a1'] = '5'
  378. ss['a2'] = 'a1*6'
  379. ss['a3'] = 'a2*7'
  380. self.assertEqual(ss['a3'], 210)
  381. # Verify that dir() catches a non-list returned by eval
  382. # SF bug #1004669
  383. class C:
  384. def __getitem__(self, item):
  385. raise KeyError(item)
  386. def keys(self):
  387. return 'a'
  388. self.assertRaises(TypeError, eval, 'dir()', globals(), C())
  389. def test_filter(self):
  390. self.assertEqual(filter(lambda c: 'a' <= c <= 'z', 'Hello World'), 'elloorld')
  391. self.assertEqual(filter(None, [1, 'hello', [], [3], '', None, 9, 0]), [1, 'hello', [3], 9])
  392. self.assertEqual(filter(lambda x: x > 0, [1, -3, 9, 0, 2]), [1, 9, 2])
  393. self.assertEqual(filter(None, Squares(10)), [1, 4, 9, 16, 25, 36, 49, 64, 81])
  394. self.assertEqual(filter(lambda x: x%2, Squares(10)), [1, 9, 25, 49, 81])
  395. def identity(item):
  396. return 1
  397. filter(identity, Squares(5))
  398. self.assertRaises(TypeError, filter)
  399. class BadSeq(object):
  400. def __getitem__(self, index):
  401. if index<4:
  402. return 42
  403. raise ValueError
  404. self.assertRaises(ValueError, filter, lambda x: x, BadSeq())
  405. def badfunc():
  406. pass
  407. self.assertRaises(TypeError, filter, badfunc, range(5))
  408. # test bltinmodule.c::filtertuple()
  409. self.assertEqual(filter(None, (1, 2)), (1, 2))
  410. self.assertEqual(filter(lambda x: x>=3, (1, 2, 3, 4)), (3, 4))
  411. self.assertRaises(TypeError, filter, 42, (1, 2))
  412. # test bltinmodule.c::filterstring()
  413. self.assertEqual(filter(None, "12"), "12")
  414. self.assertEqual(filter(lambda x: x>="3", "1234"), "34")
  415. self.assertRaises(TypeError, filter, 42, "12")
  416. class badstr(str):
  417. def __getitem__(self, index):
  418. raise ValueError
  419. self.assertRaises(ValueError, filter, lambda x: x >="3", badstr("1234"))
  420. class badstr2(str):
  421. def __getitem__(self, index):
  422. return 42
  423. self.assertRaises(TypeError, filter, lambda x: x >=42, badstr2("1234"))
  424. class weirdstr(str):
  425. def __getitem__(self, index):
  426. return weirdstr(2*str.__getitem__(self, index))
  427. self.assertEqual(filter(lambda x: x>="33", weirdstr("1234")), "3344")
  428. class shiftstr(str):
  429. def __getitem__(self, index):
  430. return chr(ord(str.__getitem__(self, index))+1)
  431. self.assertEqual(filter(lambda x: x>="3", shiftstr("1234")), "345")
  432. if have_unicode:
  433. # test bltinmodule.c::filterunicode()
  434. self.assertEqual(filter(None, unicode("12")), unicode("12"))
  435. self.assertEqual(filter(lambda x: x>="3", unicode("1234")), unicode("34"))
  436. self.assertRaises(TypeError, filter, 42, unicode("12"))
  437. self.assertRaises(ValueError, filter, lambda x: x >="3", badstr(unicode("1234")))
  438. class badunicode(unicode):
  439. def __getitem__(self, index):
  440. return 42
  441. self.assertRaises(TypeError, filter, lambda x: x >=42, badunicode("1234"))
  442. class weirdunicode(unicode):
  443. def __getitem__(self, index):
  444. return weirdunicode(2*unicode.__getitem__(self, index))
  445. self.assertEqual(
  446. filter(lambda x: x>=unicode("33"), weirdunicode("1234")), unicode("3344"))
  447. class shiftunicode(unicode):
  448. def __getitem__(self, index):
  449. return unichr(ord(unicode.__getitem__(self, index))+1)
  450. self.assertEqual(
  451. filter(lambda x: x>=unicode("3"), shiftunicode("1234")),
  452. unicode("345")
  453. )
  454. def test_filter_subclasses(self):
  455. # test that filter() never returns tuple, str or unicode subclasses
  456. # and that the result always goes through __getitem__
  457. funcs = (None, bool, lambda x: True)
  458. class tuple2(tuple):
  459. def __getitem__(self, index):
  460. return 2*tuple.__getitem__(self, index)
  461. class str2(str):
  462. def __getitem__(self, index):
  463. return 2*str.__getitem__(self, index)
  464. inputs = {
  465. tuple2: {(): (), (1, 2, 3): (2, 4, 6)},
  466. str2: {"": "", "123": "112233"}
  467. }
  468. if have_unicode:
  469. class unicode2(unicode):
  470. def __getitem__(self, index):
  471. return 2*unicode.__getitem__(self, index)
  472. inputs[unicode2] = {
  473. unicode(): unicode(),
  474. unicode("123"): unicode("112233")
  475. }
  476. for (cls, inps) in inputs.iteritems():
  477. for (inp, exp) in inps.iteritems():
  478. # make sure the output goes through __getitem__
  479. # even if func is None
  480. self.assertEqual(
  481. filter(funcs[0], cls(inp)),
  482. filter(funcs[1], cls(inp))
  483. )
  484. for func in funcs:
  485. outp = filter(func, cls(inp))
  486. self.assertEqual(outp, exp)
  487. self.assertTrue(not isinstance(outp, cls))
  488. def test_getattr(self):
  489. import sys
  490. self.assertTrue(getattr(sys, 'stdout') is sys.stdout)
  491. self.assertRaises(TypeError, getattr, sys, 1)
  492. self.assertRaises(TypeError, getattr, sys, 1, "foo")
  493. self.assertRaises(TypeError, getattr)
  494. if have_unicode:
  495. self.assertRaises(UnicodeError, getattr, sys, unichr(sys.maxunicode))
  496. def test_hasattr(self):
  497. import sys
  498. self.assertTrue(hasattr(sys, 'stdout'))
  499. self.assertRaises(TypeError, hasattr, sys, 1)
  500. self.assertRaises(TypeError, hasattr)
  501. if have_unicode:
  502. self.assertRaises(UnicodeError, hasattr, sys, unichr(sys.maxunicode))
  503. # Check that hasattr allows SystemExit and KeyboardInterrupts by
  504. class A:
  505. def __getattr__(self, what):
  506. raise KeyboardInterrupt
  507. self.assertRaises(KeyboardInterrupt, hasattr, A(), "b")
  508. class B:
  509. def __getattr__(self, what):
  510. raise SystemExit
  511. self.assertRaises(SystemExit, hasattr, B(), "b")
  512. def test_hash(self):
  513. hash(None)
  514. self.assertEqual(hash(1), hash(1L))
  515. self.assertEqual(hash(1), hash(1.0))
  516. hash('spam')
  517. if have_unicode:
  518. self.assertEqual(hash('spam'), hash(unicode('spam')))
  519. hash((0,1,2,3))
  520. def f(): pass
  521. self.assertRaises(TypeError, hash, [])
  522. self.assertRaises(TypeError, hash, {})
  523. # Bug 1536021: Allow hash to return long objects
  524. class X:
  525. def __hash__(self):
  526. return 2**100
  527. self.assertEqual(type(hash(X())), int)
  528. class Y(object):
  529. def __hash__(self):
  530. return 2**100
  531. self.assertEqual(type(hash(Y())), int)
  532. class Z(long):
  533. def __hash__(self):
  534. return self
  535. self.assertEqual(hash(Z(42)), hash(42L))
  536. def test_hex(self):
  537. self.assertEqual(hex(16), '0x10')
  538. self.assertEqual(hex(16L), '0x10L')
  539. self.assertEqual(hex(-16), '-0x10')
  540. self.assertEqual(hex(-16L), '-0x10L')
  541. self.assertRaises(TypeError, hex, {})
  542. def test_id(self):
  543. id(None)
  544. id(1)
  545. id(1L)
  546. id(1.0)
  547. id('spam')
  548. id((0,1,2,3))
  549. id([0,1,2,3])
  550. id({'spam': 1, 'eggs': 2, 'ham': 3})
  551. # Test input() later, together with raw_input
  552. # test_int(): see test_int.py for int() tests.
  553. def test_intern(self):
  554. self.assertRaises(TypeError, intern)
  555. # This fails if the test is run twice with a constant string,
  556. # therefore append the run counter
  557. s = "never interned before " + str(numruns)
  558. self.assertTrue(intern(s) is s)
  559. s2 = s.swapcase().swapcase()
  560. self.assertTrue(intern(s2) is s)
  561. # Subclasses of string can't be interned, because they
  562. # provide too much opportunity for insane things to happen.
  563. # We don't want them in the interned dict and if they aren't
  564. # actually interned, we don't want to create the appearance
  565. # that they are by allowing intern() to succeed.
  566. class S(str):
  567. def __hash__(self):
  568. return 123
  569. self.assertRaises(TypeError, intern, S("abc"))
  570. # It's still safe to pass these strings to routines that
  571. # call intern internally, e.g. PyObject_SetAttr().
  572. s = S("abc")
  573. setattr(s, s, s)
  574. self.assertEqual(getattr(s, s), s)
  575. def test_iter(self):
  576. self.assertRaises(TypeError, iter)
  577. self.assertRaises(TypeError, iter, 42, 42)
  578. lists = [("1", "2"), ["1", "2"], "12"]
  579. if have_unicode:
  580. lists.append(unicode("12"))
  581. for l in lists:
  582. i = iter(l)
  583. self.assertEqual(i.next(), '1')
  584. self.assertEqual(i.next(), '2')
  585. self.assertRaises(StopIteration, i.next)
  586. def test_isinstance(self):
  587. class C:
  588. pass
  589. class D(C):
  590. pass
  591. class E:
  592. pass
  593. c = C()
  594. d = D()
  595. e = E()
  596. self.assertTrue(isinstance(c, C))
  597. self.assertTrue(isinstance(d, C))
  598. self.assertTrue(not isinstance(e, C))
  599. self.assertTrue(not isinstance(c, D))
  600. self.assertTrue(not isinstance('foo', E))
  601. self.assertRaises(TypeError, isinstance, E, 'foo')
  602. self.assertRaises(TypeError, isinstance)
  603. def test_issubclass(self):
  604. class C:
  605. pass
  606. class D(C):
  607. pass
  608. class E:
  609. pass
  610. c = C()
  611. d = D()
  612. e = E()
  613. self.assertTrue(issubclass(D, C))
  614. self.assertTrue(issubclass(C, C))
  615. self.assertTrue(not issubclass(C, D))
  616. self.assertRaises(TypeError, issubclass, 'foo', E)
  617. self.assertRaises(TypeError, issubclass, E, 'foo')
  618. self.assertRaises(TypeError, issubclass)
  619. def test_len(self):
  620. self.assertEqual(len('123'), 3)
  621. self.assertEqual(len(()), 0)
  622. self.assertEqual(len((1, 2, 3, 4)), 4)
  623. self.assertEqual(len([1, 2, 3, 4]), 4)
  624. self.assertEqual(len({}), 0)
  625. self.assertEqual(len({'a':1, 'b': 2}), 2)
  626. class BadSeq:
  627. def __len__(self):
  628. raise ValueError
  629. self.assertRaises(ValueError, len, BadSeq())
  630. self.assertRaises(TypeError, len, 2)
  631. class ClassicStyle: pass
  632. class NewStyle(object): pass
  633. self.assertRaises(AttributeError, len, ClassicStyle())
  634. self.assertRaises(TypeError, len, NewStyle())
  635. def test_map(self):
  636. self.assertEqual(
  637. map(None, 'hello world'),
  638. ['h','e','l','l','o',' ','w','o','r','l','d']
  639. )
  640. self.assertEqual(
  641. map(None, 'abcd', 'efg'),
  642. [('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', None)]
  643. )
  644. self.assertEqual(
  645. map(None, range(10)),
  646. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  647. )
  648. self.assertEqual(
  649. map(lambda x: x*x, range(1,4)),
  650. [1, 4, 9]
  651. )
  652. try:
  653. from math import sqrt
  654. except ImportError:
  655. def sqrt(x):
  656. return pow(x, 0.5)
  657. self.assertEqual(
  658. map(lambda x: map(sqrt,x), [[16, 4], [81, 9]]),
  659. [[4.0, 2.0], [9.0, 3.0]]
  660. )
  661. self.assertEqual(
  662. map(lambda x, y: x+y, [1,3,2], [9,1,4]),
  663. [10, 4, 6]
  664. )
  665. def plus(*v):
  666. accu = 0
  667. for i in v: accu = accu + i
  668. return accu
  669. self.assertEqual(
  670. map(plus, [1, 3, 7]),
  671. [1, 3, 7]
  672. )
  673. self.assertEqual(
  674. map(plus, [1, 3, 7], [4, 9, 2]),
  675. [1+4, 3+9, 7+2]
  676. )
  677. self.assertEqual(
  678. map(plus, [1, 3, 7], [4, 9, 2], [1, 1, 0]),
  679. [1+4+1, 3+9+1, 7+2+0]
  680. )
  681. self.assertEqual(
  682. map(None, Squares(10)),
  683. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  684. )
  685. self.assertEqual(
  686. map(int, Squares(10)),
  687. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  688. )
  689. self.assertEqual(
  690. map(None, Squares(3), Squares(2)),
  691. [(0,0), (1,1), (4,None)]
  692. )
  693. self.assertEqual(
  694. map(max, Squares(3), Squares(2)),
  695. [0, 1, 4]
  696. )
  697. self.assertRaises(TypeError, map)
  698. self.assertRaises(TypeError, map, lambda x: x, 42)
  699. self.assertEqual(map(None, [42]), [42])
  700. class BadSeq:
  701. def __getitem__(self, index):
  702. raise ValueError
  703. self.assertRaises(ValueError, map, lambda x: x, BadSeq())
  704. def badfunc(x):
  705. raise RuntimeError
  706. self.assertRaises(RuntimeError, map, badfunc, range(5))
  707. def test_max(self):
  708. self.assertEqual(max('123123'), '3')
  709. self.assertEqual(max(1, 2, 3), 3)
  710. self.assertEqual(max((1, 2, 3, 1, 2, 3)), 3)
  711. self.assertEqual(max([1, 2, 3, 1, 2, 3]), 3)
  712. self.assertEqual(max(1, 2L, 3.0), 3.0)
  713. self.assertEqual(max(1L, 2.0, 3), 3)
  714. self.assertEqual(max(1.0, 2, 3L), 3L)
  715. for stmt in (
  716. "max(key=int)", # no args
  717. "max(1, key=int)", # single arg not iterable
  718. "max(1, 2, keystone=int)", # wrong keyword
  719. "max(1, 2, key=int, abc=int)", # two many keywords
  720. "max(1, 2, key=1)", # keyfunc is not callable
  721. ):
  722. try:
  723. exec(stmt) in globals()
  724. except TypeError:
  725. pass
  726. else:
  727. self.fail(stmt)
  728. self.assertEqual(max((1,), key=neg), 1) # one elem iterable
  729. self.assertEqual(max((1,2), key=neg), 1) # two elem iterable
  730. self.assertEqual(max(1, 2, key=neg), 1) # two elems
  731. data = [random.randrange(200) for i in range(100)]
  732. keys = dict((elem, random.randrange(50)) for elem in data)
  733. f = keys.__getitem__
  734. self.assertEqual(max(data, key=f),
  735. sorted(reversed(data), key=f)[-1])
  736. def test_min(self):
  737. self.assertEqual(min('123123'), '1')
  738. self.assertEqual(min(1, 2, 3), 1)
  739. self.assertEqual(min((1, 2, 3, 1, 2, 3)), 1)
  740. self.assertEqual(min([1, 2, 3, 1, 2, 3]), 1)
  741. self.assertEqual(min(1, 2L, 3.0), 1)
  742. self.assertEqual(min(1L, 2.0, 3), 1L)
  743. self.assertEqual(min(1.0, 2, 3L), 1.0)
  744. self.assertRaises(TypeError, min)
  745. self.assertRaises(TypeError, min, 42)
  746. self.assertRaises(ValueError, min, ())
  747. class BadSeq:
  748. def __getitem__(self, index):
  749. raise ValueError
  750. self.assertRaises(ValueError, min, BadSeq())
  751. class BadNumber:
  752. def __cmp__(self, other):
  753. raise ValueError
  754. self.assertRaises(ValueError, min, (42, BadNumber()))
  755. for stmt in (
  756. "min(key=int)", # no args
  757. "min(1, key=int)", # single arg not iterable
  758. "min(1, 2, keystone=int)", # wrong keyword
  759. "min(1, 2, key=int, abc=int)", # two many keywords
  760. "min(1, 2, key=1)", # keyfunc is not callable
  761. ):
  762. try:
  763. exec(stmt) in globals()
  764. except TypeError:
  765. pass
  766. else:
  767. self.fail(stmt)
  768. self.assertEqual(min((1,), key=neg), 1) # one elem iterable
  769. self.assertEqual(min((1,2), key=neg), 2) # two elem iterable
  770. self.assertEqual(min(1, 2, key=neg), 2) # two elems
  771. data = [random.randrange(200) for i in range(100)]
  772. keys = dict((elem, random.randrange(50)) for elem in data)
  773. f = keys.__getitem__
  774. self.assertEqual(min(data, key=f),
  775. sorted(data, key=f)[0])
  776. def test_next(self):
  777. it = iter(range(2))
  778. self.assertEqual(next(it), 0)
  779. self.assertEqual(next(it), 1)
  780. self.assertRaises(StopIteration, next, it)
  781. self.assertRaises(StopIteration, next, it)
  782. self.assertEqual(next(it, 42), 42)
  783. class Iter(object):
  784. def __iter__(self):
  785. return self
  786. def next(self):
  787. raise StopIteration
  788. it = iter(Iter())
  789. self.assertEqual(next(it, 42), 42)
  790. self.assertRaises(StopIteration, next, it)
  791. def gen():
  792. yield 1
  793. return
  794. it = gen()
  795. self.assertEqual(next(it), 1)
  796. self.assertRaises(StopIteration, next, it)
  797. self.assertEqual(next(it, 42), 42)
  798. def test_oct(self):
  799. self.assertEqual(oct(100), '0144')
  800. self.assertEqual(oct(100L), '0144L')
  801. self.assertEqual(oct(-100), '-0144')
  802. self.assertEqual(oct(-100L), '-0144L')
  803. self.assertRaises(TypeError, oct, ())
  804. def write_testfile(self):
  805. # NB the first 4 lines are also used to test input and raw_input, below
  806. fp = open(TESTFN, 'w')
  807. try:
  808. fp.write('1+1\n')
  809. fp.write('1+1\n')
  810. fp.write('The quick brown fox jumps over the lazy dog')
  811. fp.write('.\n')
  812. fp.write('Dear John\n')
  813. fp.write('XXX'*100)
  814. fp.write('YYY'*100)
  815. finally:
  816. fp.close()
  817. def test_open(self):
  818. self.write_testfile()
  819. fp = open(TESTFN, 'r')
  820. try:
  821. self.assertEqual(fp.readline(4), '1+1\n')
  822. self.assertEqual(fp.readline(4), '1+1\n')
  823. self.assertEqual(fp.readline(), 'The quick brown fox jumps over the lazy dog.\n')
  824. self.assertEqual(fp.readline(4), 'Dear')
  825. self.assertEqual(fp.readline(100), ' John\n')
  826. self.assertEqual(fp.read(300), 'XXX'*100)
  827. self.assertEqual(fp.read(1000), 'YYY'*100)
  828. finally:
  829. fp.close()
  830. unlink(TESTFN)
  831. def test_ord(self):
  832. self.assertEqual(ord(' '), 32)
  833. self.assertEqual(ord('A'), 65)
  834. self.assertEqual(ord('a'), 97)
  835. if have_unicode:
  836. self.assertEqual(ord(unichr(sys.maxunicode)), sys.maxunicode)
  837. self.assertRaises(TypeError, ord, 42)
  838. if have_unicode:
  839. self.assertRaises(TypeError, ord, unicode("12"))
  840. def test_pow(self):
  841. self.assertEqual(pow(0,0), 1)
  842. self.assertEqual(pow(0,1), 0)
  843. self.assertEqual(pow(1,0), 1)
  844. self.assertEqual(pow(1,1), 1)
  845. self.assertEqual(pow(2,0), 1)
  846. self.assertEqual(pow(2,10), 1024)
  847. self.assertEqual(pow(2,20), 1024*1024)
  848. self.assertEqual(pow(2,30), 1024*1024*1024)
  849. self.assertEqual(pow(-2,0), 1)
  850. self.assertEqual(pow(-2,1), -2)
  851. self.assertEqual(pow(-2,2), 4)
  852. self.assertEqual(pow(-2,3), -8)
  853. self.assertEqual(pow(0L,0), 1)
  854. self.assertEqual(pow(0L,1), 0)
  855. self.assertEqual(pow(1L,0), 1)
  856. self.assertEqual(pow(1L,1), 1)
  857. self.assertEqual(pow(2L,0), 1)
  858. self.assertEqual(pow(2L,10), 1024)
  859. self.assertEqual(pow(2L,20), 1024*1024)
  860. self.assertEqual(pow(2L,30), 1024*1024*1024)
  861. self.assertEqual(pow(-2L,0), 1)
  862. self.assertEqual(pow(-2L,1), -2)
  863. self.assertEqual(pow(-2L,2), 4)
  864. self.assertEqual(pow(-2L,3), -8)
  865. self.assertAlmostEqual(pow(0.,0), 1.)
  866. self.assertAlmostEqual(pow(0.,1), 0.)
  867. self.assertAlmostEqual(pow(1.,0), 1.)
  868. self.assertAlmostEqual(pow(1.,1), 1.)
  869. self.assertAlmostEqual(pow(2.,0), 1.)
  870. self.assertAlmostEqual(pow(2.,10), 1024.)
  871. self.assertAlmostEqual(pow(2.,20), 1024.*1024.)
  872. self.assertAlmostEqual(pow(2.,30), 1024.*1024.*1024.)
  873. self.assertAlmostEqual(pow(-2.,0), 1.)
  874. self.assertAlmostEqual(pow(-2.,1), -2.)
  875. self.assertAlmostEqual(pow(-2.,2), 4.)
  876. self.assertAlmostEqual(pow(-2.,3), -8.)
  877. for x in 2, 2L, 2.0:
  878. for y in 10, 10L, 10.0:
  879. for z in 1000, 1000L, 1000.0:
  880. if isinstance(x, float) or \
  881. isinstance(y, float) or \
  882. isinstance(z, float):
  883. self.assertRaises(TypeError, pow, x, y, z)
  884. else:
  885. self.assertAlmostEqual(pow(x, y, z), 24.0)
  886. self.assertRaises(TypeError, pow, -1, -2, 3)
  887. self.assertRaises(ValueError, pow, 1, 2, 0)
  888. self.assertRaises(TypeError, pow, -1L, -2L, 3L)
  889. self.assertRaises(ValueError, pow, 1L, 2L, 0L)
  890. # Will return complex in 3.0:
  891. self.assertRaises(ValueError, pow, -342.43, 0.234)
  892. self.assertRaises(TypeError, pow)
  893. def test_range(self):
  894. self.assertEqual(range(3), [0, 1, 2])
  895. self.assertEqual(range(1, 5), [1, 2, 3, 4])
  896. self.assertEqual(range(0), [])
  897. self.assertEqual(range(-3), [])
  898. self.assertEqual(range(1, 10, 3), [1, 4, 7])
  899. self.assertEqual(range(5, -5, -3), [5, 2, -1, -4])
  900. # Now test range() with longs
  901. self.assertEqual(range(-2**100), [])
  902. self.assertEqual(range(0, -2**100), [])
  903. self.assertEqual(range(0, 2**100, -1), [])
  904. self.assertEqual(range(0, 2**100, -1), [])
  905. a = long(10 * sys.maxint)
  906. b = long(100 * sys.maxint)
  907. c = long(50 * sys.maxint)
  908. self.assertEqual(range(a, a+2), [a, a+1])
  909. self.assertEqual(range(a+2, a, -1L), [a+2, a+1])
  910. self.assertEqual(range(a+4, a, -2), [a+4, a+2])
  911. seq = range(a, b, c)
  912. self.assertIn(a, seq)
  913. self.assertNotIn(b, seq)
  914. self.assertEqual(len(seq), 2)
  915. seq = range(b, a, -c)
  916. self.assertIn(b, seq)
  917. self.assertNotIn(a, seq)
  918. self.assertEqual(len(seq), 2)
  919. seq = range(-a, -b, -c)
  920. self.assertIn(-a, seq)
  921. self.assertNotIn(-b, seq)
  922. self.assertEqual(len(seq), 2)
  923. self.assertRaises(TypeError, range)
  924. self.assertRaises(TypeError, range, 1, 2, 3, 4)
  925. self.assertRaises(ValueError, range, 1, 2, 0)
  926. self.assertRaises(ValueError, range, a, a + 1, long(0))
  927. class badzero(int):
  928. def __cmp__(self, other):
  929. raise RuntimeError
  930. __hash__ = None # Invalid cmp makes this unhashable
  931. self.assertRaises(RuntimeError, range, a, a + 1, badzero(1))
  932. # Reject floats.
  933. self.assertRaises(TypeError, range, 1., 1., 1.)
  934. self.assertRaises(TypeError, range, 1e100, 1e101, 1e101)
  935. self.assertRaises(TypeError, range, 0, "spam")
  936. self.assertRaises(TypeError, range, 0, 42, "spam")
  937. self.assertRaises(OverflowError, range, -sys.maxint, sys.maxint)
  938. self.assertRaises(OverflowError, range, 0, 2*sys.maxint)
  939. bignum = 2*sys.maxint
  940. smallnum = 42
  941. # Old-style user-defined class with __int__ method
  942. class I0:
  943. def __init__(self, n):
  944. self.n = int(n)
  945. def __int__(self):
  946. return self.n
  947. self.assertEqual(range(I0(bignum), I0(bignum + 1)), [bignum])
  948. self.assertEqual(range(I0(smallnum), I0(smallnum + 1)), [smallnum])
  949. # New-style user-defined class with __int__ method
  950. class I1(object):
  951. def __init__(self, n):
  952. self.n = int(n)
  953. def __int__(self):
  954. return self.n
  955. self.assertEqual(range(I1(bignum), I1(bignum + 1)), [bignum])
  956. self.assertEqual(range(I1(smallnum), I1(smallnum + 1)), [smallnum])
  957. # New-style user-defined class with failing __int__ method
  958. class IX(object):
  959. def __int__(self):
  960. raise RuntimeError
  961. self.assertRaises(RuntimeError, range, IX())
  962. # New-style user-defined class with invalid __int__ method
  963. class IN(object):
  964. def __int__(self):
  965. return "not a number"
  966. self.assertRaises(TypeError, range, IN())
  967. # Exercise various combinations of bad arguments, to check
  968. # refcounting logic
  969. self.assertRaises(TypeError, range, 0.0)
  970. self.assertRaises(TypeError, range, 0, 0.0)
  971. self.assertRaises(TypeError, range, 0.0, 0)
  972. self.assertRaises(TypeError, range, 0.0, 0.0)
  973. self.assertRaises(TypeError, range, 0, 0, 1.0)
  974. self.assertRaises(TypeError, range, 0, 0.0, 1)
  975. self.assertRaises(TypeError, range, 0, 0.0, 1.0)
  976. self.assertRaises(TypeError, range, 0.0, 0, 1)
  977. self.assertRaises(TypeError, range, 0.0, 0, 1.0)
  978. self.assertRaises(TypeError, range, 0.0, 0.0, 1)
  979. self.assertRaises(TypeError, range, 0.0, 0.0, 1.0)
  980. def test_input_and_raw_input(self):
  981. self.write_testfile()
  982. fp = open(TESTFN, 'r')
  983. savestdin = sys.stdin
  984. savestdout = sys.stdout # Eats the echo
  985. try:
  986. sys.stdin = fp
  987. sys.stdout = BitBucket()
  988. self.assertEqual(input(), 2)
  989. self.assertEqual(input('testing\n'), 2)
  990. self.assertEqual(raw_input(), 'The quick brown fox jumps over the lazy dog.')
  991. self.assertEqual(raw_input('testing\n'), 'Dear John')
  992. # SF 1535165: don't segfault on closed stdin
  993. # sys.stdout must be a regular file for triggering
  994. sys.stdout = savestdout
  995. sys.stdin.close()
  996. self.assertRaises(ValueError, input)
  997. sys.stdout = BitBucket()
  998. sys.stdin = cStringIO.StringIO("NULL\0")
  999. self.assertRaises(TypeError, input, 42, 42)
  1000. sys.stdin = cStringIO.StringIO(" 'whitespace'")
  1001. self.assertEqual(input(), 'whitespace')
  1002. sys.stdin = cStringIO.StringIO()
  1003. self.assertRaises(EOFError, input)
  1004. # SF 876178: make sure input() respect future options.
  1005. sys.stdin = cStringIO.StringIO('1/2')
  1006. sys.stdout = cStringIO.StringIO()
  1007. exec compile('print input()', 'test_builtin_tmp', 'exec')
  1008. sys.stdin.seek(0, 0)
  1009. exec compile('from __future__ import division;print input()',
  1010. 'test_builtin_tmp', 'exec')
  1011. sys.stdin.seek(0, 0)
  1012. exec compile('print input()', 'test_builtin_tmp', 'exec')
  1013. # The result we expect depends on whether new division semantics
  1014. # are already in effect.
  1015. if 1/2 == 0:
  1016. # This test was compiled with old semantics.
  1017. expected = ['0', '0.5', '0']
  1018. else:
  1019. # This test was compiled with new semantics (e.g., -Qnew
  1020. # was given on the command line.
  1021. expected = ['0.5', '0.5', '0.5']
  1022. self.assertEqual(sys.stdout.getvalue().splitlines(), expected)
  1023. del sys.stdout
  1024. self.assertRaises(RuntimeError, input, 'prompt')
  1025. del sys.stdin
  1026. self.assertRaises(RuntimeError, input, 'prompt')
  1027. finally:
  1028. sys.stdin = savestdin
  1029. sys.stdout = savestdout
  1030. fp.close()
  1031. unlink(TESTFN)
  1032. def test_reduce(self):
  1033. add = lambda x, y: x+y
  1034. self.assertEqual(reduce(add, ['a', 'b', 'c'], ''), 'abc')
  1035. self.assertEqual(
  1036. reduce(add, [['a', 'c'], [], ['d', 'w']], []),
  1037. ['a','c','d','w']
  1038. )
  1039. self.assertEqual(reduce(lambda x, y: x*y, range(2,8), 1), 5040)
  1040. self.assertEqual(
  1041. reduce(lambda x, y: x*y, range(2,21), 1L),
  1042. 2432902008176640000L
  1043. )
  1044. self.assertEqual(reduce(add, Squares(10)), 285)
  1045. self.assertEqual(reduce(add, Squares(10), 0), 285)
  1046. self.assertEqual(reduce(add, Squares(0), 0), 0)
  1047. self.assertRaises(TypeError, reduce)
  1048. self.assertRaises(TypeError, reduce, 42)
  1049. self.assertRaises(TypeError, reduce, 42, 42)
  1050. self.assertRaises(TypeError, reduce, 42, 42, 42)
  1051. self.assertRaises(TypeError, reduce, None, range(5))
  1052. self.assertRaises(TypeError, reduce, add, 42)
  1053. self.assertEqual(reduce(42, "1"), "1") # func is never called with one item
  1054. self.assertEqual(reduce(42, "", "1"), "1") # func is never called with one item
  1055. self.assertRaises(TypeError, reduce, 42, (42, 42))
  1056. self.assertRaises(TypeError, reduce, add, []) # arg 2 must not be empty sequence with no initial value
  1057. self.assertRaises(TypeError, reduce, add, "")
  1058. self.assertRaises(TypeError, reduce, add, ())
  1059. self.assertEqual(reduce(add, [], None), None)
  1060. self.assertEqual(reduce(add, [], 42), 42)
  1061. class BadSeq:
  1062. def __getitem__(self, index):
  1063. raise ValueError
  1064. self.assertRaises(ValueError, reduce, 42, BadSeq())
  1065. def test_reload(self):
  1066. import marshal
  1067. reload(marshal)
  1068. import string
  1069. reload(string)
  1070. ## import sys
  1071. ## self.assertRaises(ImportError, reload, sys)
  1072. def test_repr(self):
  1073. self.assertEqual(repr(''), '\'\'')
  1074. self.assertEqual(repr(0), '0')
  1075. self.assertEqual(repr(0L), '0L')
  1076. 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. def test_round(self):
  1086. self.assertEqual(round(0.0), 0.0)
  1087. self.assertEqual(type(round(0.0)), float) # Will be int in 3.0.
  1088. self.assertEqual(round(1.0), 1.0)
  1089. self.assertEqual(round(10.0), 10.0)
  1090. self.assertEqual(round(1000000000.0), 1000000000.0)
  1091. self.assertEqual(round(1e20), 1e20)
  1092. self.assertEqual(round(-1.0), -1.0)
  1093. self.assertEqual(round(-10.0), -10.0)
  1094. self.assertEqual(round(-1000000000.0), -1000000000.0)
  1095. self.assertEqual(round(-1e20), -1e20)
  1096. self.assertEqual(round(0.1), 0.0)
  1097. self.assertEqual(round(1.1), 1.0)
  1098. self.assertEqual(round(10.1), 10.0)
  1099. self.assertEqual(round(1000000000.1), 1000000000.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. self.assertEqual(round(0.9), 1.0)
  1104. self.assertEqual(round(9.9), 10.0)
  1105. self.assertEqual(round(999999999.9), 1000000000.0)
  1106. self.assertEqual(round(-0.9), -1.0)
  1107. self.assertEqual(round(-9.9), -10.0)
  1108. self.assertEqual(round(-999999999.9), -1000000000.0)
  1109. self.assertEqual(round(-8.0, -1), -10.0)
  1110. self.assertEqual(type(round(-8.0, -1)), float)
  1111. self.assertEqual(type(round(-8.0, 0)), float)
  1112. self.assertEqual(type(round(-8.0, 1)), float)
  1113. # Check half rounding behaviour.
  1114. self.assertEqual(round(5.5), 6)
  1115. self.assertEqual(round(6.5), 7)
  1116. self.assertEqual(round(-5.5), -6)
  1117. self.assertEqual(round(-6.5), -7)
  1118. # Check behavior on ints
  1119. self.assertEqual(round(0), 0)
  1120. self.assertEqual(round(8), 8)
  1121. self.assertEqual(round(-8), -8)
  1122. self.assertEqual(type(round(0)), float) # Will be int in 3.0.
  1123. self.assertEqual(type(round(-8, -1)), float)
  1124. self.assertEqual(type(round(-8, 0)), float)
  1125. self.assertEqual(type(round(-8, 1)), float)
  1126. # test new kwargs
  1127. self.assertEqual(round(number=-8.0, ndigits=-1), -10.0)
  1128. self.assertRaises(TypeError, round)
  1129. # test generic rounding delegation for reals
  1130. class TestRound(object):
  1131. def __float__(self):
  1132. return 23.0
  1133. class TestNoRound(object):
  1134. pass
  1135. self.assertEqual(round(TestRound()), 23)
  1136. self.assertRaises(TypeError, round, 1, 2, 3)
  1137. self.assertRaises(TypeError, round, TestNoRound())
  1138. t = TestNoRound()
  1139. t.__float__ = lambda *args: args
  1140. self.assertRaises(TypeError, round, t)
  1141. self.assertRaises(TypeError, round, t, 0)
  1142. # Some versions of glibc for alpha have a bug that affects
  1143. # float -> integer rounding (floor, ceil, rint, round) for
  1144. # values in the range [2**52, 2**53). See:
  1145. #
  1146. # http://sources.redhat.com/bugzilla/show_bug.cgi?id=5350
  1147. #
  1148. # We skip this test on Linux/alpha if it would fail.
  1149. linux_alpha = (platform.system().startswith('Linux') and
  1150. platform.machine().startswith('alpha'))
  1151. system_round_bug = round(5e15+1) != 5e15+1
  1152. @unittest.skipIf(linux_alpha and system_round_bug,
  1153. "test will fail; failure is probably due to a "
  1154. "buggy system round function")
  1155. def test_round_large(self):
  1156. # Issue #1869: integral floats should remain unchanged
  1157. self.assertEqual(round(5e15-1), 5e15-1)
  1158. self.assertEqual(round(5e15), 5e15)
  1159. self.assertEqual(round(5e15+1), 5e15+1)
  1160. self.assertEqual(round(5e15+2), 5e15+2)
  1161. self.assertEqual(round(5e15+3), 5e15+3)
  1162. def test_setattr(self):
  1163. setattr(sys, 'spam', 1)
  1164. self.assertEqual(sys.spam, 1)
  1165. self.assertRaises(TypeError, setattr, sys, 1, 'spam')
  1166. self.assertRaises(TypeError, setattr)
  1167. def test_sum(self):
  1168. self.assertEqual(sum([]), 0)
  1169. self.assertEqual(sum(range(2,8)), 27)
  1170. self.assertEqual(sum(iter(range(2,8))), 27)
  1171. self.assertEqual(sum(Squares(10)), 285)
  1172. self.assertEqual(sum(iter(Squares(10))), 285)
  1173. self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
  1174. self.assertRaises(TypeError, sum)
  1175. self.assertRaises(TypeError, sum, 42)
  1176. self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
  1177. self.assertRaises(TypeError, sum, ['a', 'b', 'c'], '')
  1178. self.assertRaises(TypeError, sum, [[1], [2], [3]])
  1179. self.assertRaises(TypeError, sum, [{2:3}])
  1180. self.assertRaises(TypeError, sum, [{2:3}]*2, {2:3})
  1181. class BadSeq:
  1182. def __getitem__(self, index):
  1183. raise ValueError
  1184. self.assertRaises(ValueError, sum, BadSeq())
  1185. empty = []
  1186. sum(([x] for x in range(10)), empty)
  1187. self.assertEqual(empty, [])
  1188. def test_type(self):
  1189. self.assertEqual(type(''), type('123'))
  1190. self.assertNotEqual(type(''), type(()))
  1191. def test_unichr(self):
  1192. if have_unicode:
  1193. self.assertEqual(unichr(32), unicode(' '))
  1194. self.assertEqual(unichr(65), unicode('A'))
  1195. self.assertEqual(unichr(97), unicode('a'))
  1196. self.assertEqual(
  1197. unichr(sys.maxunicode),
  1198. unicode('\\U%08x' % (sys.maxunicode), 'unicode-escape')
  1199. )
  1200. self.assertRaises(ValueError, unichr, sys.maxunicode+1)
  1201. self.assertRaises(TypeError, unichr)
  1202. self.assertRaises((OverflowError, ValueError), unichr, 2**32)
  1203. # We don't want self in vars(), so these are static methods
  1204. @staticmethod
  1205. def get_vars_f0():
  1206. return vars()
  1207. @staticmethod
  1208. def get_vars_f2():
  1209. BuiltinTest.get_vars_f0()
  1210. a = 1
  1211. b = 2
  1212. return vars()
  1213. class C_get_vars(object):
  1214. def getDict(self):
  1215. return {'a':2}
  1216. __dict__ = property(fget=getDict)
  1217. def test_vars(self):
  1218. self.assertEqual(set(vars()), set(dir()))
  1219. import sys
  1220. self.assertEqual(set(vars(sys)), set(dir(sys)))
  1221. self.assertEqual(self.get_vars_f0(), {})
  1222. self.assertEqual(self.get_vars_f2(), {'a': 1, 'b': 2})
  1223. self.assertRaises(TypeError, vars, 42, 42)
  1224. self.assertRaises(TypeError, vars, 42)
  1225. self.assertEqual(vars(self.C_get_vars()), {'a':2})
  1226. def test_zip(self):
  1227. a = (1, 2, 3)
  1228. b = (4, 5, 6)
  1229. t = [(1, 4), (2, 5), (3, 6)]
  1230. self.assertEqual(zip(a, b), t)
  1231. b = [4, 5, 6]
  1232. self.assertEqual(zip(a, b), t)
  1233. b = (4, 5, 6, 7)
  1234. self.assertEqual(zip(a, b), t)
  1235. class I:
  1236. def __getitem__(self, i):
  1237. if i < 0 or i > 2: raise IndexError
  1238. return i + 4
  1239. self.assertEqual(zip(a, I()), t)
  1240. self.assertEqual(zip(), [])
  1241. self.assertEqual(zip(*[]), [])
  1242. self.assertRaises(TypeError, zip, None)
  1243. class G:
  1244. pass
  1245. self.assertRaises(TypeError, zip, a, G())
  1246. # Make sure zip doesn't try to allocate a billion elements for the
  1247. # result list when one of its arguments doesn't say how long it is.
  1248. # A MemoryError is the most likely failure mode.
  1249. class SequenceWithoutALength:
  1250. def __getitem__(self, i):
  1251. if i == 5:
  1252. raise IndexError
  1253. else:
  1254. return i
  1255. self.assertEqual(
  1256. zip(SequenceWithoutALength(), xrange(2**30)),
  1257. list(enumerate(range(5)))
  1258. )
  1259. class BadSeq:
  1260. def __getitem__(self, i):
  1261. if i == 5:
  1262. raise ValueError
  1263. else:
  1264. return i
  1265. self.assertRaises(ValueError, zip, BadSeq(), BadSeq())
  1266. def test_format(self):
  1267. # Test the basic machinery of the format() builtin. Don't test
  1268. # the specifics of the various formatters
  1269. self.assertEqual(format(3, ''), '3')
  1270. # Returns some classes to use for various tests. There's
  1271. # an old-style version, and a new-style version
  1272. def classes_new():
  1273. class A(object):
  1274. def __init__(self, x):
  1275. self.x = x
  1276. def __format__(self, format_spec):
  1277. return str(self.x) + format_spec
  1278. class DerivedFromA(A):
  1279. pass
  1280. class Simple(object): pass
  1281. class DerivedFromSimple(Simple):
  1282. def __init__(self, x):
  1283. self.x = x
  1284. def __format__(self, format_spec):
  1285. return str(self.x) + format_spec
  1286. class DerivedFromSimple2(DerivedFromSimple): pass
  1287. return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
  1288. # In 3.0, classes_classic has the same meaning as classes_new
  1289. def classes_classic():
  1290. class A:
  1291. def __init__(self, x):
  1292. self.x = x
  1293. def __format__(self, format_spec):
  1294. return str(self.x) + format_spec
  1295. class DerivedFromA(A):
  1296. pass
  1297. class Simple: pass
  1298. class DerivedFromSimple(Simple):
  1299. def __init__(self, x):
  1300. self.x = x
  1301. def __format__(self, format_spec):
  1302. return str(self.x) + format_spec
  1303. class DerivedFromSimple2(DerivedFromSimple): pass
  1304. return A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2
  1305. def class_test(A, DerivedFromA, DerivedFromSimple, DerivedFromSimple2):
  1306. self.assertEqual(format(A(3), 'spec'), '3spec')
  1307. self.assertEqual(format(DerivedFromA(4), 'spec'), '4spec')
  1308. self.assertEqual(format(DerivedFromSimple(5), 'abc'), '5abc')
  1309. self.assertEqual(format(DerivedFromSimple2(10), 'abcdef'),
  1310. '10abcdef')
  1311. class_test(*classes_new())
  1312. class_test(*classes_classic())
  1313. def empty_format_spec(value):
  1314. # test that:
  1315. # format(x, '') == str(x)
  1316. # format(x) == str(x)
  1317. self.assertEqual(format(value, ""), str(value))
  1318. self.assertEqual(format(value), str(value))
  1319. # for builtin types, format(x, "") == str(x)
  1320. empty_format_spec(17**13)
  1321. empty_format_spec(1.0)
  1322. empty_format_spec(3.1415e104)
  1323. empty_format_spec(-3.1415e104)
  1324. empty_format_spec(3.1415e-104)
  1325. empty_format_spec(-3.1415e-104)
  1326. empty_format_spec(object)
  1327. empty_format_spec(None)
  1328. # TypeError because self.__format__ returns the wrong type
  1329. class BadFormatResult:
  1330. def __format__(self, format_spec):
  1331. return 1.0
  1332. self.assertRaises(TypeError, format, BadFormatResult(), "")
  1333. # TypeError because format_spec is not unicode or str
  1334. self.assertRaises(TypeError, format, object(), 4)
  1335. self.assertRaises(TypeError, format, object(), object())
  1336. # tests for object.__format__ really belong elsewhere, but
  1337. # there's no good place to put them
  1338. x = object().__format__('')
  1339. self.assertTrue(x.startswith('<object object at'))
  1340. # first argument to object.__format__ must be string
  1341. self.assertRaises(TypeError, object().__format__, 3)
  1342. self.assertRaises(TypeError, object().__format__, object())
  1343. self.assertRaises(TypeError, object().__format__, None)
  1344. # --------------------------------------------------------------------
  1345. # Issue #7994: object.__format__ with a non-empty format string is
  1346. # pending deprecated
  1347. def test_deprecated_format_string(obj, fmt_str, should_raise_warning):
  1348. with warnings.catch_warnings(record=True) as w:
  1349. warnings.simplefilter("always", PendingDeprecationWarning)
  1350. format(obj, fmt_str)
  1351. if should_raise_warning:
  1352. self.assertEqual(len(w), 1)
  1353. self.assertIsInstance(w[0].message, PendingDeprecationWarning)
  1354. self.assertIn('object.__format__ with a non-empty format '
  1355. 'string', str(w[0].message))
  1356. else:
  1357. self.assertEqual(len(w), 0)
  1358. fmt_strs = ['', 's', u'', u's']
  1359. class A:
  1360. def __format__(self, fmt_str):
  1361. return format('', fmt_str)
  1362. for fmt_str in fmt_strs:
  1363. test_deprecated_format_string(A(), fmt_str, False)
  1364. class B:
  1365. pass
  1366. class C(object):
  1367. pass
  1368. for cls in [object, B, C]:
  1369. for fmt_str in fmt_strs:
  1370. test_deprecated_format_string(cls(), fmt_str, len(fmt_str) != 0)
  1371. # --------------------------------------------------------------------
  1372. # make sure we can take a subclass of str as a format spec
  1373. class DerivedFromStr(str): pass
  1374. self.assertEqual(format(0, DerivedFromStr('10')), ' 0')
  1375. def test_bin(self):
  1376. self.assertEqual(bin(0), '0b0')
  1377. self.assertEqual(bin(1), '0b1')
  1378. self.assertEqual(bin(-1), '-0b1')
  1379. self.assertEqual(bin(2**65), '0b1' + '0' * 65)
  1380. self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
  1381. self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
  1382. self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
  1383. def test_bytearray_translate(self):
  1384. x = bytearray("abc")
  1385. self.assertRaises(ValueError, x.translate, "1", 1)
  1386. self.assertRaises(TypeError, x.translate, "1"*256, 1)
  1387. class TestExecFile(unittest.TestCase):
  1388. # Done outside of the method test_z to get the correct scope
  1389. z = 0
  1390. f = open(TESTFN, 'w')
  1391. f.write('z = z+1\n')
  1392. f.write('z = z*2\n')
  1393. f.close()
  1394. with check_py3k_warnings(("execfile.. not supported in 3.x",
  1395. DeprecationWarning)):
  1396. execfile(TESTFN)
  1397. def test_execfile(self):
  1398. globals = {'a': 1, 'b': 2}
  1399. locals = {'b': 200, 'c': 300}
  1400. self.assertEqual(self.__class__.z, 2)
  1401. globals['z'] = 0
  1402. execfile(TESTFN, globals)
  1403. self.assertEqual(globals['z'], 2)
  1404. locals['z'] = 0
  1405. execfile(TESTFN, globals, locals)
  1406. self.assertEqual(locals['z'], 2)
  1407. class M:
  1408. "Test mapping interface versus possible calls from execfile()."
  1409. def __init__(self):
  1410. self.z = 10
  1411. def __getitem__(self, key):
  1412. if key == 'z':
  1413. return self.z
  1414. raise KeyError
  1415. def __setitem__(self, key, value):
  1416. if key == 'z':
  1417. self.z = value
  1418. return
  1419. raise KeyError
  1420. locals = M()
  1421. locals['z'] = 0
  1422. execfile(TESTFN, globals, locals)
  1423. self.assertEqual(locals['z'], 2)
  1424. unlink(TESTFN)
  1425. self.assertRaises(TypeError, execfile)
  1426. self.assertRaises(TypeError, execfile, TESTFN, {}, ())
  1427. import os
  1428. self.assertRaises(IOError, execfile, os.curdir)
  1429. self.assertRaises(IOError, execfile, "I_dont_exist")
  1430. class TestSorted(unittest.TestCase):
  1431. def test_basic(self):
  1432. data = range(100)
  1433. copy = data[:]
  1434. random.shuffle(copy)
  1435. self.assertEqual(data, sorted(copy))
  1436. self.assertNotEqual(data, copy)
  1437. data.reverse()
  1438. random.shuffle(copy)
  1439. self.assertEqual(data, sorted(copy, cmp=lambda x, y: cmp(y,x)))
  1440. self.assertNotEqual(data, copy)
  1441. random.shuffle(copy)
  1442. self.assertEqual(data, sorted(copy, key=lambda x: -x))
  1443. self.assertNotEqual(data, copy)
  1444. random.shuffle(copy)
  1445. self.assertEqual(data, sorted(copy, reverse=1))
  1446. self.assertNotEqual(data, copy)
  1447. def test_inputtypes(self):
  1448. s = 'abracadabra'
  1449. types = [list, tuple]
  1450. if have_unicode:
  1451. types.insert(0, unicode)
  1452. for T in types:
  1453. self.assertEqual(sorted(s), sorted(T(s)))
  1454. s = ''.join(dict.fromkeys(s).keys()) # unique letters only
  1455. types = [set, frozenset, list, tuple, dict.fromkeys]
  1456. if have_unicode:
  1457. types.insert(0, unicode)
  1458. for T in types:
  1459. self.assertEqual(sorted(s), sorted(T(s)))
  1460. def test_baddecorator(self):
  1461. data = 'The quick Brown fox Jumped over The lazy Dog'.split()
  1462. self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0)
  1463. class TestType(unittest.TestCase):
  1464. def test_new_type(self):
  1465. A = type('A', (), {})
  1466. self.assertEqual(A.__name__, 'A')
  1467. self.assertEqual(A.__module__, __name__)
  1468. self.assertEqual(A.__bases__, (object,))
  1469. self.assertIs(A.__base__, object)
  1470. x = A()
  1471. self.assertIs(type(x), A)
  1472. self.assertIs(x.__class__, A)
  1473. class B:
  1474. def ham(self):
  1475. return 'ham%d' % self
  1476. C = type('C', (B, int), {'spam': lambda self: 'spam%s' % self})
  1477. self.assertEqual(C.__name__, 'C')
  1478. self.assertEqual(C.__module__, __name__)
  1479. self.assertEqual(C.__bases__, (B, int))
  1480. self.assertIs(C.__base__, int)
  1481. self.assertIn('spam', C.__dict__)
  1482. self.assertNotIn('ham', C.__dict__)
  1483. x = C(42)
  1484. self.assertEqual(x, 42)
  1485. self.assertIs(type(x), C)
  1486. self.assertIs(x.__class__, C)
  1487. self.assertEqual(x.ham(), 'ham42')
  1488. self.assertEqual(x.spam(), 'spam42')
  1489. self.assertEqual(x.bit_length(), 6)
  1490. def test_type_new_keywords(self):
  1491. class B:
  1492. def ham(self):
  1493. return 'ham%d' % self
  1494. C = type.__new__(type,
  1495. name='C',
  1496. bases=(B, int),
  1497. dict={'spam': lambda self: 'spam%s' % self})
  1498. self.assertEqual(C.__name__, 'C')
  1499. self.assertEqual(C.__module__, __name__)
  1500. self.assertEqual(C.__bases__, (B, int))
  1501. self.assertIs(C.__base__, int)
  1502. self.assertIn('spam', C.__dict__)
  1503. self.assertNotIn('ham', C.__dict__)
  1504. def test_type_name(self):
  1505. for name in 'A', '\xc4', 'B.A', '42', '':
  1506. A = type(name, (), {})
  1507. self.assertEqual(A.__name__, name)
  1508. self.assertEqual(A.__module__, __name__)
  1509. with self.assertRaises(ValueError):
  1510. type('A\x00B', (), {})
  1511. with self.assertRaises(TypeError):
  1512. type(u'A', (), {})
  1513. C = type('C', (), {})
  1514. for name in 'A', '\xc4', 'B.A', '42', '':
  1515. C.__name__ = name
  1516. self.assertEqual(C.__name__, name)
  1517. self.assertEqual(C.__module__, __name__)
  1518. A = type('C', (), {})
  1519. with self.assertRaises(ValueError):
  1520. A.__name__ = 'A\x00B'
  1521. self.assertEqual(A.__name__, 'C')
  1522. with self.assertRaises(TypeError):
  1523. A.__name__ = u'A'
  1524. self.assertEqual(A.__name__, 'C')
  1525. def test_type_doc(self):
  1526. tests = ('x', '\xc4', 'x\x00y', 42, None)
  1527. if have_unicode:
  1528. tests += (u'\xc4', u'x\x00y')
  1529. for doc in tests:
  1530. A = type('A', (), {'__doc__': doc})
  1531. self.assertEqual(A.__doc__, doc)
  1532. A = type('A', (), {})
  1533. self.assertEqual(A.__doc__, None)
  1534. with self.assertRaises(AttributeError):
  1535. A.__doc__ = 'x'
  1536. def test_bad_args(self):
  1537. with self.assertRaises(TypeError):
  1538. type()
  1539. with self.assertRaises(TypeError):
  1540. type('A', ())
  1541. with self.assertRaises(TypeError):
  1542. type('A', (), {}, ())
  1543. with self.assertRaises(TypeError):
  1544. type('A', (), dict={})
  1545. with self.assertRaises(TypeError):
  1546. type('A', [], {})
  1547. with self.assertRaises(TypeError):
  1548. type('A', (), UserDict.UserDict())
  1549. with self.assertRaises(TypeError):
  1550. type('A', (None,), {})
  1551. with self.assertRaises(TypeError):
  1552. type('A', (bool,), {})
  1553. with self.assertRaises(TypeError):
  1554. type('A', (int, str), {})
  1555. class B:
  1556. pass
  1557. with self.assertRaises(TypeError):
  1558. type('A', (B,), {})
  1559. def test_bad_slots(self):
  1560. with self.assertRaises(TypeError):
  1561. type('A', (long,), {'__slots__': 'x'})
  1562. with self.assertRaises(TypeError):
  1563. type('A', (), {'__slots__': ''})
  1564. with self.assertRaises(TypeError):
  1565. type('A', (), {'__slots__': '42'})
  1566. with self.assertRaises(TypeError):
  1567. type('A', (), {'__slots__': 'x\x00y'})
  1568. with self.assertRaises(TypeError):
  1569. type('A', (), {'__slots__': ('__dict__', '__dict__')})
  1570. with self.assertRaises(TypeError):
  1571. type('A', (), {'__slots__': ('__weakref__', '__weakref__')})
  1572. class B(object):
  1573. pass
  1574. with self.assertRaises(TypeError):
  1575. type('A', (B,), {'__slots__': '__dict__'})
  1576. with self.assertRaises(TypeError):
  1577. type('A', (B,), {'__slots__': '__weakref__'})
  1578. def _run_unittest(*args):
  1579. with check_py3k_warnings(
  1580. (".+ not supported in 3.x", DeprecationWarning),
  1581. (".+ is renamed to imp.reload", DeprecationWarning),
  1582. ("classic int division", DeprecationWarning)):
  1583. run_unittest(*args)
  1584. def test_main(verbose=None):
  1585. global numruns
  1586. if not numruns:
  1587. with check_py3k_warnings(
  1588. (".+ not supported in 3.x", DeprecationWarning)):
  1589. run_unittest(TestExecFile)
  1590. numruns += 1
  1591. test_classes = (BuiltinTest, TestSorted, TestType)
  1592. _run_unittest(*test_classes)
  1593. # verify reference counting
  1594. if verbose and hasattr(sys, "gettotalrefcount"):
  1595. import gc
  1596. counts = [None] * 5
  1597. for i in xrange(len(counts)):
  1598. _run_unittest(*test_classes)
  1599. gc.collect()
  1600. counts[i] = sys.gettotalrefcount()
  1601. print counts
  1602. if __name__ == "__main__":
  1603. test_main(verbose=True)