##// END OF EJS Templates
Merge pull request #12198 from theo-o/patch-1...
Merge pull request #12198 from theo-o/patch-1 Fix typos in 7.x series release notes

File last commit:

r25582:6e079503
r25590:c926ce50 merge
Show More
test_magic.py
1246 lines | 36.2 KiB | text/x-python | PythonLexer
MinRK
test and fix %notebook magic
r6211 # -*- coding: utf-8 -*-
Fernando Perez
Update decorators and test scripts.
r1848 """Tests for various magic functions.
Ville M. Vainio
add test_magic, with single test (for rehashx)
r1735
Fernando Perez
Update decorators and test scripts.
r1848 Needs to be run by nose (to make ipython session available).
Ville M. Vainio
add test_magic, with single test (for rehashx)
r1735 """
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762
MinRK
test and fix %notebook magic
r6211 import io
Fernando Perez
Update decorators and test scripts.
r1848 import os
Joshua Storck
Adding a -q option to the logstart magic to suppress output of log state. Also added a command line option
r23624 import re
MinRK
add failing test for %tb after SyntaxError
r6108 import sys
Min RK
JSON formatter expects JSONable dict/list...
r19557 import warnings
Matthias Bussonnier
Add test that %%time magic return last result
r25040 from textwrap import dedent
Matthias Bussonnier
Remove unused imports
r21838 from unittest import TestCase
Min RK
%env: hide likely secrets by default...
r25191 from unittest import mock
Srinivas Reddy Thatiparthy
remove dead code
r23082 from importlib import invalidate_caches
from io import StringIO
Thomas Kluyver
Call invalidate_caches() when testing installing extension.
r7019
Fernando Perez
Update decorators and test scripts.
r1848 import nose.tools as nt
Nick Weseman
ENH: Add alias_magic parameters
r23639 import shlex
Min RK
JSON formatter expects JSONable dict/list...
r19557 from IPython import get_ipython
Fernando Perez
Fix various test failures from then new magics API.
r6942 from IPython.core import magic
mvr
[issue3992] set/get use cases for 'env' and new 'set_env' magic
r18924 from IPython.core.error import UsageError
Fernando Perez
Remove next_input nonsense in magic calls (but keep functionality).
r6974 from IPython.core.magic import (Magics, magics_class, line_magic,
Matthias Bussonnier
Remove unused imports
r21838 cell_magic,
register_line_magic, register_cell_magic)
Reuben Morais
Add option to force silence %cd
r24831 from IPython.core.magics import execution, script, code, logging, osm
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762 from IPython.testing import decorators as dec
Fernando Perez
Ensure that we don't damage the __builtins__ object after %run....
r1955 from IPython.testing import tools as tt
MinRK
exercise `%magic` in tests
r10996 from IPython.utils.io import capture_output
Shao Yang
add test to core/tests/test_magic
r24676 from IPython.utils.tempdir import (TemporaryDirectory,
TemporaryWorkingDirectory)
MinRK
add basic tests for %%file, %%script
r7407 from IPython.utils.process import find_cmd
Fernando Perez
Ensure that we don't damage the __builtins__ object after %run....
r1955
Thomas Kluyver
Use StringIO.StringIO on Python 2....
r13366
Fernando Perez
Renamed @register_magics to @magics_class to avoid confusion....
r6973 @magic.magics_class
Fernando Perez
Fix a few more test failures from magic API changes.
r6943 class DummyMagics(magic.Magics): pass
MinRK
test and fix %notebook magic
r6211
Martín Gaitán
Add -r option to %load. Applying a new patch ignoring whitespace changes
r12835 def test_extract_code_ranges():
instr = "1 3 5-6 7-9 10:15 17: :10 10- -13 :"
Martín Gaitán
removing incorrect comments
r12836 expected = [(0, 1),
Martín Gaitán
Add -r option to %load. Applying a new patch ignoring whitespace changes
r12835 (2, 3),
(4, 6),
(6, 9),
Martín Gaitán
removing incorrect comments
r12836 (9, 14),
Martín Gaitán
Add -r option to %load. Applying a new patch ignoring whitespace changes
r12835 (16, None),
(None, 9),
(9, None),
(None, 13),
(None, None)]
actual = list(code.extract_code_ranges(instr))
nt.assert_equal(actual, expected)
Martín Gaitán
adds the optional parameter -s to the magic %load that loads specific function or classes from the python source given. forcing the patch ignoring whitespace changes
r12841 def test_extract_symbols():
Martín Gaitán
add extra blank lines on the test to proof they are ignored
r12848 source = """import foo\na = 10\ndef b():\n return 42\n\n\nclass A: pass\n\n\n"""
Martín Gaitán
adds the optional parameter -s to the magic %load that loads specific function or classes from the python source given. forcing the patch ignoring whitespace changes
r12841 symbols_args = ["a", "b", "A", "A,b", "A,a", "z"]
Martín Gaitán
As @minrk recommends, warning if one or more symbol are not found
r12920 expected = [([], ['a']),
(["def b():\n return 42\n"], []),
(["class A: pass\n"], []),
(["class A: pass\n", "def b():\n return 42\n"], []),
(["class A: pass\n"], ['a']),
([], ['z'])]
Martín Gaitán
adds the optional parameter -s to the magic %load that loads specific function or classes from the python source given. forcing the patch ignoring whitespace changes
r12841 for symbols, exp in zip(symbols_args, expected):
nt.assert_equal(code.extract_symbols(source, symbols), exp)
Martín Gaitán
return an specific error for non python
r12945 def test_extract_symbols_raises_exception_with_non_python_code():
Martín Gaitán
adds the optional parameter -s to the magic %load that loads specific function or classes from the python source given. forcing the patch ignoring whitespace changes
r12841 source = ("=begin A Ruby program :)=end\n"
"def hello\n"
"puts 'Hello world'\n"
"end")
Martín Gaitán
return an specific error for non python
r12945 with nt.assert_raises(SyntaxError):
code.extract_symbols(source, "hello")
Martín Gaitán
adds the optional parameter -s to the magic %load that loads specific function or classes from the python source given. forcing the patch ignoring whitespace changes
r12841
Min RK
raise UsageError on magic not found...
r23833
def test_magic_not_found():
# magic not found raises UsageError
with nt.assert_raises(UsageError):
_ip.magic('doesntexist')
# ensure result isn't success when a magic isn't found
result = _ip.run_cell('%doesntexist')
assert isinstance(result.error_in_exec, UsageError)
def test_cell_magic_not_found():
# magic not found raises UsageError
with nt.assert_raises(UsageError):
_ip.run_cell_magic('doesntexist', 'line', 'cell')
# ensure result isn't success when a magic isn't found
result = _ip.run_cell('%%doesntexist')
assert isinstance(result.error_in_exec, UsageError)
def test_magic_error_status():
def fail(shell):
1/0
_ip.register_magic_function(fail)
result = _ip.run_cell('%fail')
assert isinstance(result.error_in_exec, ZeroDivisionError)
Matthias BUSSONNIER
By default, Magics inherit from Configurable
r13237 def test_config():
""" test that config magic does not raise
can happen if Configurable init is moved too early into
luzpaz
Misc. typo fixes...
r24084 Magics.__init__ as then a Config object will be registered as a
Matthias BUSSONNIER
By default, Magics inherit from Configurable
r13237 magic.
"""
## should not raise.
_ip.magic('config')
Martín Gaitán
adds the optional parameter -s to the magic %load that loads specific function or classes from the python source given. forcing the patch ignoring whitespace changes
r12841
Sang Min Park
Sort and unique %config results
r23617 def test_config_available_configs():
""" test that config magic prints available configs in unique and
sorted order. """
with capture_output() as captured:
_ip.magic('config')
stdout = captured.stdout
config_classes = stdout.strip().split('\n')[1:]
nt.assert_list_equal(config_classes, sorted(set(config_classes)))
def test_config_print_class():
""" test that config with a classname prints the class's options. """
with capture_output() as captured:
_ip.magic('config TerminalInteractiveShell')
stdout = captured.stdout
Thomas Kluyver
Fix test for changes in traitlets...
r23650 if not re.match("TerminalInteractiveShell.* options", stdout.splitlines()[0]):
print(stdout)
raise AssertionError("1st line of stdout not like "
"'TerminalInteractiveShell.* options'")
Sang Min Park
Sort and unique %config results
r23617
Ville M. Vainio
add test_magic, with single test (for rehashx)
r1735 def test_rehashx():
# clear up everything
Thomas Kluyver
Remove alias_table
r12601 _ip.alias_manager.clear_aliases()
Ville M. Vainio
add test_magic, with single test (for rehashx)
r1735 del _ip.db['syscmdlist']
_ip.magic('rehashx')
# Practically ALL ipython development systems will have more than 10 aliases
Thomas Kluyver
Remove alias_table
r12601 nt.assert_true(len(_ip.alias_manager.aliases) > 10)
for name, cmd in _ip.alias_manager.aliases:
Ville M. Vainio
add test_magic, with single test (for rehashx)
r1735 # we must strip dots from alias names
Thomas Kluyver
Remove alias_table
r12601 nt.assert_not_in('.', name)
Ville M. Vainio
add test_magic, with single test (for rehashx)
r1735
# rehashx must fill up syscmdlist
scoms = _ip.db['syscmdlist']
MinRK
remove yields from test_magic...
r11060 nt.assert_true(len(scoms) > 10)
Matthias Bussonnier
Also run test with Pytest....
r25117
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762
Fernando Perez
Fix argument parsing bug in win32, clean up temp files in %hist doctest.
r2450 def test_magic_parse_options():
"""Test that we don't mangle paths when parsing magic options."""
ip = get_ipython()
path = 'c:\\x'
Fernando Perez
Fix a few more test failures from magic API changes.
r6943 m = DummyMagics(ip)
Fernando Perez
Fix various test failures from then new magics API.
r6942 opts = m.parse_options('-f %s' % path,'f:')[0]
Fernando Perez
Fix argument parsing bug in win32, clean up temp files in %hist doctest.
r2450 # argv splitting is os-dependent
if os.name == 'posix':
expected = 'c:x'
else:
expected = path
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(opts['f'], expected)
Fernando Perez
Fix argument parsing bug in win32, clean up temp files in %hist doctest.
r2450
MinRK
test Magic.parse_options with long options
r7041 def test_magic_parse_long_options():
"""Magic.parse_options can handle --foo=bar long options"""
ip = get_ipython()
m = DummyMagics(ip)
opts, _ = m.parse_options('--foo --bar=bubble', 'a', 'foo', 'bar=')
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_in('foo', opts)
nt.assert_in('bar', opts)
nt.assert_equal(opts['bar'], "bubble")
MinRK
test Magic.parse_options with long options
r7041
MinRK
Allow IPython to run without sqlite3...
r5147
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762 def doctest_hist_f():
"""Test %hist -f with temporary filename.
In [9]: import tempfile
In [10]: tfile = tempfile.mktemp('.py','tmp-ipython-')
Thomas Kluyver
Passing IPython.core tests.
r3396 In [11]: %hist -nl -f $tfile 3
Fernando Perez
Fix argument parsing bug in win32, clean up temp files in %hist doctest.
r2450
In [13]: import os; os.unlink(tfile)
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762 """
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441 def doctest_hist_op():
"""Test %hist -op
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 In [1]: class b(float):
...: pass
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441 ...:
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 In [2]: class s(object):
...: def __str__(self):
...: return 's'
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441 ...:
In [3]:
In [4]: class r(b):
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 ...: def __repr__(self):
...: return 'r'
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441 ...:
In [5]: class sr(s,r): pass
...:
In [6]:
In [7]: bb=b()
In [8]: ss=s()
In [9]: rr=r()
In [10]: ssrr=sr()
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 In [11]: 4.5
Out[11]: 4.5
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 In [12]: str(ss)
Out[12]: 's'
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441
In [13]:
In [14]: %hist -op
>>> class b:
... pass
...
>>> class s(b):
... def __str__(self):
... return 's'
...
>>>
>>> class r(b):
... def __repr__(self):
... return 'r'
...
>>> class sr(s,r): pass
>>>
>>> bb=b()
>>> ss=s()
>>> rr=r()
>>> ssrr=sr()
Thomas Kluyver
Fix various tests in IPython.core for Python 3.
r4895 >>> 4.5
4.5
>>> str(ss)
's'
Fernando Perez
Changed %hist to default to NOT printing numbers, added -p and -o options....
r2441 >>>
"""
MinRK
Allow IPython to run without sqlite3...
r5147
Thomas Kluyver
Add failing test for issue 2412...
r16712 def test_hist_pof():
ip = get_ipython()
ip.run_cell(u"1+2", store_history=True)
#raise Exception(ip.history_manager.session_number)
#raise Exception(list(ip.history_manager._get_range_session()))
with TemporaryDirectory() as td:
tf = os.path.join(td, 'hist.py')
ip.run_line_magic('history', '-pof %s' % tf)
assert os.path.isfile(tf)
MinRK
Allow IPython to run without sqlite3...
r5147
Thomas Kluyver
Add test for magic macro command.
r3385 def test_macro():
ip = get_ipython()
ip.history_manager.reset() # Clear any existing history.
cmds = ["a=1", "def b():\n return a**2", "print(a,b())"]
Thomas Kluyver
Passing IPython.core tests.
r3396 for i, cmd in enumerate(cmds, start=1):
ip.history_manager.store_inputs(i, cmd)
Thomas Kluyver
Add test for magic macro command.
r3385 ip.magic("macro test 1-3")
nt.assert_equal(ip.user_ns["test"].value, "\n".join(cmds)+"\n")
MinRK
cleanup nt.assert usage in test_magic...
r11061 # List macros
nt.assert_in("test", ip.magic("macro"))
Fernando Perez
Progress towards getting the test suite in shape again....
r2392
MinRK
Allow IPython to run without sqlite3...
r5147
Thomas Kluyver
Refactor execution logic, so that a multi-line macro is correctly expanded and executed (+ unit test). History is now stored after all input transformations have been done.
r3414 def test_macro_run():
"""Test that we can run a multi-line macro successfully."""
ip = get_ipython()
ip.history_manager.reset()
Matthias Bussonnier
remove some py3compat usage
r24265 cmds = ["a=10", "a+=1", "print(a)", "%macro test 2-3"]
Thomas Kluyver
Refactor execution logic, so that a multi-line macro is correctly expanded and executed (+ unit test). History is now stored after all input transformations have been done.
r3414 for cmd in cmds:
Thomas Kluyver
Change run_cell to not store history by default.
r4995 ip.run_cell(cmd, store_history=True)
Matthias Bussonnier
remove some py3compat usage
r24265 nt.assert_equal(ip.user_ns["test"].value, "a+=1\nprint(a)\n")
Thomas Kluyver
Use AssertPrints in test_magic.
r4903 with tt.AssertPrints("12"):
Thomas Kluyver
Refactor execution logic, so that a multi-line macro is correctly expanded and executed (+ unit test). History is now stored after all input transformations have been done.
r3414 ip.run_cell("test")
Thomas Kluyver
Use AssertPrints in test_magic.
r4903 with tt.AssertPrints("13"):
Thomas Kluyver
Refactor execution logic, so that a multi-line macro is correctly expanded and executed (+ unit test). History is now stored after all input transformations have been done.
r3414 ip.run_cell("test")
Fernando Perez
Fix some tests using magics....
r2092
MinRK
exercise `%magic` in tests
r10996 def test_magic_magic():
"""Test %magic"""
ip = get_ipython()
with capture_output() as captured:
ip.magic("magic")
stdout = captured.stdout
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_in('%magic', stdout)
nt.assert_in('IPython', stdout)
nt.assert_in('Available', stdout)
MinRK
exercise `%magic` in tests
r10996
Paul Ivanov
tests for %clear extension
r5939 @dec.skipif_not_numpy
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 def test_numpy_reset_array_undec():
"Test '%reset array' functionality"
Fernando Perez
Update decorators and test scripts.
r1848 _ip.ex('import numpy as np')
_ip.ex('a = np.empty(2)')
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_in('a', _ip.user_ns)
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 _ip.magic('reset -f array')
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_not_in('a', _ip.user_ns)
Paul Ivanov
tests for %clear extension
r5939
Paul Ivanov
separate %reset tests for finer granularity
r5976 def test_reset_out():
"Test '%reset out' magic"
Paul Ivanov
tests for %clear extension
r5939 _ip.run_cell("parrot = 'dead'", store_history=True)
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 # test '%reset -f out', make an Out prompt
Paul Ivanov
tests for %clear extension
r5939 _ip.run_cell("parrot", store_history=True)
Thomas Kluyver
Fix list comprehension syntax...
r13371 nt.assert_true('dead' in [_ip.user_ns[x] for x in ('_','__','___')])
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 _ip.magic('reset -f out')
Thomas Kluyver
Fix list comprehension syntax...
r13371 nt.assert_false('dead' in [_ip.user_ns[x] for x in ('_','__','___')])
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_equal(len(_ip.user_ns['Out']), 0)
Paul Ivanov
tests for %clear extension
r5939
Paul Ivanov
separate %reset tests for finer granularity
r5976 def test_reset_in():
"Test '%reset in' magic"
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 # test '%reset -f in'
Paul Ivanov
tests for %clear extension
r5939 _ip.run_cell("parrot", store_history=True)
Thomas Kluyver
Fix list comprehension syntax...
r13371 nt.assert_true('parrot' in [_ip.user_ns[x] for x in ('_i','_ii','_iii')])
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 _ip.magic('%reset -f in')
Thomas Kluyver
Fix list comprehension syntax...
r13371 nt.assert_false('parrot' in [_ip.user_ns[x] for x in ('_i','_ii','_iii')])
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_equal(len(set(_ip.user_ns['In'])), 1)
Paul Ivanov
tests for %clear extension
r5939
Paul Ivanov
separate %reset tests for finer granularity
r5976 def test_reset_dhist():
"Test '%reset dhist' magic"
Paul Ivanov
tests for %clear extension
r5939 _ip.run_cell("tmp = [d for d in _dh]") # copy before clearing
Paul Ivanov
separate %reset tests for finer granularity
r5976 _ip.magic('cd ' + os.path.dirname(nt.__file__))
Paul Ivanov
tests for %clear extension
r5939 _ip.magic('cd -')
nt.assert_true(len(_ip.user_ns['_dh']) > 0)
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 _ip.magic('reset -f dhist')
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_equal(len(_ip.user_ns['_dh']), 0)
Paul Ivanov
tests for %clear extension
r5939 _ip.run_cell("_dh = [d for d in tmp]") #restore
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762
Paul Ivanov
separate %reset tests for finer granularity
r5976 def test_reset_in_length():
"Test that '%reset in' preserves In[] length"
Paul Ivanov
clear out the contents of but keep length of In[]
r5957 _ip.run_cell("print 'foo'")
Paul Ivanov
%reset now takes optional in/out/dhist/array args...
r5965 _ip.run_cell("reset -f in")
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_equal(len(_ip.user_ns['In']), _ip.displayhook.prompt_count+1)
Fernando Perez
Fix a number of bugs with %history, add proper tests....
r1762
Matthias Bussonnier
Add a test for reset behavior
r25151 class TestResetErrors(TestCase):
def test_reset_redefine(self):
@magics_class
class KernelMagics(Magics):
@line_magic
def less(self, shell): pass
_ip.register_magics(KernelMagics)
with self.assertLogs() as cm:
# hack, we want to just capture logs, but assertLogs fails if not
# logs get produce.
# so log one things we ignore.
import logging as log_mod
log = log_mod.getLogger()
log.info('Nothing')
# end hack.
_ip.run_cell("reset -f")
assert len(cm.output) == 1
for out in cm.output:
assert "Invalid alias" not in out
MinRK
add failing test for %tb after SyntaxError
r6108 def test_tb_syntaxerror():
"""test %tb after a SyntaxError"""
ip = get_ipython()
ip.run_cell("for")
# trap and validate stdout
save_stdout = sys.stdout
try:
sys.stdout = StringIO()
ip.run_cell("%tb")
out = sys.stdout.getvalue()
finally:
sys.stdout = save_stdout
# trim output, and only check the last line
last_line = out.rstrip().splitlines()[-1].strip()
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(last_line, "SyntaxError: invalid syntax")
MinRK
add failing test for %tb after SyntaxError
r6108
Fernando Perez
Fix broken %time magic....
r2411
Thomas Kluyver
Remove code from prefilter that duplicates functionality in inputsplitter.
r8216 def test_time():
ip = get_ipython()
Thomas Kluyver
Add %time within function to doctest.
r3478
Jan Schulz
time magic: shorten unnecessary output on windows...
r9728 with tt.AssertPrints("Wall time: "):
Thomas Kluyver
Remove code from prefilter that duplicates functionality in inputsplitter.
r8216 ip.run_cell("%time None")
ip.run_cell("def f(kmjy):\n"
" %time print (2*kmjy)")
Jan Schulz
time magic: shorten unnecessary output on windows...
r9728 with tt.AssertPrints("Wall time: "):
Thomas Kluyver
Remove code from prefilter that duplicates functionality in inputsplitter.
r8216 with tt.AssertPrints("hihi", suppress=False):
ip.run_cell("f('hi')")
Fernando Perez
Work around a bug in Python's shlex module with unicode input....
r2650
Matthias Bussonnier
add time test
r25131 def test_time_last_not_expression():
ip.run_cell("%%time\n"
"var_1 = 1\n"
"var_2 = 2\n")
assert ip.user_ns['var_1'] == 1
del ip.user_ns['var_1']
assert ip.user_ns['var_2'] == 2
del ip.user_ns['var_2']
Jan Schulz
time magic: shorten unnecessary output on windows...
r9728
@dec.skip_win32
def test_time2():
ip = get_ipython()
with tt.AssertPrints("CPU times: user "):
ip.run_cell("%time None")
Thomas Kluyver
Failing test for gh-3334
r10671 def test_time3():
"""Erroneous magic function calls, issue gh-3334"""
ip = get_ipython()
ip.user_ns.pop('run', None)
with tt.AssertNotPrints("not found", channel='stderr'):
ip.run_cell("%%time\n"
"run = 0\n"
"run += 1")
Matthias Bussonnier
Add test that %%time magic return last result
r25040 def test_multiline_time():
"""Make sure last statement from time return a value."""
ip = get_ipython()
ip.user_ns.pop('run', None)
ip.run_cell(dedent("""\
%%time
a = "ho"
b = "hey"
a+b
"""))
nt.assert_equal(ip.user_ns_hidden['_'], 'hohey')
Matthias Bussonnier
Fix applying @needs_global_scope to cell magics....
r25007 def test_time_local_ns():
"""
Test that local_ns is actually global_ns when running a cell magic
"""
ip = get_ipython()
ip.run_cell("%%time\n"
"myvar = 1")
nt.assert_equal(ip.user_ns['myvar'], 1)
del ip.user_ns['myvar']
Fernando Perez
Add transformers to understand code pasted with >>> or IPython prompts....
r2426 def test_doctest_mode():
"Toggle doctest_mode twice, it should be a no-op and run without error"
_ip.magic('doctest_mode')
_ip.magic('doctest_mode')
Fernando Perez
Work around a bug in Python's shlex module with unicode input....
r2650
def test_parse_options():
"""Tests for basic options parsing in magics."""
# These are only the most minimal of tests, more should be added later. At
# the very least we check that basic text/unicode calls work OK.
Fernando Perez
Fix a few more test failures from magic API changes.
r6943 m = DummyMagics(_ip)
Fernando Perez
Fix various test failures from then new magics API.
r6942 nt.assert_equal(m.parse_options('foo', '')[1], 'foo')
nt.assert_equal(m.parse_options(u'foo', '')[1], u'foo')
Fernando Perez
Work around a bug in Python's shlex module with unicode input....
r2650
Reuben Morais
Add option to force silence %cd
r24831
Fernando Perez
Work around a bug in Python's shlex module with unicode input....
r2650 def test_dirops():
"""Test various directory handling operations."""
Srinivas Reddy Thatiparthy
rename py3compat.getcwd() -> os.getcwd()
r23045 # curpath = lambda :os.path.splitdrive(os.getcwd())[1].replace('\\','/')
curpath = os.getcwd
startdir = os.getcwd()
Gabriel
Fix tests to work when ~/.config/ipython contains a symlink.
r5663 ipdir = os.path.realpath(_ip.ipython_dir)
Fernando Perez
Work around a bug in Python's shlex module with unicode input....
r2650 try:
_ip.magic('cd "%s"' % ipdir)
nt.assert_equal(curpath(), ipdir)
_ip.magic('cd -')
nt.assert_equal(curpath(), startdir)
_ip.magic('pushd "%s"' % ipdir)
nt.assert_equal(curpath(), ipdir)
_ip.magic('popd')
nt.assert_equal(curpath(), startdir)
finally:
os.chdir(startdir)
Fernando Perez
Fixed unused %cpaste test and moved into proper test suite.
r2655
Reuben Morais
Add option to force silence %cd
r24831 def test_cd_force_quiet():
"""Test OSMagics.cd_force_quiet option"""
_ip.config.OSMagics.cd_force_quiet = True
osmagics = osm.OSMagics(shell=_ip)
startdir = os.getcwd()
ipdir = os.path.realpath(_ip.ipython_dir)
try:
with tt.AssertNotPrints(ipdir):
osmagics.cd('"%s"' % ipdir)
with tt.AssertNotPrints(startdir):
osmagics.cd('-')
finally:
os.chdir(startdir)
Fernando Perez
Fix small bug where %xmode without arguments failed to run....
r3146 def test_xmode():
# Calling xmode three times should be a no-op
xmode = _ip.InteractiveTB.mode
Dan Allan
TST: Update test of xmode toggle: there are 4 modes.
r24851 for i in range(4):
Fernando Perez
Fix small bug where %xmode without arguments failed to run....
r3146 _ip.magic("xmode")
nt.assert_equal(_ip.InteractiveTB.mode, xmode)
Thomas Kluyver
Add test for hard reset.
r3522
def test_reset_hard():
monitor = []
class A(object):
def __del__(self):
monitor.append(1)
def __repr__(self):
return "<A instance>"
_ip.user_ns["a"] = A()
_ip.run_cell("a")
nt.assert_equal(monitor, [])
Fernando Perez
Fix remaining test failures....
r6916 _ip.magic("reset -f")
Thomas Kluyver
Add test for hard reset.
r3522 nt.assert_equal(monitor, [1])
Thomas Kluyver
Create test for %xdel magic. Not passing yet, although the equivalent works in interactive use.
r3824
class TestXdel(tt.TempFileMixin):
def test_xdel(self):
"""Test that references from %run are cleared by xdel."""
src = ("class A(object):\n"
" monitor = []\n"
" def __del__(self):\n"
" self.monitor.append(1)\n"
"a = A()\n")
self.mktmp(src)
Thomas Kluyver
Remove remaining references held by test suite, so that xdel test passes.
r3832 # %run creates some hidden references...
Thomas Kluyver
Create test for %xdel magic. Not passing yet, although the equivalent works in interactive use.
r3824 _ip.magic("run %s" % self.fname)
Thomas Kluyver
Remove remaining references held by test suite, so that xdel test passes.
r3832 # ... as does the displayhook.
Thomas Kluyver
Create test for %xdel magic. Not passing yet, although the equivalent works in interactive use.
r3824 _ip.run_cell("a")
Thomas Kluyver
Remove object references kept by the test suite in a better way.
r3844
Thomas Kluyver
Create test for %xdel magic. Not passing yet, although the equivalent works in interactive use.
r3824 monitor = _ip.user_ns["A"].monitor
nt.assert_equal(monitor, [])
Thomas Kluyver
Remove remaining references held by test suite, so that xdel test passes.
r3832
Thomas Kluyver
Remove object references kept by the test suite in a better way.
r3844 _ip.magic("xdel a")
Thomas Kluyver
Remove remaining references held by test suite, so that xdel test passes.
r3832
# Check that a's __del__ method has been called.
Thomas Kluyver
Create test for %xdel magic. Not passing yet, although the equivalent works in interactive use.
r3824 nt.assert_equal(monitor, [1])
MinRK
fix+test %who_ls type checking, skip %who doctests...
r3332
def doctest_who():
"""doctest for %who
In [1]: %reset -f
In [2]: alpha = 123
In [3]: beta = 'beta'
In [4]: %who int
alpha
In [5]: %who str
beta
In [6]: %whos
Variable Type Data/Info
----------------------------
alpha int 123
beta str beta
In [7]: %who_ls
Out[7]: ['alpha', 'beta']
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 """
Thomas Kluyver
Catch failure in repr() for %whos.
r6779 def test_whos():
"""Check that whos is protected against objects where repr() fails."""
class A(object):
def __repr__(self):
raise Exception()
_ip.user_ns['a'] = A()
_ip.magic("whos")
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 def doctest_precision():
"""doctest for %precision
Fernando Perez
Fix remaining test failures....
r6916 In [1]: f = get_ipython().display_formatter.formatters['text/plain']
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350
In [2]: %precision 5
adityausathe
fix for #10327: _stack_depth added and {u} string literals removed from core/tests
r23764 Out[2]: '%.5f'
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350
In [3]: f.float_format
adityausathe
fix for #10327: _stack_depth added and {u} string literals removed from core/tests
r23764 Out[3]: '%.5f'
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350
In [4]: %precision %e
adityausathe
fix for #10327: _stack_depth added and {u} string literals removed from core/tests
r23764 Out[4]: '%e'
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350
In [5]: f(3.1415927)
adityausathe
fix for #10327: _stack_depth added and {u} string literals removed from core/tests
r23764 Out[5]: '3.141593e+00'
MinRK
add `float_precision` trait to PlainTextFormatter...
r3350 """
Thomas Kluyver
Add test for wildcard search syntax.
r5549 def test_psearch():
with tt.AssertPrints("dict.fromkeys"):
_ip.run_cell("dict.fr*?")
MinRK
add strict flag to arg_split, to optionally ignore shlex parse errors...
r5672 def test_timeit_shlex():
"""test shlex issues with timeit (#1109)"""
_ip.ex("def f(*a,**kw): pass")
_ip.magic('timeit -n1 "this is a bug".count(" ")')
_ip.magic('timeit -r1 -n1 f(" ", 1)')
_ip.magic('timeit -r1 -n1 f(" ", 1, " ", 2, " ")')
_ip.magic('timeit -r1 -n1 ("a " + "b")')
_ip.magic('timeit -r1 -n1 f("a " + "b")')
_ip.magic('timeit -r1 -n1 f("a " + "b ")')
Paul Ivanov
test for GH #1269
r5901
Fernando Perez
Extend the previous test to cover both line and cell modes.
r7493 def test_timeit_special_syntax():
"Test %%timeit with IPython special syntax"
Fernando Perez
Add test for new timeit functionality.
r7492 @register_line_magic
def lmagic(line):
ip = get_ipython()
ip.user_ns['lmagic_out'] = line
Fernando Perez
Extend the previous test to cover both line and cell modes.
r7493 # line mode test
_ip.run_line_magic('timeit', '-n1 -r1 %lmagic my line')
Fernando Perez
Add test for new timeit functionality.
r7492 nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line')
Fernando Perez
Extend the previous test to cover both line and cell modes.
r7493 # cell mode test
_ip.run_cell_magic('timeit', '-n1 -r1', '%lmagic my line2')
nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line2')
Matthias BUSSONNIER
test timeit quiet and return
r12648
def test_timeit_return():
"""
luzpaz
Misc. typo fixes...
r24084 test whether timeit -o return object
Matthias BUSSONNIER
test timeit quiet and return
r12648 """
res = _ip.run_line_magic('timeit','-n10 -r10 -o 1')
assert(res is not None)
def test_timeit_quiet():
"""
test quiet option of timeit magic
"""
with tt.AssertNotPrints("loops"):
_ip.run_cell("%timeit -n1 -r1 -q 1")
Fernando Perez
Add test for new timeit functionality.
r7492
Ivan Timokhin
Calculate worst time in timeit unconditionally...
r21698 def test_timeit_return_quiet():
with tt.AssertNotPrints("loops"):
res = _ip.run_line_magic('timeit', '-n1 -r1 -q -o 1')
assert (res is not None)
Thomas Kluyver
Give SyntaxError for naked return in timeit...
r23747 def test_timeit_invalid_return():
Thomas Kluyver
Use non-deprecated assert form
r23789 with nt.assert_raises_regex(SyntaxError, "outside function"):
Thomas Kluyver
Give SyntaxError for naked return in timeit...
r23747 _ip.run_line_magic('timeit', 'return')
Fernando Perez
Fix failing tests in core and zmq
r6970 @dec.skipif(execution.profile is None)
Jason Grout
Add prun transform test
r12157 def test_prun_special_syntax():
"Test %%prun with IPython special syntax"
@register_line_magic
def lmagic(line):
ip = get_ipython()
ip.user_ns['lmagic_out'] = line
# line mode test
_ip.run_line_magic('prun', '-q %lmagic my line')
nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line')
# cell mode test
_ip.run_cell_magic('prun', '-q', '%lmagic my line2')
nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line2')
@dec.skipif(execution.profile is None)
Paul Ivanov
test for #1302
r5932 def test_prun_quotes():
"Test that prun does not clobber string escapes (GH #1302)"
Jörgen Stenarson
Switch to raw string to match typing at prompt
r7458 _ip.magic(r"prun -q x = '\t'")
Paul Ivanov
test for #1302
r5932 nt.assert_equal(_ip.user_ns['x'], '\t')
Thomas Kluyver
Add test for installing, loading, unloading an extension.
r6183
def test_extension():
Thomas Kluyver
Print debugging info from test_extension...
r21872 # Debugging information for failures of this test
print('sys.path:')
for p in sys.path:
print(' ', p)
print('CWD', os.getcwd())
Min RK
don't install test extension...
r21840 nt.assert_raises(ImportError, _ip.magic, "load_ext daft_extension")
daft_path = os.path.join(os.path.dirname(__file__), "daft_extension")
sys.path.insert(0, daft_path)
Thomas Kluyver
Add test for installing, loading, unloading an extension.
r6183 try:
_ip.user_ns.pop('arq', None)
Thomas Kluyver
Call invalidate_caches() when testing installing extension.
r7019 invalidate_caches() # Clear import caches
Thomas Kluyver
Add test for installing, loading, unloading an extension.
r6183 _ip.magic("load_ext daft_extension")
Bradley M. Froehle
Stop duplicating `nt.assert*` in `IPython.testing.tools`.
r7879 nt.assert_equal(_ip.user_ns['arq'], 185)
Thomas Kluyver
Add test for installing, loading, unloading an extension.
r6183 _ip.magic("unload_ext daft_extension")
assert 'arq' not in _ip.user_ns
finally:
Min RK
don't install test extension...
r21840 sys.path.remove(daft_path)
MinRK
test and fix %notebook magic
r6211
Min RK
update some test skips for removed packages
r21251 def test_notebook_export_json():
_ip = get_ipython()
_ip.history_manager.reset() # Clear any existing history.
cmds = [u"a=1", u"def b():\n return a**2", u"print('noël, été', b())"]
for i, cmd in enumerate(cmds, start=1):
_ip.history_manager.store_inputs(i, cmd)
with TemporaryDirectory() as td:
outfile = os.path.join(td, "nb.ipynb")
_ip.magic("notebook -e %s" % outfile)
Thomas Kluyver
Skip some tests if nbformat not importable...
r16982
MinRK
test and fix %notebook magic
r6211
mvr
[issue3992] set/get use cases for 'env' and new 'set_env' magic
r18924 class TestEnv(TestCase):
def test_env(self):
env = _ip.magic("env")
self.assertTrue(isinstance(env, dict))
Min RK
%env: hide likely secrets by default...
r25191 def test_env_secret(self):
env = _ip.magic("env")
hidden = "<hidden>"
with mock.patch.dict(
os.environ,
{
"API_KEY": "abc123",
"SECRET_THING": "ssshhh",
"JUPYTER_TOKEN": "",
"VAR": "abc"
}
):
env = _ip.magic("env")
assert env["API_KEY"] == hidden
assert env["SECRET_THING"] == hidden
assert env["JUPYTER_TOKEN"] == hidden
assert env["VAR"] == "abc"
mvr
[issue3992] set/get use cases for 'env' and new 'set_env' magic
r18924 def test_env_get_set_simple(self):
env = _ip.magic("env var val1")
self.assertEqual(env, None)
self.assertEqual(os.environ['var'], 'val1')
self.assertEqual(_ip.magic("env var"), 'val1')
env = _ip.magic("env var=val2")
self.assertEqual(env, None)
self.assertEqual(os.environ['var'], 'val2')
def test_env_get_set_complex(self):
env = _ip.magic("env var 'val1 '' 'val2")
self.assertEqual(env, None)
self.assertEqual(os.environ['var'], "'val1 '' 'val2")
self.assertEqual(_ip.magic("env var"), "'val1 '' 'val2")
env = _ip.magic('env var=val2 val3="val4')
self.assertEqual(env, None)
self.assertEqual(os.environ['var'], 'val2 val3="val4')
def test_env_set_bad_input(self):
self.assertRaises(UsageError, lambda: _ip.magic("set_env var"))
def test_env_set_whitespace(self):
self.assertRaises(UsageError, lambda: _ip.magic("env var A=B"))
Fernando Perez
Add first set of cell magic tests.
r6975
class CellMagicTestCase(TestCase):
def check_ident(self, magic):
Fernando Perez
First implementation of cell magics that goes via inputsplitter....
r6976 # Manually called, we get the result
Fernando Perez
Rename a few methods as per review, also complete some docstrings.
r7003 out = _ip.run_cell_magic(magic, 'a', 'b')
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(out, ('a','b'))
Fernando Perez
First implementation of cell magics that goes via inputsplitter....
r6976 # Via run_cell, it goes into the user's namespace via displayhook
Thomas Kluyver
Fix cell magic transformation
r24162 _ip.run_cell('%%' + magic +' c\nd\n')
nt.assert_equal(_ip.user_ns['_'], ('c','d\n'))
Fernando Perez
Add first set of cell magic tests.
r6975
def test_cell_magic_func_deco(self):
"Cell magic using simple decorator"
@register_cell_magic
def cellm(line, cell):
return line, cell
self.check_ident('cellm')
def test_cell_magic_reg(self):
"Cell magic manually registered"
def cellm(line, cell):
return line, cell
_ip.register_magic_function(cellm, 'cell', 'cellm2')
self.check_ident('cellm2')
def test_cell_magic_class(self):
"Cell magics declared via a class"
@magics_class
class MyMagics(Magics):
@cell_magic
def cellm3(self, line, cell):
return line, cell
Fernando Perez
First implementation of cell magics that goes via inputsplitter....
r6976 _ip.register_magics(MyMagics)
self.check_ident('cellm3')
def test_cell_magic_class2(self):
"Cell magics declared via a class, #2"
@magics_class
class MyMagics2(Magics):
Fernando Perez
Add first set of cell magic tests.
r6975 @cell_magic('cellm4')
def cellm33(self, line, cell):
return line, cell
Fernando Perez
First implementation of cell magics that goes via inputsplitter....
r6976
_ip.register_magics(MyMagics2)
Fernando Perez
Add first set of cell magic tests.
r6975 self.check_ident('cellm4')
# Check that nothing is registered as 'cellm33'
c33 = _ip.find_cell_magic('cellm33')
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(c33, None)
MinRK
add basic tests for %%file, %%script
r7407
def test_file():
Shao Yang
change magics from %%file to %%writefile
r24678 """Basic %%writefile"""
MinRK
add basic tests for %%file, %%script
r7407 ip = get_ipython()
with TemporaryDirectory() as td:
fname = os.path.join(td, 'file1')
Shao Yang
change magics from %%file to %%writefile
r24678 ip.run_cell_magic("writefile", fname, u'\n'.join([
MinRK
add basic tests for %%file, %%script
r7407 'line1',
'line2',
]))
with open(fname) as f:
s = f.read()
nt.assert_in('line1\n', s)
Partha P. Mukherjee
Add test cases for magic writefile with embedded quotes in filenames
r24928 nt.assert_in('line2', s)
Partha P. Mukherjee
Skip writefile tests for quotes in filenames on Windows as quotes...
r24929 @dec.skip_win32
Partha P. Mukherjee
Add test cases for magic writefile with embedded quotes in filenames
r24928 def test_file_single_quote():
"""Basic %%writefile with embedded single quotes"""
ip = get_ipython()
with TemporaryDirectory() as td:
fname = os.path.join(td, '\'file1\'')
ip.run_cell_magic("writefile", fname, u'\n'.join([
'line1',
'line2',
]))
with open(fname) as f:
s = f.read()
nt.assert_in('line1\n', s)
nt.assert_in('line2', s)
Partha P. Mukherjee
Skip writefile tests for quotes in filenames on Windows as quotes...
r24929 @dec.skip_win32
Partha P. Mukherjee
Add test cases for magic writefile with embedded quotes in filenames
r24928 def test_file_double_quote():
"""Basic %%writefile with embedded double quotes"""
ip = get_ipython()
with TemporaryDirectory() as td:
fname = os.path.join(td, '"file1"')
ip.run_cell_magic("writefile", fname, u'\n'.join([
'line1',
'line2',
]))
with open(fname) as f:
s = f.read()
nt.assert_in('line1\n', s)
MinRK
add basic tests for %%file, %%script
r7407 nt.assert_in('line2', s)
MinRK
test that var_expand is called on the line in %%file
r7903 def test_file_var_expand():
Shao Yang
change magics from %%file to %%writefile
r24678 """%%writefile $filename"""
MinRK
test that var_expand is called on the line in %%file
r7903 ip = get_ipython()
with TemporaryDirectory() as td:
fname = os.path.join(td, 'file1')
ip.user_ns['filename'] = fname
Shao Yang
change magics from %%file to %%writefile
r24678 ip.run_cell_magic("writefile", '$filename', u'\n'.join([
MinRK
test that var_expand is called on the line in %%file
r7903 'line1',
'line2',
]))
with open(fname) as f:
s = f.read()
nt.assert_in('line1\n', s)
nt.assert_in('line2', s)
MinRK
add basic tests for %%file, %%script
r7407 def test_file_unicode():
Shao Yang
change magics from %%file to %%writefile
r24678 """%%writefile with unicode cell"""
MinRK
add basic tests for %%file, %%script
r7407 ip = get_ipython()
with TemporaryDirectory() as td:
fname = os.path.join(td, 'file1')
Shao Yang
change magics from %%file to %%writefile
r24678 ip.run_cell_magic("writefile", fname, u'\n'.join([
MinRK
add basic tests for %%file, %%script
r7407 u'liné1',
u'liné2',
]))
with io.open(fname, encoding='utf-8') as f:
s = f.read()
nt.assert_in(u'liné1\n', s)
nt.assert_in(u'liné2', s)
def test_file_amend():
Shao Yang
change magics from %%file to %%writefile
r24678 """%%writefile -a amends files"""
MinRK
add basic tests for %%file, %%script
r7407 ip = get_ipython()
with TemporaryDirectory() as td:
fname = os.path.join(td, 'file2')
Shao Yang
change magics from %%file to %%writefile
r24678 ip.run_cell_magic("writefile", fname, u'\n'.join([
MinRK
add basic tests for %%file, %%script
r7407 'line1',
'line2',
]))
Shao Yang
change magics from %%file to %%writefile
r24678 ip.run_cell_magic("writefile", "-a %s" % fname, u'\n'.join([
MinRK
add basic tests for %%file, %%script
r7407 'line3',
'line4',
]))
with open(fname) as f:
s = f.read()
nt.assert_in('line1\n', s)
nt.assert_in('line3\n', s)
Shao Yang
add test to core/tests/test_magic
r24676
def test_file_spaces():
"""%%file with spaces in filename"""
ip = get_ipython()
with TemporaryWorkingDirectory() as td:
hongshaoyang
Update test_magic.py
r24677 fname = "file name"
Shao Yang
wrong quotes
r24679 ip.run_cell_magic("file", '"%s"'%fname, u'\n'.join([
Shao Yang
add test to core/tests/test_magic
r24676 'line1',
'line2',
]))
with open(fname) as f:
s = f.read()
nt.assert_in('line1\n', s)
nt.assert_in('line2', s)
Fernando Perez
Add support for finding cell magics with ?/??....
r6997
MinRK
add basic tests for %%file, %%script
r7407 def test_script_config():
ip = get_ipython()
ip.config.ScriptMagics.script_magics = ['whoda']
sm = script.ScriptMagics(shell=ip)
nt.assert_in('whoda', sm.magics['cell'])
@dec.skip_win32
def test_script_out():
ip = get_ipython()
ip.run_cell_magic("script", "--out output sh", "echo 'hi'")
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(ip.user_ns['output'], 'hi\n')
MinRK
add basic tests for %%file, %%script
r7407
@dec.skip_win32
def test_script_err():
ip = get_ipython()
ip.run_cell_magic("script", "--err error sh", "echo 'hello' >&2")
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(ip.user_ns['error'], 'hello\n')
MinRK
add basic tests for %%file, %%script
r7407
@dec.skip_win32
def test_script_out_err():
ip = get_ipython()
ip.run_cell_magic("script", "--out output --err error sh", "echo 'hi'\necho 'hello' >&2")
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(ip.user_ns['output'], 'hi\n')
nt.assert_equal(ip.user_ns['error'], 'hello\n')
MinRK
add basic tests for %%file, %%script
r7407
@dec.skip_win32
def test_script_bg_out():
ip = get_ipython()
ip.run_cell_magic("script", "--bg --out output sh", "echo 'hi'")
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(ip.user_ns['output'].read(), b'hi\n')
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375 ip.user_ns['output'].close()
MinRK
add basic tests for %%file, %%script
r7407
@dec.skip_win32
def test_script_bg_err():
ip = get_ipython()
ip.run_cell_magic("script", "--bg --err error sh", "echo 'hello' >&2")
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(ip.user_ns['error'].read(), b'hello\n')
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375 ip.user_ns['error'].close()
MinRK
add basic tests for %%file, %%script
r7407
@dec.skip_win32
def test_script_bg_out_err():
ip = get_ipython()
ip.run_cell_magic("script", "--bg --out output --err error sh", "echo 'hi'\necho 'hello' >&2")
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(ip.user_ns['output'].read(), b'hi\n')
nt.assert_equal(ip.user_ns['error'].read(), b'hello\n')
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375 ip.user_ns['output'].close()
ip.user_ns['error'].close()
MinRK
add basic tests for %%file, %%script
r7407
def test_script_defaults():
ip = get_ipython()
for cmd in ['sh', 'bash', 'perl', 'ruby']:
try:
find_cmd(cmd)
except Exception:
pass
else:
nt.assert_in(cmd, ip.magics_manager.magics['cell'])
MinRK
add test for inspection of synonymous line/cell magics
r7436
@magics_class
class FooFoo(Magics):
"""class with both %foo and %%foo magics"""
@line_magic('foo')
def line_foo(self, line):
"I am line foo"
pass
Bradley M. Froehle
Add tests for %alias_magic.
r7712
MinRK
add test for inspection of synonymous line/cell magics
r7436 @cell_magic("foo")
def cell_foo(self, line, cell):
"I am cell foo, not line foo"
pass
def test_line_cell_info():
"""%%foo and %foo magics are distinguishable to inspect"""
ip = get_ipython()
ip.magics_manager.register(FooFoo)
oinfo = ip.object_inspect('foo')
nt.assert_true(oinfo['found'])
nt.assert_true(oinfo['ismagic'])
oinfo = ip.object_inspect('%%foo')
nt.assert_true(oinfo['found'])
nt.assert_true(oinfo['ismagic'])
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(oinfo['docstring'], FooFoo.cell_foo.__doc__)
MinRK
add test for inspection of synonymous line/cell magics
r7436
oinfo = ip.object_inspect('%foo')
nt.assert_true(oinfo['found'])
nt.assert_true(oinfo['ismagic'])
Bradley M. Froehle
s/nt.assert_equals/nt.assert_equal/
r7875 nt.assert_equal(oinfo['docstring'], FooFoo.line_foo.__doc__)
MinRK
add failing test for registering multiple instances of the same magic
r7583
def test_multiple_magics():
ip = get_ipython()
foo1 = FooFoo(ip)
foo2 = FooFoo(ip)
mm = ip.magics_manager
mm.register(foo1)
Thomas Kluyver
Fix method special attributes...
r13370 nt.assert_true(mm.magics['line']['foo'].__self__ is foo1)
MinRK
add failing test for registering multiple instances of the same magic
r7583 mm.register(foo2)
Thomas Kluyver
Fix method special attributes...
r13370 nt.assert_true(mm.magics['line']['foo'].__self__ is foo2)
Bradley M. Froehle
Add tests for %alias_magic.
r7712
def test_alias_magic():
"""Test %alias_magic."""
ip = get_ipython()
mm = ip.magics_manager
# Basic operation: both cell and line magics are created, if possible.
ip.run_line_magic('alias_magic', 'timeit_alias timeit')
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_in('timeit_alias', mm.magics['line'])
nt.assert_in('timeit_alias', mm.magics['cell'])
Bradley M. Froehle
Add tests for %alias_magic.
r7712
# --cell is specified, line magic not created.
ip.run_line_magic('alias_magic', '--cell timeit_cell_alias timeit')
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_not_in('timeit_cell_alias', mm.magics['line'])
nt.assert_in('timeit_cell_alias', mm.magics['cell'])
Bradley M. Froehle
Add tests for %alias_magic.
r7712
# Test that line alias is created successfully.
ip.run_line_magic('alias_magic', '--line env_alias env')
nt.assert_equal(ip.run_line_magic('env', ''),
ip.run_line_magic('env_alias', ''))
Dominik Dabrowski
add test for %save
r7850
Nick Weseman
ENH: Add alias_magic parameters
r23639 # Test that line alias with parameters passed in is created successfully.
ip.run_line_magic('alias_magic', '--line history_alias history --params ' + shlex.quote('3'))
nt.assert_in('history_alias', mm.magics['line'])
Dominik Dabrowski
add test for %save
r7850 def test_save():
"""Test %save."""
ip = get_ipython()
ip.history_manager.reset() # Clear any existing history.
cmds = [u"a=1", u"def b():\n return a**2", u"print(a, b())"]
for i, cmd in enumerate(cmds, start=1):
ip.history_manager.store_inputs(i, cmd)
with TemporaryDirectory() as tmpdir:
file = os.path.join(tmpdir, "testsave.py")
ip.run_line_magic("save", "%s 1-10" % file)
with open(file) as f:
content = f.read()
nt.assert_equal(content.count(cmds[0]), 1)
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_in('coding: utf-8', content)
Dominik Dabrowski
add test for %save
r7850 ip.run_line_magic("save", "-a %s 1-10" % file)
with open(file) as f:
content = f.read()
nt.assert_equal(content.count(cmds[0]), 2)
MinRK
cleanup nt.assert usage in test_magic...
r11061 nt.assert_in('coding: utf-8', content)
Cavendish McKay
added test for %store, fixed storemagic
r8002
def test_store():
"""Test %store."""
ip = get_ipython()
ip.run_line_magic('load_ext', 'storemagic')
# make sure the storage is empty
ip.run_line_magic('store', '-z')
ip.user_ns['var'] = 42
ip.run_line_magic('store', 'var')
ip.user_ns['var'] = 39
ip.run_line_magic('store', '-r')
nt.assert_equal(ip.user_ns['var'], 42)
ip.run_line_magic('store', '-d var')
ip.user_ns['var'] = 39
ip.run_line_magic('store' , '-r')
nt.assert_equal(ip.user_ns['var'], 39)
MinRK
test %edit magic on interactively defined objects
r8993
def _run_edit_test(arg_s, exp_filename=None,
exp_lineno=-1,
exp_contents=None,
exp_is_temp=None):
ip = get_ipython()
M = code.CodeMagics(ip)
last_call = ['','']
opts,args = M.parse_options(arg_s,'prxn:')
filename, lineno, is_temp = M._find_edit_target(ip, args, opts, last_call)
if exp_filename is not None:
nt.assert_equal(exp_filename, filename)
if exp_contents is not None:
Thomas Kluyver
Specify encoding in remainining instances of io.open
r13657 with io.open(filename, 'r', encoding='utf-8') as f:
MinRK
test %edit magic on interactively defined objects
r8993 contents = f.read()
nt.assert_equal(exp_contents, contents)
if exp_lineno != -1:
nt.assert_equal(exp_lineno, lineno)
if exp_is_temp is not None:
nt.assert_equal(exp_is_temp, is_temp)
def test_edit_interactive():
"""%edit on interactively defined objects"""
ip = get_ipython()
n = ip.execution_count
ip.run_cell(u"def foo(): return 1", store_history=True)
try:
_run_edit_test("foo")
except code.InteractivelyDefined as e:
nt.assert_equal(e.index, n)
else:
Thomas Kluyver
Fix unrelated test....
r9141 raise AssertionError("Should have raised InteractivelyDefined")
MinRK
test %edit magic on interactively defined objects
r8993
def test_edit_cell():
"""%edit [cell id]"""
ip = get_ipython()
ip.run_cell(u"def foo(): return 1", store_history=True)
# test
_run_edit_test("1", exp_contents=ip.user_ns['In'][1], exp_is_temp=True)
Thomas Kluyver
Fix %bookmark -l for Python 3...
r16369
def test_bookmark():
ip = get_ipython()
ip.run_line_magic('bookmark', 'bmname')
with tt.AssertPrints('bmname'):
ip.run_line_magic('bookmark', '-l')
ip.run_line_magic('bookmark', '-d bmname')
Min RK
JSON formatter expects JSONable dict/list...
r19557
def test_ls_magic():
ip = get_ipython()
json_formatter = ip.display_formatter.formatters['application/json']
json_formatter.enabled = True
lsmagic = ip.magic('lsmagic')
with warnings.catch_warnings(record=True) as w:
j = json_formatter(lsmagic)
nt.assert_equal(sorted(j), ['cell', 'line'])
nt.assert_equal(w, []) # no warnings
Thomas Kluyver
Dedent leading lines on %load -r...
r22702
def test_strip_initial_indent():
def sii(s):
lines = s.splitlines()
return '\n'.join(code.strip_initial_indent(lines))
nt.assert_equal(sii(" a = 1\nb = 2"), "a = 1\nb = 2")
nt.assert_equal(sii(" a\n b\nc"), "a\n b\nc")
Thomas Kluyver
Fix test for strip_initial_indent
r22703 nt.assert_equal(sii("a\n b"), "a\n b")
Joshua Storck
Adding a -q option to the logstart magic to suppress output of log state. Also added a command line option
r23624
def test_logging_magic_quiet_from_arg():
_ip.config.LoggingMagics.quiet = False
lm = logging.LoggingMagics(shell=_ip)
with TemporaryDirectory() as td:
try:
with tt.AssertNotPrints(re.compile("Activating.*")):
lm.logstart('-q {}'.format(
os.path.join(td, "quiet_from_arg.log")))
finally:
_ip.logger.logstop()
def test_logging_magic_quiet_from_config():
_ip.config.LoggingMagics.quiet = True
lm = logging.LoggingMagics(shell=_ip)
with TemporaryDirectory() as td:
try:
with tt.AssertNotPrints(re.compile("Activating.*")):
lm.logstart(os.path.join(td, "quiet_from_config.log"))
finally:
_ip.logger.logstop()
Min RK
Don't expand user variables in execution magics...
r24859
Joshua Storck
Adding a -q option to the logstart magic to suppress output of log state. Also added a command line option
r23624 def test_logging_magic_not_quiet():
_ip.config.LoggingMagics.quiet = False
lm = logging.LoggingMagics(shell=_ip)
with TemporaryDirectory() as td:
try:
with tt.AssertPrints(re.compile("Activating.*")):
lm.logstart(os.path.join(td, "not_quiet.log"))
finally:
_ip.logger.logstop()
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375
Min RK
Don't expand user variables in execution magics...
r24859
def test_time_no_var_expand():
_ip.user_ns['a'] = 5
_ip.user_ns['b'] = []
_ip.magic('time b.append("{a}")')
assert _ip.user_ns['b'] == ['{a}']
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375 # this is slow, put at the end for local testing.
def test_timeit_arguments():
"Test valid timeit arguments, should not cause SyntaxError (GH #1269)"
if sys.version_info < (3,7):
Ed OBrien
Speed up timeit arguments test
r25065 _ip.magic("timeit -n1 -r1 ('#')")
Matthias Bussonnier
Autoclose stdin/err for bg scripts, when not assigned to user_ns...
r24375 else:
# 3.7 optimize no-op statement like above out, and complain there is
# nothing in the for loop.
Ed OBrien
Speed up timeit arguments test
r25065 _ip.magic("timeit -n1 -r1 a=('#')")
Nathan Goldbaum
support using '%run -m' for modules importable via an import hook
r25582
TEST_MODULE = """
print('Loaded my_tmp')
if __name__ == "__main__":
print('I just ran a script')
"""
def test_run_module_from_import_hook():
"Test that a module can be loaded via an import hook"
with TemporaryDirectory() as tmpdir:
fullpath = os.path.join(tmpdir, 'my_tmp.py')
with open(fullpath, 'w') as f:
f.write(TEST_MODULE)
class MyTempImporter(object):
def __init__(self):
pass
def find_module(self, fullname, path=None):
if 'my_tmp' in fullname:
return self
return None
def load_module(self, name):
import imp
return imp.load_source('my_tmp', fullpath)
def get_code(self, fullname):
with open(fullpath, 'r') as f:
return compile(f.read(), 'foo', 'exec')
def is_package(self, __):
return False
sys.meta_path.insert(0, MyTempImporter())
with capture_output() as captured:
_ip.magic("run -m my_tmp")
_ip.run_cell("import my_tmp")
output = "Loaded my_tmp\nI just ran a script\nLoaded my_tmp\n"
nt.assert_equal(output, captured.stdout)
sys.meta_path.pop(0)