##// END OF EJS Templates
Merge pull request #9501 from takluyver/bracket-match-default-on...
Merge pull request #9501 from takluyver/bracket-match-default-on Enable bracket matching by default

File last commit:

r21606:1da5de91
r22376:cb5bb6b4 merge
Show More
test_prompts.py
129 lines | 4.3 KiB | text/x-python | PythonLexer
MinRK
add failing test for unicode cwd in prompts
r7570 # -*- coding: utf-8
Thomas Kluyver
Add tests for prompt system.
r5658 """Tests for prompt generation."""
import unittest
MinRK
add failing test for unicode cwd in prompts
r7570 import os
Thomas Kluyver
Add tests for prompt system.
r5658
from IPython.testing import tools as tt, decorators as dec
Aaron Meurer
Be a little smarter about invisible characters in terminal prompts...
r21605 from IPython.core.prompts import PromptManager, LazyEvaluate, _invisible_characters
Thomas Kluyver
Add tests for prompt system.
r5658 from IPython.testing.globalipapp import get_ipython
Thomas Kluyver
Use TemporaryWorkingDirectory context manager in some tests
r16767 from IPython.utils.tempdir import TemporaryWorkingDirectory
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 from IPython.utils import py3compat
Thomas Kluyver
Replace references to unicode and basestring
r13353 from IPython.utils.py3compat import unicode_type
Thomas Kluyver
Add tests for prompt system.
r5658
ip = get_ipython()
class PromptTests(unittest.TestCase):
def setUp(self):
self.pm = PromptManager(shell=ip, config=ip.config)
def test_multiline_prompt(self):
self.pm.in_template = "[In]\n>>>"
self.pm.render('in')
self.assertEqual(self.pm.width, 3)
self.assertEqual(self.pm.txtwidth, 3)
self.pm.in_template = '[In]\n'
self.pm.render('in')
self.assertEqual(self.pm.width, 0)
self.assertEqual(self.pm.txtwidth, 0)
def test_translate_abbreviations(self):
def do_translate(template):
self.pm.in_template = template
return self.pm.templates['in']
pairs = [(r'%n>', '{color.number}{count}{color.prompt}>'),
(r'\T', '{time}'),
(r'\n', '\n')
]
tt.check_pairs(do_translate, pairs)
MinRK
allow access to user_ns in prompt_manager...
r5724 def test_user_ns(self):
self.pm.color_scheme = 'NoColor'
ip.ex("foo='bar'")
self.pm.in_template = "In [{foo}]"
prompt = self.pm.render('in')
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(prompt, u'In [bar]')
MinRK
allow access to user_ns in prompt_manager...
r5724
def test_builtins(self):
self.pm.color_scheme = 'NoColor'
self.pm.in_template = "In [{int}]"
prompt = self.pm.render('in')
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(prompt, u"In [%r]" % int)
MinRK
allow access to user_ns in prompt_manager...
r5724
def test_undefined(self):
self.pm.color_scheme = 'NoColor'
self.pm.in_template = "In [{foo_dne}]"
prompt = self.pm.render('in')
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(prompt, u"In [<ERROR: 'foo_dne' not found>]")
MinRK
allow access to user_ns in prompt_manager...
r5724
Thomas Kluyver
Add tests for prompt system.
r5658 def test_render(self):
self.pm.in_template = r'\#>'
self.assertEqual(self.pm.render('in',color=False), '%d>' % ip.execution_count)
MinRK
add failing test for unicode cwd in prompts
r7570
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 @dec.onlyif_unicode_paths
MinRK
use TemporaryDirectory ctx manager in test_render_unicode_cwd
r7575 def test_render_unicode_cwd(self):
Thomas Kluyver
Use TemporaryWorkingDirectory context manager in some tests
r16767 with TemporaryWorkingDirectory(u'ünicødé'):
MinRK
use TemporaryDirectory ctx manager in test_render_unicode_cwd
r7575 self.pm.in_template = r'\w [\#]'
MinRK
add failing test for unicode cwd in prompts
r7570 p = self.pm.render('in', color=False)
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 self.assertEqual(p, u"%s [%i]" % (py3compat.getcwd(), ip.execution_count))
MinRK
test LazyEvaluate with non-ascii input
r7577
def test_lazy_eval_unicode(self):
u = u'ünicødé'
lz = LazyEvaluate(lambda : u)
MinRK
use cleaner, less safe, unicode/str in LazyEvaluate
r7581 # str(lz) would fail
Thomas Kluyver
Replace references to unicode and basestring
r13353 self.assertEqual(unicode_type(lz), u)
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(format(lz), u)
MinRK
test LazyEvaluate with non-ascii input
r7577
def test_lazy_eval_nonascii_bytes(self):
u = u'ünicødé'
b = u.encode('utf8')
lz = LazyEvaluate(lambda : b)
MinRK
use cleaner, less safe, unicode/str in LazyEvaluate
r7581 # unicode(lz) would fail
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(str(lz), str(b))
self.assertEqual(format(lz), str(b))
MinRK
test LazyEval with float and format string
r7579
def test_lazy_eval_float(self):
f = 0.503
lz = LazyEvaluate(lambda : f)
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(str(lz), str(f))
Thomas Kluyver
Replace references to unicode and basestring
r13353 self.assertEqual(unicode_type(lz), unicode_type(f))
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(format(lz), str(f))
self.assertEqual(format(lz, '.1'), '0.5')
MinRK
test LazyEvaluate with non-ascii input
r7577
MinRK
skip test_cwdx on Windows...
r7773 @dec.skip_win32
MinRK
fix&test missing HOME in cwd_x
r7586 def test_cwd_x(self):
self.pm.in_template = r"\X0"
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 save = py3compat.getcwd()
MinRK
fix&test missing HOME in cwd_x
r7586 os.chdir(os.path.expanduser('~'))
p = self.pm.render('in', color=False)
try:
Bradley M. Froehle
s/assertEquals/assertEqual/
r7874 self.assertEqual(p, '~')
MinRK
fix&test missing HOME in cwd_x
r7586 finally:
os.chdir(save)
Aaron Meurer
Be a little smarter about invisible characters in terminal prompts...
r21605
def test_invisible_chars(self):
self.assertEqual(_invisible_characters('abc'), 0)
self.assertEqual(_invisible_characters('\001\033[1;37m\002'), 9)
# Sequences must be between \001 and \002 to be counted
self.assertEqual(_invisible_characters('\033[1;37m'), 0)
# Test custom escape sequences
self.assertEqual(_invisible_characters('\001\033]133;A\a\002'), 10)
def test_width(self):
Aaron Meurer
Remove dependence on execution_count in test_width
r21606 default_in = '\x01\x1b]133;A\x07\x02In [1]: \x01\x1b]133;B\x07\x02'
Aaron Meurer
Be a little smarter about invisible characters in terminal prompts...
r21605 self.pm.in_template = default_in
self.pm.render('in')
self.assertEqual(self.pm.width, 8)
self.assertEqual(self.pm.txtwidth, 8)
# Test custom escape sequences
self.pm.in_template = '\001\033]133;A\a\002' + default_in + '\001\033]133;B\a\002'
self.pm.render('in')
self.assertEqual(self.pm.width, 8)
self.assertEqual(self.pm.txtwidth, 8)