import nose.tools as nt from IPython.core import inputtransformer2 as ipt2 from IPython.core.inputtransformer2 import make_tokens_by_line MULTILINE_MAGIC = ("""\ a = f() %foo \\ bar g() """.splitlines(keepends=True), """\ a = f() get_ipython().run_line_magic('foo', ' bar') g() """.splitlines(keepends=True)) INDENTED_MAGIC = ("""\ for a in range(5): %ls """.splitlines(keepends=True), """\ for a in range(5): get_ipython().run_line_magic('ls', '') """.splitlines(keepends=True)) MULTILINE_MAGIC_ASSIGN = ("""\ a = f() b = %foo \\ bar g() """.splitlines(keepends=True), """\ a = f() b = get_ipython().run_line_magic('foo', ' bar') g() """.splitlines(keepends=True)) MULTILINE_SYSTEM_ASSIGN = ("""\ a = f() b = !foo \\ bar g() """.splitlines(keepends=True), """\ a = f() b = get_ipython().getoutput('foo bar') g() """.splitlines(keepends=True)) AUTOCALL_QUOTE = ( [",f 1 2 3\n"], ['f("1", "2", "3")\n'] ) AUTOCALL_QUOTE2 = ( [";f 1 2 3\n"], ['f("1 2 3")\n'] ) AUTOCALL_PAREN = ( ["/f 1 2 3\n"], ['f(1, 2, 3)\n'] ) def test_continued_line(): lines = MULTILINE_MAGIC_ASSIGN[0] nt.assert_equal(ipt2.find_end_of_continued_line(lines, 1), 2) nt.assert_equal(ipt2.assemble_continued_line(lines, (1, 5), 2), "foo bar") def test_find_assign_magic(): tbl = make_tokens_by_line(MULTILINE_MAGIC_ASSIGN[0]) nt.assert_equal(ipt2.MagicAssign.find(tbl), (2, 4)) tbl = make_tokens_by_line(MULTILINE_SYSTEM_ASSIGN[0]) # Nothing to find nt.assert_equal(ipt2.MagicAssign.find(tbl), None) def test_transform_assign_magic(): res = ipt2.MagicAssign.transform(MULTILINE_MAGIC_ASSIGN[0], (2, 4)) nt.assert_equal(res, MULTILINE_MAGIC_ASSIGN[1]) def test_find_assign_system(): tbl = make_tokens_by_line(MULTILINE_SYSTEM_ASSIGN[0]) nt.assert_equal(ipt2.SystemAssign.find(tbl), (2, 4)) tbl = make_tokens_by_line(["a = !ls\n"]) nt.assert_equal(ipt2.SystemAssign.find(tbl), (1, 5)) tbl = make_tokens_by_line(["a=!ls\n"]) nt.assert_equal(ipt2.SystemAssign.find(tbl), (1, 2)) tbl = make_tokens_by_line(MULTILINE_MAGIC_ASSIGN[0]) # Nothing to find nt.assert_equal(ipt2.SystemAssign.find(tbl), None) def test_transform_assign_system(): res = ipt2.SystemAssign.transform(MULTILINE_SYSTEM_ASSIGN[0], (2, 4)) nt.assert_equal(res, MULTILINE_SYSTEM_ASSIGN[1]) def test_find_magic_escape(): tbl = make_tokens_by_line(MULTILINE_MAGIC[0]) nt.assert_equal(ipt2.EscapedCommand.find(tbl), (2, 0)) tbl = make_tokens_by_line(INDENTED_MAGIC[0]) nt.assert_equal(ipt2.EscapedCommand.find(tbl), (2, 4)) tbl = make_tokens_by_line(MULTILINE_MAGIC_ASSIGN[0]) # Shouldn't find a = %foo nt.assert_equal(ipt2.EscapedCommand.find(tbl), None) def test_transform_magic_escape(): res = ipt2.EscapedCommand.transform(MULTILINE_MAGIC[0], (2, 0)) nt.assert_equal(res, MULTILINE_MAGIC[1]) res = ipt2.EscapedCommand.transform(INDENTED_MAGIC[0], (2, 4)) nt.assert_equal(res, INDENTED_MAGIC[1]) def test_find_autocalls(): for sample, _ in [AUTOCALL_QUOTE, AUTOCALL_QUOTE2, AUTOCALL_PAREN]: print("Testing %r" % sample) tbl = make_tokens_by_line(sample) nt.assert_equal(ipt2.EscapedCommand.find(tbl), (1, 0)) def test_transform_autocall(): for sample, expected in [AUTOCALL_QUOTE, AUTOCALL_QUOTE2, AUTOCALL_PAREN]: print("Testing %r" % sample) res = ipt2.EscapedCommand.transform(sample, (1, 0)) nt.assert_equal(res, expected)