##// END OF EJS Templates
Statically type OInfo....
Statically type OInfo. In view of working with #13860, some cleanup inspect to be properly typed, and using stricter datastructure. Instead of dict we now use dataclasses, this will make sure that fields type and access can be stricter and verified not only at runtime, but by mypy

File last commit:

r28165:0fef298a
r28165:0fef298a
Show More
test_completerlib.py
193 lines | 6.4 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.
"""
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import shutil
import sys
import tempfile
import unittest
from os.path import join
Matthias Bussonnier
MAINT: cleanup imports of tempdir....
r27509 from tempfile import TemporaryDirectory
Wei Yen
Add regression test...
r24419 from IPython.core.completerlib import magic_run_completer, module_completion, try_import
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:
gousaiyang
Format code
r27495 with open(join(self.BASETESTDIR, fil), "w", encoding="utf-8") as sfile:
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 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))
Srinivas Reddy Thatiparthy
rename py3compat.getcwd() -> os.getcwd()
r23045 self.oldpath = os.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):
Min ho Kim
Fixed typos
r25167 """Test magic_run_completer, should match two alternatives
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 """
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):
Min ho Kim
Fixed typos
r25167 """Test magic_run_completer, should match one alternative
Jörgen Stenarson
Replaced shlex_split with arg_split from _process_common....
r5688 """
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"]:
gousaiyang
Format code
r27495 with open(join(self.BASETESTDIR, fil), "w", encoding="utf-8") as sfile:
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 sfile.write("pass\n")
Srinivas Reddy Thatiparthy
rename py3compat.getcwd() -> os.getcwd()
r23045 self.oldpath = os.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):
Min ho Kim
Fixed typos
r25167 """Test magic_run_completer, should match two alternatives
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 """
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):
Min ho Kim
Fixed typos
r25167 """Test magic_run_completer, should match one alternative
Thomas Kluyver
Skip some more tests that require unicode paths
r12168 """
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:
gousaiyang
Format code
r27495 filename = os.path.join(tmpdir, name + ".py")
open(filename, "w", encoding="utf-8").close()
Thomas Kluyver
Add failing test for gh-3459
r14813
s = set( module_completion('import foo') )
intersection = s.intersection(invalid_module_names)
Samuel Gaist
[core][tests][completerlib] Remove nose
r26889 assert intersection == set()
Thomas Kluyver
Add failing test for gh-3459
r14813
assert valid_module_names.issubset(s), valid_module_names.intersection(s)
Thomas Kluyver
Handle bad __all__ for module completions...
r22618
def test_bad_module_all():
"""Test module with invalid __all__
https://github.com/ipython/ipython/issues/9678
"""
testsdir = os.path.dirname(__file__)
sys.path.insert(0, testsdir)
try:
Samuel Gaist
[core][tests][completerlib] Remove nose
r26889 results = module_completion("from bad_all import ")
assert "puppies" in results
Thomas Kluyver
Handle bad __all__ for module completions...
r22618 for r in results:
Samuel Gaist
[core][tests][completerlib] Remove nose
r26889 assert isinstance(r, str)
Daniel Shimon
Add tests for completing exported submodules
r26670
# bad_all doesn't contain submodules, but this completion
# should finish without raising an exception:
results = module_completion("import bad_all.")
Samuel Gaist
[core][tests][completerlib] Remove nose
r26889 assert results == []
Thomas Kluyver
Handle bad __all__ for module completions...
r22618 finally:
sys.path.remove(testsdir)
Wei Yen
Add regression test...
r24419
def test_module_without_init():
"""
Test module without __init__.py.
https://github.com/ipython/ipython/issues/11226
"""
fake_module_name = "foo"
with TemporaryDirectory() as tmpdir:
sys.path.insert(0, tmpdir)
Wei Yen
Reset sys.path after test
r24421 try:
os.makedirs(os.path.join(tmpdir, fake_module_name))
s = try_import(mod=fake_module_name)
Matthias Bussonnier
Statically type OInfo....
r28165 assert s == [], f"for module {fake_module_name}"
Wei Yen
Reset sys.path after test
r24421 finally:
sys.path.remove(tmpdir)
Daniel Shimon
Add tests for completing exported submodules
r26670
def test_valid_exported_submodules():
"""
Test checking exported (__all__) objects are submodules
"""
results = module_completion("import os.pa")
# ensure we get a valid submodule:
Samuel Gaist
[core][tests][completerlib] Remove nose
r26889 assert "os.path" in results
Daniel Shimon
Add tests for completing exported submodules
r26670 # ensure we don't get objects that aren't submodules:
Samuel Gaist
[core][tests][completerlib] Remove nose
r26889 assert "os.pathconf" not in results