##// END OF EJS Templates
[core][tests][magic] Remove nose
Samuel Gaist -
Show More
@@ -17,8 +17,6 b' from pathlib import Path'
17 from textwrap import dedent
17 from textwrap import dedent
18 from unittest import TestCase, mock
18 from unittest import TestCase, mock
19
19
20 import nose.tools as nt
21
22 import pytest
20 import pytest
23
21
24 from IPython import get_ipython
22 from IPython import get_ipython
@@ -47,7 +45,8 b' class DummyMagics(magic.Magics): pass'
47
45
48 def test_extract_code_ranges():
46 def test_extract_code_ranges():
49 instr = "1 3 5-6 7-9 10:15 17: :10 10- -13 :"
47 instr = "1 3 5-6 7-9 10:15 17: :10 10- -13 :"
50 expected = [(0, 1),
48 expected = [
49 (0, 1),
51 (2, 3),
50 (2, 3),
52 (4, 6),
51 (4, 6),
53 (6, 9),
52 (6, 9),
@@ -56,9 +55,10 b' def test_extract_code_ranges():'
56 (None, 9),
55 (None, 9),
57 (9, None),
56 (9, None),
58 (None, 13),
57 (None, 13),
59 (None, None)]
58 (None, None),
59 ]
60 actual = list(code.extract_code_ranges(instr))
60 actual = list(code.extract_code_ranges(instr))
61 nt.assert_equal(actual, expected)
61 assert actual == expected
62
62
63 def test_extract_symbols():
63 def test_extract_symbols():
64 source = """import foo\na = 10\ndef b():\n return 42\n\n\nclass A: pass\n\n\n"""
64 source = """import foo\na = 10\ndef b():\n return 42\n\n\nclass A: pass\n\n\n"""
@@ -70,7 +70,7 b' def test_extract_symbols():'
70 (["class A: pass\n"], ['a']),
70 (["class A: pass\n"], ['a']),
71 ([], ['z'])]
71 ([], ['z'])]
72 for symbols, exp in zip(symbols_args, expected):
72 for symbols, exp in zip(symbols_args, expected):
73 nt.assert_equal(code.extract_symbols(source, symbols), exp)
73 assert code.extract_symbols(source, symbols) == exp
74
74
75
75
76 def test_extract_symbols_raises_exception_with_non_python_code():
76 def test_extract_symbols_raises_exception_with_non_python_code():
@@ -78,13 +78,13 b' def test_extract_symbols_raises_exception_with_non_python_code():'
78 "def hello\n"
78 "def hello\n"
79 "puts 'Hello world'\n"
79 "puts 'Hello world'\n"
80 "end")
80 "end")
81 with nt.assert_raises(SyntaxError):
81 with pytest.raises(SyntaxError):
82 code.extract_symbols(source, "hello")
82 code.extract_symbols(source, "hello")
83
83
84
84
85 def test_magic_not_found():
85 def test_magic_not_found():
86 # magic not found raises UsageError
86 # magic not found raises UsageError
87 with nt.assert_raises(UsageError):
87 with pytest.raises(UsageError):
88 _ip.magic('doesntexist')
88 _ip.magic('doesntexist')
89
89
90 # ensure result isn't success when a magic isn't found
90 # ensure result isn't success when a magic isn't found
@@ -94,7 +94,7 b' def test_magic_not_found():'
94
94
95 def test_cell_magic_not_found():
95 def test_cell_magic_not_found():
96 # magic not found raises UsageError
96 # magic not found raises UsageError
97 with nt.assert_raises(UsageError):
97 with pytest.raises(UsageError):
98 _ip.run_cell_magic('doesntexist', 'line', 'cell')
98 _ip.run_cell_magic('doesntexist', 'line', 'cell')
99
99
100 # ensure result isn't success when a magic isn't found
100 # ensure result isn't success when a magic isn't found
@@ -127,7 +127,7 b' def test_config_available_configs():'
127
127
128 stdout = captured.stdout
128 stdout = captured.stdout
129 config_classes = stdout.strip().split('\n')[1:]
129 config_classes = stdout.strip().split('\n')[1:]
130 nt.assert_list_equal(config_classes, sorted(set(config_classes)))
130 assert config_classes == sorted(set(config_classes))
131
131
132 def test_config_print_class():
132 def test_config_print_class():
133 """ test that config with a classname prints the class's options. """
133 """ test that config with a classname prints the class's options. """
@@ -148,15 +148,14 b' def test_rehashx():'
148 _ip.magic('rehashx')
148 _ip.magic('rehashx')
149 # Practically ALL ipython development systems will have more than 10 aliases
149 # Practically ALL ipython development systems will have more than 10 aliases
150
150
151 nt.assert_true(len(_ip.alias_manager.aliases) > 10)
151 assert len(_ip.alias_manager.aliases) > 10
152 for name, cmd in _ip.alias_manager.aliases:
152 for name, cmd in _ip.alias_manager.aliases:
153 # we must strip dots from alias names
153 # we must strip dots from alias names
154 nt.assert_not_in('.', name)
154 assert "." not in name
155
155
156 # rehashx must fill up syscmdlist
156 # rehashx must fill up syscmdlist
157 scoms = _ip.db['syscmdlist']
157 scoms = _ip.db['syscmdlist']
158 nt.assert_true(len(scoms) > 10)
158 assert len(scoms) > 10
159
160
159
161
160
162 def test_magic_parse_options():
161 def test_magic_parse_options():
@@ -170,16 +169,17 b' def test_magic_parse_options():'
170 expected = 'c:x'
169 expected = 'c:x'
171 else:
170 else:
172 expected = path
171 expected = path
173 nt.assert_equal(opts['f'], expected)
172 assert opts["f"] == expected
173
174
174
175 def test_magic_parse_long_options():
175 def test_magic_parse_long_options():
176 """Magic.parse_options can handle --foo=bar long options"""
176 """Magic.parse_options can handle --foo=bar long options"""
177 ip = get_ipython()
177 ip = get_ipython()
178 m = DummyMagics(ip)
178 m = DummyMagics(ip)
179 opts, _ = m.parse_options('--foo --bar=bubble', 'a', 'foo', 'bar=')
179 opts, _ = m.parse_options("--foo --bar=bubble", "a", "foo", "bar=")
180 nt.assert_in('foo', opts)
180 assert "foo" in opts
181 nt.assert_in('bar', opts)
181 assert "bar" in opts
182 nt.assert_equal(opts['bar'], "bubble")
182 assert opts["bar"] == "bubble"
183
183
184
184
185 def doctest_hist_f():
185 def doctest_hist_f():
@@ -263,7 +263,7 b' def doctest_hist_op():'
263
263
264 def test_hist_pof():
264 def test_hist_pof():
265 ip = get_ipython()
265 ip = get_ipython()
266 ip.run_cell(u"1+2", store_history=True)
266 ip.run_cell("1+2", store_history=True)
267 #raise Exception(ip.history_manager.session_number)
267 #raise Exception(ip.history_manager.session_number)
268 #raise Exception(list(ip.history_manager._get_range_session()))
268 #raise Exception(list(ip.history_manager._get_range_session()))
269 with TemporaryDirectory() as td:
269 with TemporaryDirectory() as td:
@@ -279,10 +279,10 b' def test_macro():'
279 for i, cmd in enumerate(cmds, start=1):
279 for i, cmd in enumerate(cmds, start=1):
280 ip.history_manager.store_inputs(i, cmd)
280 ip.history_manager.store_inputs(i, cmd)
281 ip.magic("macro test 1-3")
281 ip.magic("macro test 1-3")
282 nt.assert_equal(ip.user_ns["test"].value, "\n".join(cmds)+"\n")
282 assert ip.user_ns["test"].value == "\n".join(cmds) + "\n"
283
283
284 # List macros
284 # List macros
285 nt.assert_in("test", ip.magic("macro"))
285 assert "test" in ip.magic("macro")
286
286
287
287
288 def test_macro_run():
288 def test_macro_run():
@@ -292,7 +292,7 b' def test_macro_run():'
292 cmds = ["a=10", "a+=1", "print(a)", "%macro test 2-3"]
292 cmds = ["a=10", "a+=1", "print(a)", "%macro test 2-3"]
293 for cmd in cmds:
293 for cmd in cmds:
294 ip.run_cell(cmd, store_history=True)
294 ip.run_cell(cmd, store_history=True)
295 nt.assert_equal(ip.user_ns["test"].value, "a+=1\nprint(a)\n")
295 assert ip.user_ns["test"].value == "a+=1\nprint(a)\n"
296 with tt.AssertPrints("12"):
296 with tt.AssertPrints("12"):
297 ip.run_cell("test")
297 ip.run_cell("test")
298 with tt.AssertPrints("13"):
298 with tt.AssertPrints("13"):
@@ -306,54 +306,59 b' def test_magic_magic():'
306 ip.magic("magic")
306 ip.magic("magic")
307
307
308 stdout = captured.stdout
308 stdout = captured.stdout
309 nt.assert_in('%magic', stdout)
309 assert "%magic" in stdout
310 nt.assert_in('IPython', stdout)
310 assert "IPython" in stdout
311 nt.assert_in('Available', stdout)
311 assert "Available" in stdout
312
312
313
313
314 @dec.skipif_not_numpy
314 @dec.skipif_not_numpy
315 def test_numpy_reset_array_undec():
315 def test_numpy_reset_array_undec():
316 "Test '%reset array' functionality"
316 "Test '%reset array' functionality"
317 _ip.ex('import numpy as np')
317 _ip.ex("import numpy as np")
318 _ip.ex('a = np.empty(2)')
318 _ip.ex("a = np.empty(2)")
319 nt.assert_in('a', _ip.user_ns)
319 assert "a" in _ip.user_ns
320 _ip.magic('reset -f array')
320 _ip.magic("reset -f array")
321 nt.assert_not_in('a', _ip.user_ns)
321 assert "a" not in _ip.user_ns
322
322
323
323 def test_reset_out():
324 def test_reset_out():
324 "Test '%reset out' magic"
325 "Test '%reset out' magic"
325 _ip.run_cell("parrot = 'dead'", store_history=True)
326 _ip.run_cell("parrot = 'dead'", store_history=True)
326 # test '%reset -f out', make an Out prompt
327 # test '%reset -f out', make an Out prompt
327 _ip.run_cell("parrot", store_history=True)
328 _ip.run_cell("parrot", store_history=True)
328 nt.assert_true('dead' in [_ip.user_ns[x] for x in ('_','__','___')])
329 assert "dead" in [_ip.user_ns[x] for x in ("_", "__", "___")]
329 _ip.magic('reset -f out')
330 _ip.magic("reset -f out")
330 nt.assert_false('dead' in [_ip.user_ns[x] for x in ('_','__','___')])
331 assert "dead" not in [_ip.user_ns[x] for x in ("_", "__", "___")]
331 nt.assert_equal(len(_ip.user_ns['Out']), 0)
332 assert len(_ip.user_ns["Out"]) == 0
333
332
334
333 def test_reset_in():
335 def test_reset_in():
334 "Test '%reset in' magic"
336 "Test '%reset in' magic"
335 # test '%reset -f in'
337 # test '%reset -f in'
336 _ip.run_cell("parrot", store_history=True)
338 _ip.run_cell("parrot", store_history=True)
337 nt.assert_true('parrot' in [_ip.user_ns[x] for x in ('_i','_ii','_iii')])
339 assert "parrot" in [_ip.user_ns[x] for x in ("_i", "_ii", "_iii")]
338 _ip.magic('%reset -f in')
340 _ip.magic("%reset -f in")
339 nt.assert_false('parrot' in [_ip.user_ns[x] for x in ('_i','_ii','_iii')])
341 assert "parrot" not in [_ip.user_ns[x] for x in ("_i", "_ii", "_iii")]
340 nt.assert_equal(len(set(_ip.user_ns['In'])), 1)
342 assert len(set(_ip.user_ns["In"])) == 1
343
341
344
342 def test_reset_dhist():
345 def test_reset_dhist():
343 "Test '%reset dhist' magic"
346 "Test '%reset dhist' magic"
344 _ip.run_cell("tmp = [d for d in _dh]") # copy before clearing
347 _ip.run_cell("tmp = [d for d in _dh]") # copy before clearing
345 _ip.magic('cd ' + os.path.dirname(nt.__file__))
348 _ip.magic("cd " + os.path.dirname(pytest.__file__))
346 _ip.magic('cd -')
349 _ip.magic("cd -")
347 nt.assert_true(len(_ip.user_ns['_dh']) > 0)
350 assert len(_ip.user_ns["_dh"]) > 0
348 _ip.magic('reset -f dhist')
351 _ip.magic("reset -f dhist")
349 nt.assert_equal(len(_ip.user_ns['_dh']), 0)
352 assert len(_ip.user_ns["_dh"]) == 0
350 _ip.run_cell("_dh = [d for d in tmp]") #restore
353 _ip.run_cell("_dh = [d for d in tmp]") # restore
351
354
355
352 def test_reset_in_length():
356 def test_reset_in_length():
353 "Test that '%reset in' preserves In[] length"
357 "Test that '%reset in' preserves In[] length"
354 _ip.run_cell("print 'foo'")
358 _ip.run_cell("print 'foo'")
355 _ip.run_cell("reset -f in")
359 _ip.run_cell("reset -f in")
356 nt.assert_equal(len(_ip.user_ns['In']), _ip.displayhook.prompt_count+1)
360 assert len(_ip.user_ns["In"]) == _ip.displayhook.prompt_count + 1
361
357
362
358 class TestResetErrors(TestCase):
363 class TestResetErrors(TestCase):
359
364
@@ -395,7 +400,7 b' def test_tb_syntaxerror():'
395 sys.stdout = save_stdout
400 sys.stdout = save_stdout
396 # trim output, and only check the last line
401 # trim output, and only check the last line
397 last_line = out.rstrip().splitlines()[-1].strip()
402 last_line = out.rstrip().splitlines()[-1].strip()
398 nt.assert_equal(last_line, "SyntaxError: invalid syntax")
403 assert last_line == "SyntaxError: invalid syntax"
399
404
400
405
401 def test_time():
406 def test_time():
@@ -448,18 +453,21 b' def test_multiline_time():'
448 a = "ho"
453 a = "ho"
449 b = "hey"
454 b = "hey"
450 a+b
455 a+b
451 """))
456 """
452 nt.assert_equal(ip.user_ns_hidden['_'], 'hohey')
457 )
458 )
459 assert ip.user_ns_hidden["_"] == "hohey"
460
453
461
454 def test_time_local_ns():
462 def test_time_local_ns():
455 """
463 """
456 Test that local_ns is actually global_ns when running a cell magic
464 Test that local_ns is actually global_ns when running a cell magic
457 """
465 """
458 ip = get_ipython()
466 ip = get_ipython()
459 ip.run_cell("%%time\n"
467 ip.run_cell("%%time\n" "myvar = 1")
460 "myvar = 1")
468 assert ip.user_ns["myvar"] == 1
461 nt.assert_equal(ip.user_ns['myvar'], 1)
469 del ip.user_ns["myvar"]
462 del ip.user_ns['myvar']
470
463
471
464 def test_doctest_mode():
472 def test_doctest_mode():
465 "Toggle doctest_mode twice, it should be a no-op and run without error"
473 "Toggle doctest_mode twice, it should be a no-op and run without error"
@@ -472,8 +480,8 b' def test_parse_options():'
472 # These are only the most minimal of tests, more should be added later. At
480 # These are only the most minimal of tests, more should be added later. At
473 # the very least we check that basic text/unicode calls work OK.
481 # the very least we check that basic text/unicode calls work OK.
474 m = DummyMagics(_ip)
482 m = DummyMagics(_ip)
475 nt.assert_equal(m.parse_options('foo', '')[1], 'foo')
483 assert m.parse_options("foo", "")[1] == "foo"
476 nt.assert_equal(m.parse_options(u'foo', '')[1], u'foo')
484 assert m.parse_options("foo", "")[1] == "foo"
477
485
478
486
479 def test_parse_options_preserve_non_option_string():
487 def test_parse_options_preserve_non_option_string():
@@ -482,8 +490,8 b' def test_parse_options_preserve_non_option_string():'
482 opts, stmt = m.parse_options(
490 opts, stmt = m.parse_options(
483 " -n1 -r 13 _ = 314 + foo", "n:r:", preserve_non_opts=True
491 " -n1 -r 13 _ = 314 + foo", "n:r:", preserve_non_opts=True
484 )
492 )
485 nt.assert_equal(opts, {"n": "1", "r": "13"})
493 assert opts == {"n": "1", "r": "13"}
486 nt.assert_equal(stmt, "_ = 314 + foo")
494 assert stmt == "_ = 314 + foo"
487
495
488
496
489 def test_run_magic_preserve_code_block():
497 def test_run_magic_preserve_code_block():
@@ -501,13 +509,13 b' def test_dirops():'
501 ipdir = os.path.realpath(_ip.ipython_dir)
509 ipdir = os.path.realpath(_ip.ipython_dir)
502 try:
510 try:
503 _ip.magic('cd "%s"' % ipdir)
511 _ip.magic('cd "%s"' % ipdir)
504 nt.assert_equal(curpath(), ipdir)
512 assert curpath() == ipdir
505 _ip.magic('cd -')
513 _ip.magic('cd -')
506 nt.assert_equal(curpath(), startdir)
514 assert curpath() == startdir
507 _ip.magic('pushd "%s"' % ipdir)
515 _ip.magic('pushd "%s"' % ipdir)
508 nt.assert_equal(curpath(), ipdir)
516 assert curpath() == ipdir
509 _ip.magic('popd')
517 _ip.magic('popd')
510 nt.assert_equal(curpath(), startdir)
518 assert curpath() == startdir
511 finally:
519 finally:
512 os.chdir(startdir)
520 os.chdir(startdir)
513
521
@@ -534,7 +542,7 b' def test_xmode():'
534 xmode = _ip.InteractiveTB.mode
542 xmode = _ip.InteractiveTB.mode
535 for i in range(4):
543 for i in range(4):
536 _ip.magic("xmode")
544 _ip.magic("xmode")
537 nt.assert_equal(_ip.InteractiveTB.mode, xmode)
545 assert _ip.InteractiveTB.mode == xmode
538
546
539 def test_reset_hard():
547 def test_reset_hard():
540 monitor = []
548 monitor = []
@@ -547,9 +555,9 b' def test_reset_hard():'
547 _ip.user_ns["a"] = A()
555 _ip.user_ns["a"] = A()
548 _ip.run_cell("a")
556 _ip.run_cell("a")
549
557
550 nt.assert_equal(monitor, [])
558 assert monitor == []
551 _ip.magic("reset -f")
559 _ip.magic("reset -f")
552 nt.assert_equal(monitor, [1])
560 assert monitor == [1]
553
561
554 class TestXdel(tt.TempFileMixin):
562 class TestXdel(tt.TempFileMixin):
555 def test_xdel(self):
563 def test_xdel(self):
@@ -566,12 +574,12 b' class TestXdel(tt.TempFileMixin):'
566 _ip.run_cell("a")
574 _ip.run_cell("a")
567
575
568 monitor = _ip.user_ns["A"].monitor
576 monitor = _ip.user_ns["A"].monitor
569 nt.assert_equal(monitor, [])
577 assert monitor == []
570
578
571 _ip.magic("xdel a")
579 _ip.magic("xdel a")
572
580
573 # Check that a's __del__ method has been called.
581 # Check that a's __del__ method has been called.
574 nt.assert_equal(monitor, [1])
582 assert monitor == [1]
575
583
576 def doctest_who():
584 def doctest_who():
577 """doctest for %who
585 """doctest for %who
@@ -661,11 +669,12 b' def test_timeit_special_syntax():'
661 ip.user_ns['lmagic_out'] = line
669 ip.user_ns['lmagic_out'] = line
662
670
663 # line mode test
671 # line mode test
664 _ip.run_line_magic('timeit', '-n1 -r1 %lmagic my line')
672 _ip.run_line_magic("timeit", "-n1 -r1 %lmagic my line")
665 nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line')
673 assert _ip.user_ns["lmagic_out"] == "my line"
666 # cell mode test
674 # cell mode test
667 _ip.run_cell_magic('timeit', '-n1 -r1', '%lmagic my line2')
675 _ip.run_cell_magic("timeit", "-n1 -r1", "%lmagic my line2")
668 nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line2')
676 assert _ip.user_ns["lmagic_out"] == "my line2"
677
669
678
670 def test_timeit_return():
679 def test_timeit_return():
671 """
680 """
@@ -688,7 +697,7 b' def test_timeit_return_quiet():'
688 assert (res is not None)
697 assert (res is not None)
689
698
690 def test_timeit_invalid_return():
699 def test_timeit_invalid_return():
691 with nt.assert_raises_regex(SyntaxError, "outside function"):
700 with pytest.raises(SyntaxError):
692 _ip.run_line_magic('timeit', 'return')
701 _ip.run_line_magic('timeit', 'return')
693
702
694 @dec.skipif(execution.profile is None)
703 @dec.skipif(execution.profile is None)
@@ -700,17 +709,19 b' def test_prun_special_syntax():'
700 ip.user_ns['lmagic_out'] = line
709 ip.user_ns['lmagic_out'] = line
701
710
702 # line mode test
711 # line mode test
703 _ip.run_line_magic('prun', '-q %lmagic my line')
712 _ip.run_line_magic("prun", "-q %lmagic my line")
704 nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line')
713 assert _ip.user_ns["lmagic_out"] == "my line"
705 # cell mode test
714 # cell mode test
706 _ip.run_cell_magic('prun', '-q', '%lmagic my line2')
715 _ip.run_cell_magic("prun", "-q", "%lmagic my line2")
707 nt.assert_equal(_ip.user_ns['lmagic_out'], 'my line2')
716 assert _ip.user_ns["lmagic_out"] == "my line2"
717
708
718
709 @dec.skipif(execution.profile is None)
719 @dec.skipif(execution.profile is None)
710 def test_prun_quotes():
720 def test_prun_quotes():
711 "Test that prun does not clobber string escapes (GH #1302)"
721 "Test that prun does not clobber string escapes (GH #1302)"
712 _ip.magic(r"prun -q x = '\t'")
722 _ip.magic(r"prun -q x = '\t'")
713 nt.assert_equal(_ip.user_ns['x'], '\t')
723 assert _ip.user_ns["x"] == "\t"
724
714
725
715 def test_extension():
726 def test_extension():
716 # Debugging information for failures of this test
727 # Debugging information for failures of this test
@@ -719,14 +730,14 b' def test_extension():'
719 print(' ', p)
730 print(' ', p)
720 print('CWD', os.getcwd())
731 print('CWD', os.getcwd())
721
732
722 nt.assert_raises(ImportError, _ip.magic, "load_ext daft_extension")
733 pytest.raises(ImportError, _ip.magic, "load_ext daft_extension")
723 daft_path = os.path.join(os.path.dirname(__file__), "daft_extension")
734 daft_path = os.path.join(os.path.dirname(__file__), "daft_extension")
724 sys.path.insert(0, daft_path)
735 sys.path.insert(0, daft_path)
725 try:
736 try:
726 _ip.user_ns.pop('arq', None)
737 _ip.user_ns.pop('arq', None)
727 invalidate_caches() # Clear import caches
738 invalidate_caches() # Clear import caches
728 _ip.magic("load_ext daft_extension")
739 _ip.magic("load_ext daft_extension")
729 nt.assert_equal(_ip.user_ns['arq'], 185)
740 assert _ip.user_ns["arq"] == 185
730 _ip.magic("unload_ext daft_extension")
741 _ip.magic("unload_ext daft_extension")
731 assert 'arq' not in _ip.user_ns
742 assert 'arq' not in _ip.user_ns
732 finally:
743 finally:
@@ -736,7 +747,7 b' def test_extension():'
736 def test_notebook_export_json():
747 def test_notebook_export_json():
737 _ip = get_ipython()
748 _ip = get_ipython()
738 _ip.history_manager.reset() # Clear any existing history.
749 _ip.history_manager.reset() # Clear any existing history.
739 cmds = [u"a=1", u"def b():\n return a**2", u"print('noΓ«l, Γ©tΓ©', b())"]
750 cmds = ["a=1", "def b():\n return a**2", "print('noΓ«l, Γ©tΓ©', b())"]
740 for i, cmd in enumerate(cmds, start=1):
751 for i, cmd in enumerate(cmds, start=1):
741 _ip.history_manager.store_inputs(i, cmd)
752 _ip.history_manager.store_inputs(i, cmd)
742 with TemporaryDirectory() as td:
753 with TemporaryDirectory() as td:
@@ -797,11 +808,11 b' class CellMagicTestCase(TestCase):'
797
808
798 def check_ident(self, magic):
809 def check_ident(self, magic):
799 # Manually called, we get the result
810 # Manually called, we get the result
800 out = _ip.run_cell_magic(magic, 'a', 'b')
811 out = _ip.run_cell_magic(magic, "a", "b")
801 nt.assert_equal(out, ('a','b'))
812 assert out == ("a", "b")
802 # Via run_cell, it goes into the user's namespace via displayhook
813 # Via run_cell, it goes into the user's namespace via displayhook
803 _ip.run_cell('%%' + magic +' c\nd\n')
814 _ip.run_cell("%%" + magic + " c\nd\n")
804 nt.assert_equal(_ip.user_ns['_'], ('c','d\n'))
815 assert _ip.user_ns["_"] == ("c", "d\n")
805
816
806 def test_cell_magic_func_deco(self):
817 def test_cell_magic_func_deco(self):
807 "Cell magic using simple decorator"
818 "Cell magic using simple decorator"
@@ -844,7 +855,7 b' class CellMagicTestCase(TestCase):'
844 self.check_ident('cellm4')
855 self.check_ident('cellm4')
845 # Check that nothing is registered as 'cellm33'
856 # Check that nothing is registered as 'cellm33'
846 c33 = _ip.find_cell_magic('cellm33')
857 c33 = _ip.find_cell_magic('cellm33')
847 nt.assert_equal(c33, None)
858 assert c33 == None
848
859
849 def test_file():
860 def test_file():
850 """Basic %%writefile"""
861 """Basic %%writefile"""
@@ -856,8 +867,9 b' def test_file():'
856 'line2',
867 'line2',
857 ]))
868 ]))
858 s = Path(fname).read_text()
869 s = Path(fname).read_text()
859 nt.assert_in('line1\n', s)
870 assert "line1\n" in s
860 nt.assert_in('line2', s)
871 assert "line2" in s
872
861
873
862 @dec.skip_win32
874 @dec.skip_win32
863 def test_file_single_quote():
875 def test_file_single_quote():
@@ -870,8 +882,9 b' def test_file_single_quote():'
870 'line2',
882 'line2',
871 ]))
883 ]))
872 s = Path(fname).read_text()
884 s = Path(fname).read_text()
873 nt.assert_in('line1\n', s)
885 assert "line1\n" in s
874 nt.assert_in('line2', s)
886 assert "line2" in s
887
875
888
876 @dec.skip_win32
889 @dec.skip_win32
877 def test_file_double_quote():
890 def test_file_double_quote():
@@ -884,8 +897,9 b' def test_file_double_quote():'
884 'line2',
897 'line2',
885 ]))
898 ]))
886 s = Path(fname).read_text()
899 s = Path(fname).read_text()
887 nt.assert_in('line1\n', s)
900 assert "line1\n" in s
888 nt.assert_in('line2', s)
901 assert "line2" in s
902
889
903
890 def test_file_var_expand():
904 def test_file_var_expand():
891 """%%writefile $filename"""
905 """%%writefile $filename"""
@@ -898,8 +912,9 b' def test_file_var_expand():'
898 'line2',
912 'line2',
899 ]))
913 ]))
900 s = Path(fname).read_text()
914 s = Path(fname).read_text()
901 nt.assert_in('line1\n', s)
915 assert "line1\n" in s
902 nt.assert_in('line2', s)
916 assert "line2" in s
917
903
918
904 def test_file_unicode():
919 def test_file_unicode():
905 """%%writefile with unicode cell"""
920 """%%writefile with unicode cell"""
@@ -912,8 +927,9 b' def test_file_unicode():'
912 ]))
927 ]))
913 with io.open(fname, encoding='utf-8') as f:
928 with io.open(fname, encoding='utf-8') as f:
914 s = f.read()
929 s = f.read()
915 nt.assert_in(u'linΓ©1\n', s)
930 assert "linΓ©1\n" in s
916 nt.assert_in(u'linΓ©2', s)
931 assert "linΓ©2" in s
932
917
933
918 def test_file_amend():
934 def test_file_amend():
919 """%%writefile -a amends files"""
935 """%%writefile -a amends files"""
@@ -929,8 +945,9 b' def test_file_amend():'
929 'line4',
945 'line4',
930 ]))
946 ]))
931 s = Path(fname).read_text()
947 s = Path(fname).read_text()
932 nt.assert_in('line1\n', s)
948 assert "line1\n" in s
933 nt.assert_in('line3\n', s)
949 assert "line3\n" in s
950
934
951
935 def test_file_spaces():
952 def test_file_spaces():
936 """%%file with spaces in filename"""
953 """%%file with spaces in filename"""
@@ -942,14 +959,16 b' def test_file_spaces():'
942 'line2',
959 'line2',
943 ]))
960 ]))
944 s = Path(fname).read_text()
961 s = Path(fname).read_text()
945 nt.assert_in('line1\n', s)
962 assert "line1\n" in s
946 nt.assert_in('line2', s)
963 assert "line2" in s
964
947
965
948 def test_script_config():
966 def test_script_config():
949 ip = get_ipython()
967 ip = get_ipython()
950 ip.config.ScriptMagics.script_magics = ['whoda']
968 ip.config.ScriptMagics.script_magics = ['whoda']
951 sm = script.ScriptMagics(shell=ip)
969 sm = script.ScriptMagics(shell=ip)
952 nt.assert_in('whoda', sm.magics['cell'])
970 assert "whoda" in sm.magics["cell"]
971
953
972
954 @dec.skip_iptest_but_not_pytest
973 @dec.skip_iptest_but_not_pytest
955 @dec.skip_win32
974 @dec.skip_win32
@@ -962,7 +981,8 b' def test_script_out():'
962 ip = get_ipython()
981 ip = get_ipython()
963 ip.run_cell_magic("script", "--out output sh", "echo 'hi'")
982 ip.run_cell_magic("script", "--out output sh", "echo 'hi'")
964 assert asyncio.get_event_loop().is_running() is False
983 assert asyncio.get_event_loop().is_running() is False
965 nt.assert_equal(ip.user_ns['output'], 'hi\n')
984 assert ip.user_ns["output"] == "hi\n"
985
966
986
967 @dec.skip_iptest_but_not_pytest
987 @dec.skip_iptest_but_not_pytest
968 @dec.skip_win32
988 @dec.skip_win32
@@ -974,7 +994,7 b' def test_script_err():'
974 assert asyncio.get_event_loop().is_running() is False
994 assert asyncio.get_event_loop().is_running() is False
975 ip.run_cell_magic("script", "--err error sh", "echo 'hello' >&2")
995 ip.run_cell_magic("script", "--err error sh", "echo 'hello' >&2")
976 assert asyncio.get_event_loop().is_running() is False
996 assert asyncio.get_event_loop().is_running() is False
977 nt.assert_equal(ip.user_ns['error'], 'hello\n')
997 assert ip.user_ns["error"] == "hello\n"
978
998
979
999
980 @dec.skip_iptest_but_not_pytest
1000 @dec.skip_iptest_but_not_pytest
@@ -988,8 +1008,8 b' def test_script_out_err():'
988 ip.run_cell_magic(
1008 ip.run_cell_magic(
989 "script", "--out output --err error sh", "echo 'hi'\necho 'hello' >&2"
1009 "script", "--out output --err error sh", "echo 'hi'\necho 'hello' >&2"
990 )
1010 )
991 nt.assert_equal(ip.user_ns["output"], "hi\n")
1011 assert ip.user_ns["output"] == "hi\n"
992 nt.assert_equal(ip.user_ns["error"], "hello\n")
1012 assert ip.user_ns["error"] == "hello\n"
993
1013
994
1014
995 @dec.skip_iptest_but_not_pytest
1015 @dec.skip_iptest_but_not_pytest
@@ -1000,10 +1020,11 b' def test_script_out_err():'
1000 async def test_script_bg_out():
1020 async def test_script_bg_out():
1001 ip = get_ipython()
1021 ip = get_ipython()
1002 ip.run_cell_magic("script", "--bg --out output sh", "echo 'hi'")
1022 ip.run_cell_magic("script", "--bg --out output sh", "echo 'hi'")
1003 nt.assert_equal((await ip.user_ns["output"].read()), b"hi\n")
1023 assert (await ip.user_ns["output"].read()) == b"hi\n"
1004 ip.user_ns["output"].close()
1024 ip.user_ns["output"].close()
1005 asyncio.get_event_loop().stop()
1025 asyncio.get_event_loop().stop()
1006
1026
1027
1007 @dec.skip_iptest_but_not_pytest
1028 @dec.skip_iptest_but_not_pytest
1008 @dec.skip_win32
1029 @dec.skip_win32
1009 @pytest.mark.skipif(
1030 @pytest.mark.skipif(
@@ -1012,7 +1033,7 b' async def test_script_bg_out():'
1012 async def test_script_bg_err():
1033 async def test_script_bg_err():
1013 ip = get_ipython()
1034 ip = get_ipython()
1014 ip.run_cell_magic("script", "--bg --err error sh", "echo 'hello' >&2")
1035 ip.run_cell_magic("script", "--bg --err error sh", "echo 'hello' >&2")
1015 nt.assert_equal((await ip.user_ns["error"].read()), b"hello\n")
1036 assert (await ip.user_ns["error"].read()) == b"hello\n"
1016 ip.user_ns["error"].close()
1037 ip.user_ns["error"].close()
1017
1038
1018
1039
@@ -1026,8 +1047,8 b' async def test_script_bg_out_err():'
1026 ip.run_cell_magic(
1047 ip.run_cell_magic(
1027 "script", "--bg --out output --err error sh", "echo 'hi'\necho 'hello' >&2"
1048 "script", "--bg --out output --err error sh", "echo 'hi'\necho 'hello' >&2"
1028 )
1049 )
1029 nt.assert_equal((await ip.user_ns["output"].read()), b"hi\n")
1050 assert (await ip.user_ns["output"].read()) == b"hi\n"
1030 nt.assert_equal((await ip.user_ns["error"].read()), b"hello\n")
1051 assert (await ip.user_ns["error"].read()) == b"hello\n"
1031 ip.user_ns["output"].close()
1052 ip.user_ns["output"].close()
1032 ip.user_ns["error"].close()
1053 ip.user_ns["error"].close()
1033
1054
@@ -1040,7 +1061,7 b' def test_script_defaults():'
1040 except Exception:
1061 except Exception:
1041 pass
1062 pass
1042 else:
1063 else:
1043 nt.assert_in(cmd, ip.magics_manager.magics['cell'])
1064 assert cmd in ip.magics_manager.magics["cell"]
1044
1065
1045
1066
1046 @magics_class
1067 @magics_class
@@ -1060,19 +1081,20 b' def test_line_cell_info():'
1060 """%%foo and %foo magics are distinguishable to inspect"""
1081 """%%foo and %foo magics are distinguishable to inspect"""
1061 ip = get_ipython()
1082 ip = get_ipython()
1062 ip.magics_manager.register(FooFoo)
1083 ip.magics_manager.register(FooFoo)
1063 oinfo = ip.object_inspect('foo')
1084 oinfo = ip.object_inspect("foo")
1064 nt.assert_true(oinfo['found'])
1085 assert oinfo["found"] is True
1065 nt.assert_true(oinfo['ismagic'])
1086 assert oinfo["ismagic"] is True
1087
1088 oinfo = ip.object_inspect("%%foo")
1089 assert oinfo["found"] is True
1090 assert oinfo["ismagic"] is True
1091 assert oinfo["docstring"] == FooFoo.cell_foo.__doc__
1066
1092
1067 oinfo = ip.object_inspect('%%foo')
1093 oinfo = ip.object_inspect("%foo")
1068 nt.assert_true(oinfo['found'])
1094 assert oinfo["found"] is True
1069 nt.assert_true(oinfo['ismagic'])
1095 assert oinfo["ismagic"] is True
1070 nt.assert_equal(oinfo['docstring'], FooFoo.cell_foo.__doc__)
1096 assert oinfo["docstring"] == FooFoo.line_foo.__doc__
1071
1097
1072 oinfo = ip.object_inspect('%foo')
1073 nt.assert_true(oinfo['found'])
1074 nt.assert_true(oinfo['ismagic'])
1075 nt.assert_equal(oinfo['docstring'], FooFoo.line_foo.__doc__)
1076
1098
1077 def test_multiple_magics():
1099 def test_multiple_magics():
1078 ip = get_ipython()
1100 ip = get_ipython()
@@ -1080,9 +1102,10 b' def test_multiple_magics():'
1080 foo2 = FooFoo(ip)
1102 foo2 = FooFoo(ip)
1081 mm = ip.magics_manager
1103 mm = ip.magics_manager
1082 mm.register(foo1)
1104 mm.register(foo1)
1083 nt.assert_true(mm.magics['line']['foo'].__self__ is foo1)
1105 assert mm.magics["line"]["foo"].__self__ is foo1
1084 mm.register(foo2)
1106 mm.register(foo2)
1085 nt.assert_true(mm.magics['line']['foo'].__self__ is foo2)
1107 assert mm.magics["line"]["foo"].__self__ is foo2
1108
1086
1109
1087 def test_alias_magic():
1110 def test_alias_magic():
1088 """Test %alias_magic."""
1111 """Test %alias_magic."""
@@ -1090,48 +1113,49 b' def test_alias_magic():'
1090 mm = ip.magics_manager
1113 mm = ip.magics_manager
1091
1114
1092 # Basic operation: both cell and line magics are created, if possible.
1115 # Basic operation: both cell and line magics are created, if possible.
1093 ip.run_line_magic('alias_magic', 'timeit_alias timeit')
1116 ip.run_line_magic("alias_magic", "timeit_alias timeit")
1094 nt.assert_in('timeit_alias', mm.magics['line'])
1117 assert "timeit_alias" in mm.magics["line"]
1095 nt.assert_in('timeit_alias', mm.magics['cell'])
1118 assert "timeit_alias" in mm.magics["cell"]
1096
1119
1097 # --cell is specified, line magic not created.
1120 # --cell is specified, line magic not created.
1098 ip.run_line_magic('alias_magic', '--cell timeit_cell_alias timeit')
1121 ip.run_line_magic("alias_magic", "--cell timeit_cell_alias timeit")
1099 nt.assert_not_in('timeit_cell_alias', mm.magics['line'])
1122 assert "timeit_cell_alias" not in mm.magics["line"]
1100 nt.assert_in('timeit_cell_alias', mm.magics['cell'])
1123 assert "timeit_cell_alias" in mm.magics["cell"]
1101
1124
1102 # Test that line alias is created successfully.
1125 # Test that line alias is created successfully.
1103 ip.run_line_magic('alias_magic', '--line env_alias env')
1126 ip.run_line_magic("alias_magic", "--line env_alias env")
1104 nt.assert_equal(ip.run_line_magic('env', ''),
1127 assert ip.run_line_magic("env", "") == ip.run_line_magic("env_alias", "")
1105 ip.run_line_magic('env_alias', ''))
1106
1128
1107 # Test that line alias with parameters passed in is created successfully.
1129 # Test that line alias with parameters passed in is created successfully.
1108 ip.run_line_magic('alias_magic', '--line history_alias history --params ' + shlex.quote('3'))
1130 ip.run_line_magic(
1109 nt.assert_in('history_alias', mm.magics['line'])
1131 "alias_magic", "--line history_alias history --params " + shlex.quote("3")
1132 )
1133 assert "history_alias" in mm.magics["line"]
1110
1134
1111
1135
1112 def test_save():
1136 def test_save():
1113 """Test %save."""
1137 """Test %save."""
1114 ip = get_ipython()
1138 ip = get_ipython()
1115 ip.history_manager.reset() # Clear any existing history.
1139 ip.history_manager.reset() # Clear any existing history.
1116 cmds = [u"a=1", u"def b():\n return a**2", u"print(a, b())"]
1140 cmds = ["a=1", "def b():\n return a**2", "print(a, b())"]
1117 for i, cmd in enumerate(cmds, start=1):
1141 for i, cmd in enumerate(cmds, start=1):
1118 ip.history_manager.store_inputs(i, cmd)
1142 ip.history_manager.store_inputs(i, cmd)
1119 with TemporaryDirectory() as tmpdir:
1143 with TemporaryDirectory() as tmpdir:
1120 file = os.path.join(tmpdir, "testsave.py")
1144 file = os.path.join(tmpdir, "testsave.py")
1121 ip.run_line_magic("save", "%s 1-10" % file)
1145 ip.run_line_magic("save", "%s 1-10" % file)
1122 content = Path(file).read_text()
1146 content = Path(file).read_text()
1123 nt.assert_equal(content.count(cmds[0]), 1)
1147 assert content.count(cmds[0]) == 1
1124 nt.assert_in("coding: utf-8", content)
1148 assert "coding: utf-8" in content
1125 ip.run_line_magic("save", "-a %s 1-10" % file)
1149 ip.run_line_magic("save", "-a %s 1-10" % file)
1126 content = Path(file).read_text()
1150 content = Path(file).read_text()
1127 nt.assert_equal(content.count(cmds[0]), 2)
1151 assert content.count(cmds[0]) == 2
1128 nt.assert_in("coding: utf-8", content)
1152 assert "coding: utf-8" in content
1129
1153
1130
1154
1131 def test_save_with_no_args():
1155 def test_save_with_no_args():
1132 ip = get_ipython()
1156 ip = get_ipython()
1133 ip.history_manager.reset() # Clear any existing history.
1157 ip.history_manager.reset() # Clear any existing history.
1134 cmds = [u"a=1", u"def b():\n return a**2", u"print(a, b())", "%save"]
1158 cmds = ["a=1", "def b():\n return a**2", "print(a, b())", "%save"]
1135 for i, cmd in enumerate(cmds, start=1):
1159 for i, cmd in enumerate(cmds, start=1):
1136 ip.history_manager.store_inputs(i, cmd)
1160 ip.history_manager.store_inputs(i, cmd)
1137
1161
@@ -1148,7 +1172,7 b' def test_save_with_no_args():'
1148 print(a, b())
1172 print(a, b())
1149 """
1173 """
1150 )
1174 )
1151 nt.assert_equal(content, expected_content)
1175 assert content == expected_content
1152
1176
1153
1177
1154 def test_store():
1178 def test_store():
@@ -1157,17 +1181,17 b' def test_store():'
1157 ip.run_line_magic('load_ext', 'storemagic')
1181 ip.run_line_magic('load_ext', 'storemagic')
1158
1182
1159 # make sure the storage is empty
1183 # make sure the storage is empty
1160 ip.run_line_magic('store', '-z')
1184 ip.run_line_magic("store", "-z")
1161 ip.user_ns['var'] = 42
1185 ip.user_ns["var"] = 42
1162 ip.run_line_magic('store', 'var')
1186 ip.run_line_magic("store", "var")
1163 ip.user_ns['var'] = 39
1187 ip.user_ns["var"] = 39
1164 ip.run_line_magic('store', '-r')
1188 ip.run_line_magic("store", "-r")
1165 nt.assert_equal(ip.user_ns['var'], 42)
1189 assert ip.user_ns["var"] == 42
1166
1190
1167 ip.run_line_magic('store', '-d var')
1191 ip.run_line_magic("store", "-d var")
1168 ip.user_ns['var'] = 39
1192 ip.user_ns["var"] = 39
1169 ip.run_line_magic('store' , '-r')
1193 ip.run_line_magic("store", "-r")
1170 nt.assert_equal(ip.user_ns['var'], 39)
1194 assert ip.user_ns["var"] == 39
1171
1195
1172
1196
1173 def _run_edit_test(arg_s, exp_filename=None,
1197 def _run_edit_test(arg_s, exp_filename=None,
@@ -1181,27 +1205,27 b' def _run_edit_test(arg_s, exp_filename=None,'
1181 filename, lineno, is_temp = M._find_edit_target(ip, args, opts, last_call)
1205 filename, lineno, is_temp = M._find_edit_target(ip, args, opts, last_call)
1182
1206
1183 if exp_filename is not None:
1207 if exp_filename is not None:
1184 nt.assert_equal(exp_filename, filename)
1208 assert exp_filename == filename
1185 if exp_contents is not None:
1209 if exp_contents is not None:
1186 with io.open(filename, 'r', encoding='utf-8') as f:
1210 with io.open(filename, 'r', encoding='utf-8') as f:
1187 contents = f.read()
1211 contents = f.read()
1188 nt.assert_equal(exp_contents, contents)
1212 assert exp_contents == contents
1189 if exp_lineno != -1:
1213 if exp_lineno != -1:
1190 nt.assert_equal(exp_lineno, lineno)
1214 assert exp_lineno == lineno
1191 if exp_is_temp is not None:
1215 if exp_is_temp is not None:
1192 nt.assert_equal(exp_is_temp, is_temp)
1216 assert exp_is_temp == is_temp
1193
1217
1194
1218
1195 def test_edit_interactive():
1219 def test_edit_interactive():
1196 """%edit on interactively defined objects"""
1220 """%edit on interactively defined objects"""
1197 ip = get_ipython()
1221 ip = get_ipython()
1198 n = ip.execution_count
1222 n = ip.execution_count
1199 ip.run_cell(u"def foo(): return 1", store_history=True)
1223 ip.run_cell("def foo(): return 1", store_history=True)
1200
1224
1201 try:
1225 try:
1202 _run_edit_test("foo")
1226 _run_edit_test("foo")
1203 except code.InteractivelyDefined as e:
1227 except code.InteractivelyDefined as e:
1204 nt.assert_equal(e.index, n)
1228 assert e.index == n
1205 else:
1229 else:
1206 raise AssertionError("Should have raised InteractivelyDefined")
1230 raise AssertionError("Should have raised InteractivelyDefined")
1207
1231
@@ -1210,7 +1234,7 b' def test_edit_cell():'
1210 """%edit [cell id]"""
1234 """%edit [cell id]"""
1211 ip = get_ipython()
1235 ip = get_ipython()
1212
1236
1213 ip.run_cell(u"def foo(): return 1", store_history=True)
1237 ip.run_cell("def foo(): return 1", store_history=True)
1214
1238
1215 # test
1239 # test
1216 _run_edit_test("1", exp_contents=ip.user_ns['In'][1], exp_is_temp=True)
1240 _run_edit_test("1", exp_contents=ip.user_ns['In'][1], exp_is_temp=True)
@@ -1234,17 +1258,18 b' def test_ls_magic():'
1234 lsmagic = ip.magic('lsmagic')
1258 lsmagic = ip.magic('lsmagic')
1235 with warnings.catch_warnings(record=True) as w:
1259 with warnings.catch_warnings(record=True) as w:
1236 j = json_formatter(lsmagic)
1260 j = json_formatter(lsmagic)
1237 nt.assert_equal(sorted(j), ['cell', 'line'])
1261 assert sorted(j) == ["cell", "line"]
1238 nt.assert_equal(w, []) # no warnings
1262 assert w == [] # no warnings
1263
1239
1264
1240 def test_strip_initial_indent():
1265 def test_strip_initial_indent():
1241 def sii(s):
1266 def sii(s):
1242 lines = s.splitlines()
1267 lines = s.splitlines()
1243 return '\n'.join(code.strip_initial_indent(lines))
1268 return '\n'.join(code.strip_initial_indent(lines))
1244
1269
1245 nt.assert_equal(sii(" a = 1\nb = 2"), "a = 1\nb = 2")
1270 assert sii(" a = 1\nb = 2") == "a = 1\nb = 2"
1246 nt.assert_equal(sii(" a\n b\nc"), "a\n b\nc")
1271 assert sii(" a\n b\nc") == "a\n b\nc"
1247 nt.assert_equal(sii("a\n b"), "a\n b")
1272 assert sii("a\n b") == "a\n b"
1248
1273
1249 def test_logging_magic_quiet_from_arg():
1274 def test_logging_magic_quiet_from_arg():
1250 _ip.config.LoggingMagics.quiet = False
1275 _ip.config.LoggingMagics.quiet = False
@@ -1336,6 +1361,6 b' def test_run_module_from_import_hook():'
1336 _ip.run_cell("import my_tmp")
1361 _ip.run_cell("import my_tmp")
1337
1362
1338 output = "Loaded my_tmp\nI just ran a script\nLoaded my_tmp\n"
1363 output = "Loaded my_tmp\nI just ran a script\nLoaded my_tmp\n"
1339 nt.assert_equal(output, captured.stdout)
1364 assert output == captured.stdout
1340
1365
1341 sys.meta_path.pop(0)
1366 sys.meta_path.pop(0)
General Comments 0
You need to be logged in to leave comments. Login now