annotate Lib/test/test_code_module.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 2933598a7802
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78672
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
1 "Test InteractiveConsole and InteractiveInterpreter from code module"
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
2 import sys
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
3 import unittest
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
4 from contextlib import ExitStack
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
5 from unittest import mock
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
6 from test import support
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
7
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
8 code = support.import_module('code')
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
9
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
10
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
11 class TestInteractiveConsole(unittest.TestCase):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
12
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
13 def setUp(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
14 self.console = code.InteractiveConsole()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
15 self.mock_sys()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
16
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
17 def mock_sys(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
18 "Mock system environment for InteractiveConsole"
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
19 # use exit stack to match patch context managers to addCleanup
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
20 stack = ExitStack()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
21 self.addCleanup(stack.close)
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
22 self.infunc = stack.enter_context(mock.patch('code.input',
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
23 create=True))
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
24 self.stdout = stack.enter_context(mock.patch('code.sys.stdout'))
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
25 self.stderr = stack.enter_context(mock.patch('code.sys.stderr'))
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
26 prepatch = mock.patch('code.sys', wraps=code.sys, spec=code.sys)
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
27 self.sysmod = stack.enter_context(prepatch)
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
28 if sys.excepthook is sys.__excepthook__:
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
29 self.sysmod.excepthook = self.sysmod.__excepthook__
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
30
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
31 def test_ps1(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
32 self.infunc.side_effect = EOFError('Finished')
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
33 self.console.interact()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
34 self.assertEqual(self.sysmod.ps1, '>>> ')
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
35
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
36 def test_ps2(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
37 self.infunc.side_effect = EOFError('Finished')
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
38 self.console.interact()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
39 self.assertEqual(self.sysmod.ps2, '... ')
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
40
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
41 def test_console_stderr(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
42 self.infunc.side_effect = ["'antioch'", "", EOFError('Finished')]
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
43 self.console.interact()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
44 for call in list(self.stdout.method_calls):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
45 if 'antioch' in ''.join(call[1]):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
46 break
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
47 else:
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
48 raise AssertionError("no console stdout")
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
49
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
50 def test_syntax_error(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
51 self.infunc.side_effect = ["undefined", EOFError('Finished')]
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
52 self.console.interact()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
53 for call in self.stderr.method_calls:
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
54 if 'NameError:' in ''.join(call[1]):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
55 break
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
56 else:
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
57 raise AssertionError("No syntax error from console")
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
58
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
59 def test_sysexcepthook(self):
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
60 self.infunc.side_effect = ["raise ValueError('')",
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
61 EOFError('Finished')]
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
62 hook = mock.Mock()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
63 self.sysmod.excepthook = hook
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
64 self.console.interact()
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
65 self.assertTrue(hook.called)
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
66
86331
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
67 def test_banner(self):
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
68 # with banner
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
69 self.infunc.side_effect = EOFError('Finished')
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
70 self.console.interact(banner='Foo')
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
71 self.assertEqual(len(self.stderr.method_calls), 2)
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
72 banner_call = self.stderr.method_calls[0]
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
73 self.assertEqual(banner_call, ['write', ('Foo\n',), {}])
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
74
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
75 # no banner
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
76 self.stderr.reset_mock()
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
77 self.infunc.side_effect = EOFError('Finished')
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
78 self.console.interact(banner='')
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
79 self.assertEqual(len(self.stderr.method_calls), 1)
2933598a7802 Closes #17730: in code.interact(), when banner="", do not print anything.
Georg Brandl <georg@python.org>
parents: 78672
diff changeset
80
78672
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
81
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
82 def test_main():
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
83 support.run_unittest(TestInteractiveConsole)
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
84
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
85 if __name__ == "__main__":
a812de69b493 Issue #12643: Respect sys.excepthook in code.InteractiveConsole
Nick Coghlan <ncoghlan@gmail.com>
parents:
diff changeset
86 unittest.main()