##// END OF EJS Templates
Avoid loading readline in the kernel...
Avoid loading readline in the kernel This bit of code was loading readline even when there was no need for it. In a Qt console or notebook, try: 'readline' in sys.modules 'gnureadline' in sys.modules I plan to rework this code more extensively once we've switched to prompt_toolkit, but for now, this little fix should make the kernel start slightly faster.

File last commit:

r21804:4b403b00
r21935:826a334f
Show More
test_completerlib.py
147 lines | 5.0 KiB | text/x-python | PythonLexer
/ IPython / core / tests / test_completerlib.py
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 # -*- coding: utf-8 -*-
"""Tests for completerlib.
"""
from __future__ import absolute_import
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import shutil
import sys
import tempfile
import unittest
from os.path import join
Thomas Kluyver
Add failing test for gh-3459
r14813 import nose.tools as nt
Ross Jones
Failing tests for https://github.com/ipython/ipython/issues/1107
r6148 from IPython.core.completerlib import magic_run_completer, module_completion
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 from IPython.utils import py3compat
Ross Jones
Failing tests for https://github.com/ipython/ipython/issues/1107
r6148 from IPython.utils.tempdir import TemporaryDirectory
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 from IPython.testing.decorators import onlyif_unicode_paths
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688
class MockEvent(object):
def __init__(self, line):
self.line = line
#-----------------------------------------------------------------------------
# Test functions begin
#-----------------------------------------------------------------------------
class Test_magic_run_completer(unittest.TestCase):
Thomas Kluyver
Add failing test for completing arguments after '%run foo.py '
r14814 files = [u"aao.py", u"a.py", u"b.py", u"aao.txt"]
Thomas Kluyver
Fix duplicate directories in %run tab completion
r14818 dirs = [u"adir/", "bdir/"]
Thomas Kluyver
Add failing test for completing arguments after '%run foo.py '
r14814
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 def setUp(self):
self.BASETESTDIR = tempfile.mkdtemp()
Thomas Kluyver
Add failing test for completing arguments after '%run foo.py '
r14814 for fil in self.files:
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 with open(join(self.BASETESTDIR, fil), "w") as sfile:
sfile.write("pass\n")
Thomas Kluyver
Add failing test for duplicate dirs in completions
r14817 for d in self.dirs:
os.mkdir(join(self.BASETESTDIR, d))
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 self.oldpath = py3compat.getcwd()
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 os.chdir(self.BASETESTDIR)
def tearDown(self):
os.chdir(self.oldpath)
shutil.rmtree(self.BASETESTDIR)
def test_1(self):
"""Test magic_run_completer, should match two alterntives
"""
event = MockEvent(u"%run a")
mockself = None
MinRK
use sets in test_completerlib, to be insensitive to ordering
r5692 match = set(magic_run_completer(mockself, event))
Thomas Kluyver
Add failing test for duplicate dirs in completions
r14817 self.assertEqual(match, {u"a.py", u"aao.py", u"adir/"})
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688
def test_2(self):
"""Test magic_run_completer, should match one alterntive
"""
event = MockEvent(u"%run aa")
mockself = None
MinRK
use sets in test_completerlib, to be insensitive to ordering
r5692 match = set(magic_run_completer(mockself, event))
Rémy Léone
Set litteral
r21804 self.assertEqual(match, {u"aao.py"})
Min RK
add %run open-quote completerlib test
r5690
def test_3(self):
MinRK
use sets in test_completerlib, to be insensitive to ordering
r5692 """Test magic_run_completer with unterminated " """
Min RK
add %run open-quote completerlib test
r5690 event = MockEvent(u'%run "a')
mockself = None
MinRK
use sets in test_completerlib, to be insensitive to ordering
r5692 match = set(magic_run_completer(mockself, event))
Thomas Kluyver
Add failing test for duplicate dirs in completions
r14817 self.assertEqual(match, {u"a.py", u"aao.py", u"adir/"})
Min RK
add %run open-quote completerlib test
r5690
Thomas Kluyver
Add failing test for completing arguments after '%run foo.py '
r14814 def test_completion_more_args(self):
event = MockEvent(u'%run a.py ')
match = set(magic_run_completer(None, event))
Thomas Kluyver
Add failing test for duplicate dirs in completions
r14817 self.assertEqual(match, set(self.files + self.dirs))
Thomas Kluyver
Add failing test for completing arguments after '%run foo.py '
r14814
Thomas Kluyver
Add failing test for gh-3459
r14813 def test_completion_in_dir(self):
# Github issue #3459
event = MockEvent(u'%run a.py {}'.format(join(self.BASETESTDIR, 'a')))
print(repr(event.line))
match = set(magic_run_completer(None, event))
Thomas Kluyver
Partially normalise paths for Windows tests
r14849 # We specifically use replace here rather than normpath, because
# at one point there were duplicates 'adir' and 'adir/', and normpath
# would hide the failure for that.
self.assertEqual(match, {join(self.BASETESTDIR, f).replace('\\','/')
for f in (u'a.py', u'aao.py', u'aao.txt', u'adir/')})
Thomas Kluyver
Skip some more tests that require unicode paths
r12168
class Test_magic_run_completer_nonascii(unittest.TestCase):
@onlyif_unicode_paths
def setUp(self):
self.BASETESTDIR = tempfile.mkdtemp()
for fil in [u"aaø.py", u"a.py", u"b.py"]:
with open(join(self.BASETESTDIR, fil), "w") as sfile:
sfile.write("pass\n")
Thomas Kluyver
Python 3 compatibility for os.getcwdu()
r13447 self.oldpath = py3compat.getcwd()
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 os.chdir(self.BASETESTDIR)
def tearDown(self):
os.chdir(self.oldpath)
shutil.rmtree(self.BASETESTDIR)
@onlyif_unicode_paths
def test_1(self):
"""Test magic_run_completer, should match two alterntives
"""
event = MockEvent(u"%run a")
mockself = None
match = set(magic_run_completer(mockself, event))
Rémy Léone
Set litteral
r21804 self.assertEqual(match, {u"a.py", u"aaø.py"})
Thomas Kluyver
Skip some more tests that require unicode paths
r12168
@onlyif_unicode_paths
def test_2(self):
"""Test magic_run_completer, should match one alterntive
"""
event = MockEvent(u"%run aa")
mockself = None
match = set(magic_run_completer(mockself, event))
Rémy Léone
Set litteral
r21804 self.assertEqual(match, {u"aaø.py"})
Thomas Kluyver
Skip some more tests that require unicode paths
r12168
@onlyif_unicode_paths
def test_3(self):
"""Test magic_run_completer with unterminated " """
event = MockEvent(u'%run "a')
mockself = None
match = set(magic_run_completer(mockself, event))
Rémy Léone
Set litteral
r21804 self.assertEqual(match, {u"a.py", u"aaø.py"})
Thomas Kluyver
Add failing test for gh-3459
r14813
# module_completer:
def test_import_invalid_module():
"""Testing of issue https://github.com/ipython/ipython/issues/1107"""
Rémy Léone
Set litteral
r21804 invalid_module_names = {'foo-bar', 'foo:bar', '10foo'}
valid_module_names = {'foobar'}
Thomas Kluyver
Add failing test for gh-3459
r14813 with TemporaryDirectory() as tmpdir:
sys.path.insert( 0, tmpdir )
for name in invalid_module_names | valid_module_names:
filename = os.path.join(tmpdir, name + '.py')
open(filename, 'w').close()
s = set( module_completion('import foo') )
intersection = s.intersection(invalid_module_names)
nt.assert_equal(intersection, set())
assert valid_module_names.issubset(s), valid_module_names.intersection(s)