test_completerlib.py
121 lines
| 4.1 KiB
| text/x-python
|
PythonLexer
Jörgen Stenarson
|
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 | ||||
Ross Jones
|
r6148 | from IPython.core.completerlib import magic_run_completer, module_completion | ||
Thomas Kluyver
|
r13447 | from IPython.utils import py3compat | ||
Ross Jones
|
r6148 | from IPython.utils.tempdir import TemporaryDirectory | ||
Thomas Kluyver
|
r12168 | from IPython.testing.decorators import onlyif_unicode_paths | ||
Jörgen Stenarson
|
r5688 | |||
class MockEvent(object): | ||||
def __init__(self, line): | ||||
self.line = line | ||||
#----------------------------------------------------------------------------- | ||||
# Test functions begin | ||||
#----------------------------------------------------------------------------- | ||||
class Test_magic_run_completer(unittest.TestCase): | ||||
def setUp(self): | ||||
self.BASETESTDIR = tempfile.mkdtemp() | ||||
Thomas Kluyver
|
r12168 | for fil in [u"aao.py", u"a.py", u"b.py"]: | ||
Jörgen Stenarson
|
r5688 | with open(join(self.BASETESTDIR, fil), "w") as sfile: | ||
sfile.write("pass\n") | ||||
Thomas Kluyver
|
r13447 | self.oldpath = py3compat.getcwd() | ||
Jörgen Stenarson
|
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
|
r5692 | match = set(magic_run_completer(mockself, event)) | ||
Thomas Kluyver
|
r12168 | self.assertEqual(match, set([u"a.py", u"aao.py"])) | ||
Jörgen Stenarson
|
r5688 | |||
def test_2(self): | ||||
"""Test magic_run_completer, should match one alterntive | ||||
""" | ||||
event = MockEvent(u"%run aa") | ||||
mockself = None | ||||
MinRK
|
r5692 | match = set(magic_run_completer(mockself, event)) | ||
Thomas Kluyver
|
r12168 | self.assertEqual(match, set([u"aao.py"])) | ||
Min RK
|
r5690 | |||
def test_3(self): | ||||
MinRK
|
r5692 | """Test magic_run_completer with unterminated " """ | ||
Min RK
|
r5690 | event = MockEvent(u'%run "a') | ||
mockself = None | ||||
MinRK
|
r5692 | match = set(magic_run_completer(mockself, event)) | ||
Thomas Kluyver
|
r12168 | self.assertEqual(match, set([u"a.py", u"aao.py"])) | ||
Min RK
|
r5690 | |||
Ross Jones
|
r6148 | def test_import_invalid_module(self): | ||
"""Testing of issue https://github.com/ipython/ipython/issues/1107""" | ||||
invalid_module_names = set(['foo-bar', 'foo:bar', '10foo']) | ||||
Thomas Kluyver
|
r6181 | valid_module_names = set(['foobar']) | ||
Ross Jones
|
r6148 | with TemporaryDirectory() as tmpdir: | ||
sys.path.insert( 0, tmpdir ) | ||||
Thomas Kluyver
|
r6181 | for name in invalid_module_names | valid_module_names: | ||
Ross Jones
|
r6148 | filename = os.path.join(tmpdir, name + '.py') | ||
open(filename, 'w').close() | ||||
s = set( module_completion('import foo') ) | ||||
Ross Jones
|
r6150 | intersection = s.intersection(invalid_module_names) | ||
self.assertFalse(intersection, intersection) | ||||
Thomas Kluyver
|
r6181 | |||
assert valid_module_names.issubset(s), valid_module_names.intersection(s) | ||||
Thomas Kluyver
|
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
|
r13447 | self.oldpath = py3compat.getcwd() | ||
Thomas Kluyver
|
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)) | ||||
self.assertEqual(match, set([u"a.py", u"aaø.py"])) | ||||
@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)) | ||||
self.assertEqual(match, set([u"aaø.py"])) | ||||
@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)) | ||||
self.assertEqual(match, set([u"a.py", u"aaø.py"])) | ||||