PageRenderTime 27ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/Windows/Python3.8/WPy64-3830/WPy64-3830/python-3.8.3.amd64/Lib/idlelib/idle_test/test_run.py

https://gitlab.com/abhi1tb/build
Python | 325 lines | 307 code | 17 blank | 1 comment | 6 complexity | 08c6fbb0419148566d0e08bbc3fe989f MD5 | raw file
  1. "Test run, coverage 42%."
  2. from idlelib import run
  3. import unittest
  4. from unittest import mock
  5. from test.support import captured_stderr
  6. import io
  7. import sys
  8. class RunTest(unittest.TestCase):
  9. def test_print_exception_unhashable(self):
  10. class UnhashableException(Exception):
  11. def __eq__(self, other):
  12. return True
  13. ex1 = UnhashableException('ex1')
  14. ex2 = UnhashableException('ex2')
  15. try:
  16. raise ex2 from ex1
  17. except UnhashableException:
  18. try:
  19. raise ex1
  20. except UnhashableException:
  21. with captured_stderr() as output:
  22. with mock.patch.object(run,
  23. 'cleanup_traceback') as ct:
  24. ct.side_effect = lambda t, e: t
  25. run.print_exception()
  26. tb = output.getvalue().strip().splitlines()
  27. self.assertEqual(11, len(tb))
  28. self.assertIn('UnhashableException: ex2', tb[3])
  29. self.assertIn('UnhashableException: ex1', tb[10])
  30. # StdioFile tests.
  31. class S(str):
  32. def __str__(self):
  33. return '%s:str' % type(self).__name__
  34. def __unicode__(self):
  35. return '%s:unicode' % type(self).__name__
  36. def __len__(self):
  37. return 3
  38. def __iter__(self):
  39. return iter('abc')
  40. def __getitem__(self, *args):
  41. return '%s:item' % type(self).__name__
  42. def __getslice__(self, *args):
  43. return '%s:slice' % type(self).__name__
  44. class MockShell:
  45. def __init__(self):
  46. self.reset()
  47. def write(self, *args):
  48. self.written.append(args)
  49. def readline(self):
  50. return self.lines.pop()
  51. def close(self):
  52. pass
  53. def reset(self):
  54. self.written = []
  55. def push(self, lines):
  56. self.lines = list(lines)[::-1]
  57. class StdInputFilesTest(unittest.TestCase):
  58. def test_misc(self):
  59. shell = MockShell()
  60. f = run.StdInputFile(shell, 'stdin')
  61. self.assertIsInstance(f, io.TextIOBase)
  62. self.assertEqual(f.encoding, 'utf-8')
  63. self.assertEqual(f.errors, 'strict')
  64. self.assertIsNone(f.newlines)
  65. self.assertEqual(f.name, '<stdin>')
  66. self.assertFalse(f.closed)
  67. self.assertTrue(f.isatty())
  68. self.assertTrue(f.readable())
  69. self.assertFalse(f.writable())
  70. self.assertFalse(f.seekable())
  71. def test_unsupported(self):
  72. shell = MockShell()
  73. f = run.StdInputFile(shell, 'stdin')
  74. self.assertRaises(OSError, f.fileno)
  75. self.assertRaises(OSError, f.tell)
  76. self.assertRaises(OSError, f.seek, 0)
  77. self.assertRaises(OSError, f.write, 'x')
  78. self.assertRaises(OSError, f.writelines, ['x'])
  79. def test_read(self):
  80. shell = MockShell()
  81. f = run.StdInputFile(shell, 'stdin')
  82. shell.push(['one\n', 'two\n', ''])
  83. self.assertEqual(f.read(), 'one\ntwo\n')
  84. shell.push(['one\n', 'two\n', ''])
  85. self.assertEqual(f.read(-1), 'one\ntwo\n')
  86. shell.push(['one\n', 'two\n', ''])
  87. self.assertEqual(f.read(None), 'one\ntwo\n')
  88. shell.push(['one\n', 'two\n', 'three\n', ''])
  89. self.assertEqual(f.read(2), 'on')
  90. self.assertEqual(f.read(3), 'e\nt')
  91. self.assertEqual(f.read(10), 'wo\nthree\n')
  92. shell.push(['one\n', 'two\n'])
  93. self.assertEqual(f.read(0), '')
  94. self.assertRaises(TypeError, f.read, 1.5)
  95. self.assertRaises(TypeError, f.read, '1')
  96. self.assertRaises(TypeError, f.read, 1, 1)
  97. def test_readline(self):
  98. shell = MockShell()
  99. f = run.StdInputFile(shell, 'stdin')
  100. shell.push(['one\n', 'two\n', 'three\n', 'four\n'])
  101. self.assertEqual(f.readline(), 'one\n')
  102. self.assertEqual(f.readline(-1), 'two\n')
  103. self.assertEqual(f.readline(None), 'three\n')
  104. shell.push(['one\ntwo\n'])
  105. self.assertEqual(f.readline(), 'one\n')
  106. self.assertEqual(f.readline(), 'two\n')
  107. shell.push(['one', 'two', 'three'])
  108. self.assertEqual(f.readline(), 'one')
  109. self.assertEqual(f.readline(), 'two')
  110. shell.push(['one\n', 'two\n', 'three\n'])
  111. self.assertEqual(f.readline(2), 'on')
  112. self.assertEqual(f.readline(1), 'e')
  113. self.assertEqual(f.readline(1), '\n')
  114. self.assertEqual(f.readline(10), 'two\n')
  115. shell.push(['one\n', 'two\n'])
  116. self.assertEqual(f.readline(0), '')
  117. self.assertRaises(TypeError, f.readlines, 1.5)
  118. self.assertRaises(TypeError, f.readlines, '1')
  119. self.assertRaises(TypeError, f.readlines, 1, 1)
  120. def test_readlines(self):
  121. shell = MockShell()
  122. f = run.StdInputFile(shell, 'stdin')
  123. shell.push(['one\n', 'two\n', ''])
  124. self.assertEqual(f.readlines(), ['one\n', 'two\n'])
  125. shell.push(['one\n', 'two\n', ''])
  126. self.assertEqual(f.readlines(-1), ['one\n', 'two\n'])
  127. shell.push(['one\n', 'two\n', ''])
  128. self.assertEqual(f.readlines(None), ['one\n', 'two\n'])
  129. shell.push(['one\n', 'two\n', ''])
  130. self.assertEqual(f.readlines(0), ['one\n', 'two\n'])
  131. shell.push(['one\n', 'two\n', ''])
  132. self.assertEqual(f.readlines(3), ['one\n'])
  133. shell.push(['one\n', 'two\n', ''])
  134. self.assertEqual(f.readlines(4), ['one\n', 'two\n'])
  135. shell.push(['one\n', 'two\n', ''])
  136. self.assertRaises(TypeError, f.readlines, 1.5)
  137. self.assertRaises(TypeError, f.readlines, '1')
  138. self.assertRaises(TypeError, f.readlines, 1, 1)
  139. def test_close(self):
  140. shell = MockShell()
  141. f = run.StdInputFile(shell, 'stdin')
  142. shell.push(['one\n', 'two\n', ''])
  143. self.assertFalse(f.closed)
  144. self.assertEqual(f.readline(), 'one\n')
  145. f.close()
  146. self.assertFalse(f.closed)
  147. self.assertEqual(f.readline(), 'two\n')
  148. self.assertRaises(TypeError, f.close, 1)
  149. class StdOutputFilesTest(unittest.TestCase):
  150. def test_misc(self):
  151. shell = MockShell()
  152. f = run.StdOutputFile(shell, 'stdout')
  153. self.assertIsInstance(f, io.TextIOBase)
  154. self.assertEqual(f.encoding, 'utf-8')
  155. self.assertEqual(f.errors, 'strict')
  156. self.assertIsNone(f.newlines)
  157. self.assertEqual(f.name, '<stdout>')
  158. self.assertFalse(f.closed)
  159. self.assertTrue(f.isatty())
  160. self.assertFalse(f.readable())
  161. self.assertTrue(f.writable())
  162. self.assertFalse(f.seekable())
  163. def test_unsupported(self):
  164. shell = MockShell()
  165. f = run.StdOutputFile(shell, 'stdout')
  166. self.assertRaises(OSError, f.fileno)
  167. self.assertRaises(OSError, f.tell)
  168. self.assertRaises(OSError, f.seek, 0)
  169. self.assertRaises(OSError, f.read, 0)
  170. self.assertRaises(OSError, f.readline, 0)
  171. def test_write(self):
  172. shell = MockShell()
  173. f = run.StdOutputFile(shell, 'stdout')
  174. f.write('test')
  175. self.assertEqual(shell.written, [('test', 'stdout')])
  176. shell.reset()
  177. f.write('t\xe8\u015b\U0001d599')
  178. self.assertEqual(shell.written, [('t\xe8\u015b\U0001d599', 'stdout')])
  179. shell.reset()
  180. f.write(S('t\xe8\u015b\U0001d599'))
  181. self.assertEqual(shell.written, [('t\xe8\u015b\U0001d599', 'stdout')])
  182. self.assertEqual(type(shell.written[0][0]), str)
  183. shell.reset()
  184. self.assertRaises(TypeError, f.write)
  185. self.assertEqual(shell.written, [])
  186. self.assertRaises(TypeError, f.write, b'test')
  187. self.assertRaises(TypeError, f.write, 123)
  188. self.assertEqual(shell.written, [])
  189. self.assertRaises(TypeError, f.write, 'test', 'spam')
  190. self.assertEqual(shell.written, [])
  191. def test_write_stderr_nonencodable(self):
  192. shell = MockShell()
  193. f = run.StdOutputFile(shell, 'stderr', 'iso-8859-15', 'backslashreplace')
  194. f.write('t\xe8\u015b\U0001d599\xa4')
  195. self.assertEqual(shell.written, [('t\xe8\\u015b\\U0001d599\\xa4', 'stderr')])
  196. shell.reset()
  197. f.write(S('t\xe8\u015b\U0001d599\xa4'))
  198. self.assertEqual(shell.written, [('t\xe8\\u015b\\U0001d599\\xa4', 'stderr')])
  199. self.assertEqual(type(shell.written[0][0]), str)
  200. shell.reset()
  201. self.assertRaises(TypeError, f.write)
  202. self.assertEqual(shell.written, [])
  203. self.assertRaises(TypeError, f.write, b'test')
  204. self.assertRaises(TypeError, f.write, 123)
  205. self.assertEqual(shell.written, [])
  206. self.assertRaises(TypeError, f.write, 'test', 'spam')
  207. self.assertEqual(shell.written, [])
  208. def test_writelines(self):
  209. shell = MockShell()
  210. f = run.StdOutputFile(shell, 'stdout')
  211. f.writelines([])
  212. self.assertEqual(shell.written, [])
  213. shell.reset()
  214. f.writelines(['one\n', 'two'])
  215. self.assertEqual(shell.written,
  216. [('one\n', 'stdout'), ('two', 'stdout')])
  217. shell.reset()
  218. f.writelines(['on\xe8\n', 'tw\xf2'])
  219. self.assertEqual(shell.written,
  220. [('on\xe8\n', 'stdout'), ('tw\xf2', 'stdout')])
  221. shell.reset()
  222. f.writelines([S('t\xe8st')])
  223. self.assertEqual(shell.written, [('t\xe8st', 'stdout')])
  224. self.assertEqual(type(shell.written[0][0]), str)
  225. shell.reset()
  226. self.assertRaises(TypeError, f.writelines)
  227. self.assertEqual(shell.written, [])
  228. self.assertRaises(TypeError, f.writelines, 123)
  229. self.assertEqual(shell.written, [])
  230. self.assertRaises(TypeError, f.writelines, [b'test'])
  231. self.assertRaises(TypeError, f.writelines, [123])
  232. self.assertEqual(shell.written, [])
  233. self.assertRaises(TypeError, f.writelines, [], [])
  234. self.assertEqual(shell.written, [])
  235. def test_close(self):
  236. shell = MockShell()
  237. f = run.StdOutputFile(shell, 'stdout')
  238. self.assertFalse(f.closed)
  239. f.write('test')
  240. f.close()
  241. self.assertTrue(f.closed)
  242. self.assertRaises(ValueError, f.write, 'x')
  243. self.assertEqual(shell.written, [('test', 'stdout')])
  244. f.close()
  245. self.assertRaises(TypeError, f.close, 1)
  246. class TestSysRecursionLimitWrappers(unittest.TestCase):
  247. def test_bad_setrecursionlimit_calls(self):
  248. run.install_recursionlimit_wrappers()
  249. self.addCleanup(run.uninstall_recursionlimit_wrappers)
  250. f = sys.setrecursionlimit
  251. self.assertRaises(TypeError, f, limit=100)
  252. self.assertRaises(TypeError, f, 100, 1000)
  253. self.assertRaises(ValueError, f, 0)
  254. def test_roundtrip(self):
  255. run.install_recursionlimit_wrappers()
  256. self.addCleanup(run.uninstall_recursionlimit_wrappers)
  257. # check that setting the recursion limit works
  258. orig_reclimit = sys.getrecursionlimit()
  259. self.addCleanup(sys.setrecursionlimit, orig_reclimit)
  260. sys.setrecursionlimit(orig_reclimit + 3)
  261. # check that the new limit is returned by sys.getrecursionlimit()
  262. new_reclimit = sys.getrecursionlimit()
  263. self.assertEqual(new_reclimit, orig_reclimit + 3)
  264. def test_default_recursion_limit_preserved(self):
  265. orig_reclimit = sys.getrecursionlimit()
  266. run.install_recursionlimit_wrappers()
  267. self.addCleanup(run.uninstall_recursionlimit_wrappers)
  268. new_reclimit = sys.getrecursionlimit()
  269. self.assertEqual(new_reclimit, orig_reclimit)
  270. def test_fixdoc(self):
  271. def func(): "docstring"
  272. run.fixdoc(func, "more")
  273. self.assertEqual(func.__doc__, "docstring\n\nmore")
  274. func.__doc__ = None
  275. run.fixdoc(func, "more")
  276. self.assertEqual(func.__doc__, "more")
  277. if __name__ == '__main__':
  278. unittest.main(verbosity=2)